diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 017e4491..00000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_book -node_modules diff --git a/0-aktualnoe/baunti.md b/0-aktualnoe/baunti.md deleted file mode 100644 index 13d07d13..00000000 --- a/0-aktualnoe/baunti.md +++ /dev/null @@ -1,20 +0,0 @@ -## **Условия бессрочной Bounty-программы wiki.golos.io** - -Баунти-вознаграждение за редактирование и написание статей назначается в каждом отдельно взятом случае в диапазоне от 100 до 15000 GOLOS. Объем вознаграждения зависит от: - -* Количества статей; -* Подробности описания темы; -* Сложности объекта статьи \(т.е. создание или исправление материала для любых разделов, кроме “Новичкам”, будет оцениваться выше\) -* Способа предоставления информации \(материалы присланные в pull request на Github будут оцениваться выше\) - -Cтатьи присылайте в pull request на гитхаб [https://github.com/GolosChain/wiki/pulls](https://github.com/GolosChain/wiki/pulls). - -Решение о полезности, важности, корректности и, соответственно, объеме вознаграждения будет принимать команда Golos.io. -Выплаты баунти-вознаграждений будут производиться в течение 5 рабочих дней дней после публикации решения Golos.io с указанием суммы выплат. - -[Источник](https://golos.io/ru--golos/@goloscore/bounty-programma-wiki-golos-io-otchyot-i-prodlenie) - - - - - diff --git a/0-aktualnoe/hf-02.md b/0-aktualnoe/hf-02.md deleted file mode 100644 index c9e32463..00000000 --- a/0-aktualnoe/hf-02.md +++ /dev/null @@ -1,3 +0,0 @@ -# Новости Golos•Core. - -Новости команды Golos Core можно прочитать в ленте официального аккаунта https://golos.io/@goloscore \ No newline at end of file diff --git a/0-aktualnoe/kontakti-golos-core.md b/0-aktualnoe/kontakti-golos-core.md deleted file mode 100644 index 6e64b97c..00000000 --- a/0-aktualnoe/kontakti-golos-core.md +++ /dev/null @@ -1,27 +0,0 @@ -# Каналы взаимодействия с командой Golos•Core. - -- Новости команды Golos Core можно прочитать в ленте официального аккаунта https://golos.io/@goloscore - -- Канал на github [https://github.com/GolosChain/golos/issues](https://github.com/GolosChain/golos/issues) - -Создание задач и общение в комментариях к существующим являются инструментами двусторонней коммуникации между командой GolosCore, делегатами, клиентами, сообществом и др. Посредством github вы можете общаться и предлагать идеи для развития блокчейн Golos. - -- О составе ближайших hardfork или softfork вы можете узнать на канале github по ссылке [https://github.com/GolosChain/golos/milestones](https://github.com/GolosChain/golos/milestones) - -Пример версионирования: 0.X.0 - hardfork; 0.X.Y - softfork следующий за hardfork Х - \(примерная первоначальная предложенная дорожная карта разработки блокчейн Голос, можно посмотреть в белой бумаге [Golos Fund](https://wiki.golos.io/1-introduction/belaya-bumaga-golosfonda.html)\) - -- Отчетность на аккаунте [@goloscore](https://golos.io/@goloscore). - -Команда GolosCore будет информировать сообщество о состоянии текущей разработки и других важных новостях. В случае, если у вас нет аккаунта на github, то данный способ может являться дополнительным, резервным каналом коммуникации. Однако советуем общаться через задачи на github. - -- Чат в telegram, см статью [Телеграм-чаты Голоса](1-introduction/telegram-chati-golosa.md). - -Каналов общения достаточно много, поток информации через них проходит очень большой. В связи с этим, обращаем ваше внимание, что ваши вопросы, идеи, замечания и предложения, направленные иными способами коммуникации, могут быть утеряны в потоке информации. Просьба пользоваться указанными выше способами \(github и аккаунт[@goloscore](https://golos.io/@goloscore)\). - - - - - - - diff --git a/0-aktualnoe/kontakti-golosio.md b/0-aktualnoe/kontakti-golosio.md deleted file mode 100644 index b14b475b..00000000 --- a/0-aktualnoe/kontakti-golosio.md +++ /dev/null @@ -1,30 +0,0 @@ -# Каналы взаимодействия с командой разработки клиента Golos.io - -- Новости команды Golos.io можно прочитать в ленте официального аккаунта https://golos.io/@golosio - -#### Поддержка golos.io -- Служба поддержки: [канал Telegram](https://t.me/golos_support) и почта [support@golos.io](mailto:support@golos.io) -- Комьюнити-менеджер: [community@golos.io](mailto:community@golos.io) - - -- Разработка Golos.io: [канал Telegram](https://t.me/golos_developers) -- Сообщения об ошибках и предложения: [GitHub](https://github.com/GolosChain/tolstoy/issues) - -## Другие каналы -- [Голосовой чат на Discord](https://discordapp.com/channels/253590962381520897/253590962381520897) -- [Голос во ВКонтакте](https://vk.com/golos_io) -- [Голос на Facebook](https://www.facebook.com/www.golos.io/) -- [Голос на форуме Bitcointalk.org](https://bitcointalk.org/index.php?topic=1624364.0) -- [Голос на форуме Bitcoinfo.ru](http://forum.bitcoinfo.ru/viewtopic.php?f=13&t=26742) - - - - - - - - - - - - diff --git a/0-aktualnoe/o-razvitii-golos.md b/0-aktualnoe/o-razvitii-golos.md deleted file mode 100644 index c65577ba..00000000 --- a/0-aktualnoe/o-razvitii-golos.md +++ /dev/null @@ -1,3 +0,0 @@ -# Новости команды Golos.io - -Новости команды Golos.io можно прочитать в ленте официального аккаунта https://golos.io/@golosio \ No newline at end of file diff --git a/0-aktualnoe/svyaz-s-goloscore.md b/0-aktualnoe/svyaz-s-goloscore.md deleted file mode 100644 index 7acea48f..00000000 --- a/0-aktualnoe/svyaz-s-goloscore.md +++ /dev/null @@ -1,39 +0,0 @@ -# ✔ Предпочтительные механизмы взаимодействия с командами разработчиков - -# Коротко о взаимодействии команд Golos - - -Команды GolosIO и Golos•Core - это отдельные команды. Команда GolosIO, аналогично любой другой команде \(включая Golos•Core\), не имеет никаких привилегий для влияния на изменения в блокчейн или состав hardfork и softfork. Команда GolosIO может взаимодействовать с Golos•Core посредством описанных ниже механизмов \(github\), которые необходимы для создания дисциплины коммуникации всех заинтересованных сторон. - -Все объявления и планы, опубликованные от лица команд GolosIO, Golos•Core или GolosFund, относятся к непосредственной работе соответствующей команды. По всем вопросам относительно опубликованной информации просьба обращаться к соответствующей команде. - -Каждая команда \(как и делегаты, клиенты, сообщество\) имеет возможность в равной степени как предлагать, так и влиять на развитие цепочки, однако, планы о предстоящих фичах \(для их обсуждения\) и составе hardfork/softfork будут анонсироваться от аккаунта [@goloscore](https://golos.io/@goloscore). - -[Источник](https://golos.io/goloscore/@goloscore/predpochtitelnye-mekhanizmy-vzaimodeistviya-s-komandoi-goloscore). - -# Каналы взаимодействия с Golos.io - -- Новости команды Golos.io можно прочитать в ленте официального аккаунта https://golos.io/@golosio - -# Каналы взаимодействия с Golos•Core. - -- Новости команды Golos Core можно прочитать в ленте официального аккаунта https://golos.io/@goloscore - -- Канал на github [https://github.com/GolosChain/golos/issues](https://github.com/GolosChain/golos/issues) - -Создание задач и общение в комментариях к существующим являются инструментами двусторонней коммуникации между командой GolosCore, делегатами, клиентами, сообществом и др. Посредством github вы можете общаться и предлагать идеи для развития блокчейн Golos. - -- О составе ближайших hardfork или softfork вы можете узнать на канале github по ссылке [https://github.com/GolosChain/golos/milestones](https://github.com/GolosChain/golos/milestones) - -Пример версионирования: 0.X.0 - hardfork; 0.X.Y - softfork следующий за hardfork Х - \(примерная первоначальная предложенная дорожная карта разработки блокчейн Голос, можно посмотреть в белой бумаге [Golos Fund](https://wiki.golos.io/1-introduction/belaya-bumaga-golosfonda.html)\) - -- Отчетность на аккаунте [@goloscore](https://golos.io/@goloscore). - -Команда GolosCore будет информировать сообщество о состоянии текущей разработки и других важных новостях. В случае, если у вас нет аккаунта на github, то данный способ может являться дополнительным, резервным каналом коммуникации. Однако советуем общаться через задачи на github. - -- Чат в telegram, см статью [Телеграм-чаты Голоса](1-introduction/telegram-chati-golosa.md). - -Каналов общения достаточно много, поток информации через них проходит очень большой. В связи с этим, обращаем ваше внимание, что ваши вопросы, идеи, замечания и предложения, направленные иными способами коммуникации, могут быть утеряны в потоке информации. Просьба пользоваться указанными выше способами \(github и аккаунт[@goloscore](https://golos.io/@goloscore)\). - - diff --git a/0-aktualnoe/vakansii-komandi.md b/0-aktualnoe/vakansii-komandi.md deleted file mode 100644 index 4089fe2c..00000000 --- a/0-aktualnoe/vakansii-komandi.md +++ /dev/null @@ -1,3 +0,0 @@ -###Вакансии команд Голоса - -Информация о вакансиях обновляется. \ No newline at end of file diff --git a/0-aktualnoe/vnimanie-alternativnie-tochki-vhoda.md b/0-aktualnoe/vnimanie-alternativnie-tochki-vhoda.md deleted file mode 100644 index 4b74fc31..00000000 --- a/0-aktualnoe/vnimanie-alternativnie-tochki-vhoda.md +++ /dev/null @@ -1,15 +0,0 @@ -Если у вас возникает проблема с отображением сайта golos.io, - -> ##### Вы можете воспользоваться зеркалом сайта на домене [**Golos.blog**](https://golos.blog/). - -Напоминаем, вводить свои личные данные — логин, пароль, приватные ключи — на других сайтах c именем Golos.\* \(кроме Golos**.io** и Golos**.blog**\)** **строго не рекомендуется с точки зрения обеспечения безопасности. - -> ##### Существует также **мобильное приложение для Android**. - -Оно доступно [на Google Play](https://play.google.com/store/apps/details?id=io.golos.golos) и на странице [golos.io/app](https://golos.io/app). - - -> ##### Зеркало сайта Golos.io в TOR - -Адрес: golos4naqn64true.onion - diff --git a/1-introduction/The choice of the Power of the vote b/1-introduction/The choice of the Power of the vote deleted file mode 100644 index e69de29b..00000000 diff --git a/1-introduction/The choice of the Power of the vote.md b/1-introduction/The choice of the Power of the vote.md deleted file mode 100644 index c874e267..00000000 --- a/1-introduction/The choice of the Power of the vote.md +++ /dev/null @@ -1,14 +0,0 @@ -В [статье про Силу Голосования](//1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md) мы узнали о том, что голосовать за посты/комменты нужно не более 40 раз в сутки. Однако, есть возможность голосовать и за большее кол-во постов/комментов, но для этого вам нужно нарастить свою Силу Голоса желательно до нескольких тысяч. -Когда ваша Сила Голоса (далее - СГ) вырастит до 500, то при голосовании за посты и комменты у вас появится возможность выбирать с каким процентом от вашей текущей Силы Голосования (Voting Power) вы хотите проголосовать. -Скриншот: -![procent.png](https://images.golos.io/DQmYWa71fWjV7QUWW5ju7AGBLv2RZCsBsTCwZnbHZaAXB7t/procent.png) - -Например, если вы ставите 50%, то это означает, что вы проголосуете с половиной силы от вашей текущей СГ, таким образом - автор поста/коммента за которого вы голосуете, получит меньше от вашего лайка, и вы тоже получите меньше кураторских вознаграждений. -Сила Голосования (Voting Power) - это что-то вроде батарейки, и когда вы ставите меньше процентов при голосовании за пост/коммент, то эта "батарейка" расходуется экономнее. -То есть, если вы будете каждый раз при голосовании выставлять 50%, то сможете уже голосовать (лайкать) за 80 постов в сутки вместо 40. Если каждый раз будете выставлять на 25% - то сможете проголосовать уже за 160 постов/комментов в сутки без существенного ущерба вашей "батарейке". - -Такой подход можно использовать когда вы уже нарастили свою СГ и она составляет **несколько тысяч или несколько сотен тысяч**. -Если же ваша СГ ещё слишком мала, то голосовать всегда лучше со 100% силой и помнить про 40 лайков в сутки. - -Если нажать на стрелочку около кол-ва голосов за пост, то можно увидеть, с каким процентом своей Силы Голосования (Voting power) проголосовал тот или иной пользователь. Скриншот: -![proc3.png](https://images.golos.io/DQmde86bihzC1FZ8h5BZB5AnuSRatRqVyzRRCWEs91EFcbe/proc3.png) \ No newline at end of file diff --git a/1-introduction/benefitsiarstvo.md b/1-introduction/benefitsiarstvo.md deleted file mode 100644 index c59cac9c..00000000 --- a/1-introduction/benefitsiarstvo.md +++ /dev/null @@ -1,70 +0,0 @@ -#Бенефициарство на golos.io - -Для развития Golos.io [введено](https://golos.io/golosio/@golosio/dlya-razvitiya-golos-io-vvoditsya-beneficiarstvo) бенефициарство. Это значит, что 10% награды с каждого поста и комментария станут инвестицией в развитие проекта Golos.io. На первом этапе эти средства будут использованы для аренды серверов, для поддержки нод и серверов, для поддержки сервисов нотификаций. - - -**Вопрос**. Кто такой бенефициар? - -**Ответ**. Бенефициар - выгодоприобретатель, любой (по выбору) аккаунт на Голосе, которому блокчейн автоматически перечислит оговоренный процент от вознаграждения за ваш пост. -
- - -**В**. Как это работает? - -**О**. При написании поста нужно дополнить его несколькими служебными командами, указать аккаунты-бенефициары, и кому какой процент выплатить. В момент получения вознаграждения за пост, блокчейн автоматически вычтет и распределит вознаграждение кураторам, и затем с оставшейся суммы вычислит и распределит заданный процент бенефициарам. -
- - -**В**. Нужно ли мне дополнительно делать какие-то действия для выплаты бенефициарного вознаграждения? - -**О**. Нет. Блокчейн все сделает сам. Точно так же как выплачиваются авторские и кураторские вознаграждения. -
- - -**В**. Я забыла указать бенефициара (указала не того/ ошибся в логине/ошибся в проценте). Как мне отредактировать пост? - -**О**. Никак. Указание бенефициара - необратимое действие и изменить ничего нельзя. -
- - -**В**. Как Голос будет получать отчисления, если я просто пишу пост и ничего дополнительно не указываю? - -**О**. Сайты golos.io и golos.blog находятся под контролем команды голоса. Поэтому код сайтов изменен таким образом, что пост, который вы размещаете через эти сайты, автоматически дополняется данными о бенефициаре и проценте. -
- - -**В**. Как посмотреть кого я указала бенефициаром? - -**О**. На официальных сайтах голоса - никак. Можно посмотреть на сервисе от @vik, заменив в ссылке на ваш пост golos.io на golos.cf - -Например ссылка на этот пост: -https://golos.io/ru--zhiznx/@netfriend/ru--beneficziarstvo-dlya-chaijnikov - -тогда дополнительную информацию можно увидеть тут: -https://golos.cf/ru--zhiznx/@netfriend/ru--beneficziarstvo-dlya-chaijnikov - -Там, после текста поста можно увидеть строчку: -`Бенефициары: []` -Это значит пост опубликован без бенефициаров. - -Иногда строчка может быть такой: -`Бенефициары: [ { "account": "golosio", "weight": 1000 } ]` -Это значит что в этом посте бенефициаром указан аккаунт golosio и он получит часть вашего вознаграждения за пост. -
- - -**В**. Воспользовавшись ссылкой выше я увидела в моем посте такую строку: -`Бенефициары: [ { "account": "golosio", "weight": 1000 } ]` -Это означает, что блокчейн с меня удержит 1000% (!!!) в пользу golosio? - -**О**. Нет. В посте указываются не проценты. (Или для простоты понимания проценты с сотыми долями, но без запятой) -Все вознаграждение (100,00%) составляет 10 000 долей. Соответственно указанное число в 1000 долей равно 10,00%. -
- - -**В**. Я не хочу выплачивать бенефициарные вознаграждения команде Голоса. Я хочу указать своих бенефициаров/ не хочу указывать никого. Как мне поступить? - -**О**. Использовать для постинга редактор https://golos.cf/md/ от @vik, который позволяет указать/не указывать бенефициаров явным образом. Или использовать альтернативные клиенты блокчейна Голос, которые не предусматривают бенефициарные отчисления. - - -[Источник](https://golos.io/ru--zhiznx/@netfriend/ru--beneficziarstvo-dlya-chaijnikov) \ No newline at end of file diff --git a/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md b/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md deleted file mode 100644 index 56a92e47..00000000 --- a/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md +++ /dev/null @@ -1,9 +0,0 @@ -Практически все новички, пришедшие на платформу Голос, сразу начинают голосовать \(лайкать\) все посты без разбора, не задумываясь о том, сколько раз они лайкнули. Это **неправильно**. - -Каждый раз когда пользователь лайкает чей-либо пост или коммент - его **Мощность Голоса (Voting Power)** снижается. А чем меньше мощность голоса - тем меньше GBG получит автор, которого вы лайкнули и тем меньше получите вы за свой поставленный лайк \(так называемое кураторское вознаграждение\).  - -**Уровень своей Мощности голоса (Voting Power) можно посмотреть на сайте golos.io в правом верхнем углу экрана, рядом с вашим логином и аватаром.** - -Voting Power не стоит снижать ниже 80%, особенно, если вы ещё новичок и у вас маленькая мощность голоса. В сутки нужно лайкать не более 40 постов \(или комментов\), это как раз снижает силу вашей голосовалки примерно на 20%, то есть - со 100% снижается до 80%. - -Что же делать, если вы налайкали уже много постов и ваша мощность голоса \(Voting Power\) упала практически к плинтусу? Ответ простой: нужно просто прекратить лайкать посты и комменты на несколько дней... Да и писать посты в это время тоже нежелательно. Нужно подождать, пока ваша мощность голоса \(Voting Power\) нарастёт хотя бы до 95% и более. В сутки она восполняется на 20%. \ No newline at end of file diff --git a/1-introduction/faq.md b/1-introduction/faq.md deleted file mode 100644 index 80ad70fe..00000000 --- a/1-introduction/faq.md +++ /dev/null @@ -1,223 +0,0 @@ -# ❓❗ Вопросы и ответы - Информация о Голосе - - -### Общие вопросы -#### Что такое Голос? -Говоря простыми словами, Голос - это социальная платформа. То есть место для общения пользователей. -В Голосе Вы можете опубликовать свою статью о том, что Вы любите, можете поделиться своими фотографиями, а можете просто вести свой блог. - -Другими словами, Голос чем-то похож на смесь обычной социальной сети наподобие Фейсбука и более комплексной платформы для блогеров, наподобие Живого Журнала. - -В Голосе нет приоритета для тех или иных материалов, но чем лучше материал (далее - контент), который Вы публикуете, тем больше шансов у Вас заработать... да-да, именно заработать! - -Вы можете посмотреть следующее короткое видео, но у Вас наверняка останутся вопросы, поэтому после просмотра читайте wiki дальше! -
- -[![ГОЛОС - инновационная и децентрализованная медийная платформа](https://img.youtube.com/vi/8a0TPACOu2k/0.jpg)](https://www.youtube.com/watch?v=8a0TPACOu2k) - -#### В чем уникальность Голоса? -Медиа-платформа с токенами - не инновационное решение. Но у Голоса есть особенности. - -Во-первых, это первый проект, ориентированный на русскоязычную аудиторию. На данный момент в русскоязычном пространстве нет проекта, который с помощью децентрализации и токенов решает проблему вознаграждения авторов за контент. Система стимулов оригинального Стима не подходит для неанглоязычного контента. - -Во-вторых, цель этого проекта - дать возможность блогерам, журналистам и всем русскоязычным пользователям размещать качественный контент, не опасаясь блокировки и цензуры. В ситуации, когда право на свободу слова декларируется, но блокируется, важно иметь ресурс, где это право всегда можно реализовать. - -В-третьих, это межстрановая платформа, работа которой будет поддерживаться во всех странах, где проживает русскоязычное население. - -#### Чем Голос отличается от финансовой пирамиды? -Голос - социальная сеть, построенная на публичном блокчейне. Вознаграждение пользователей осуществляется за счет дополнительной эмиссии токенов. При этом распределением токенов управляют все пользователи сети через голосование за лучший контент. -Отличие от финансовых пирамид фундаментально: -- открытый программный код; -- прозрачность всех операции; -- отсутствие конечного выгодоприобретателя; -- отсутствие обязательств на выплату фиксированного дохода; -- отсутствие центрального администратора. - -Блокчейн - децентрализованный реестр сплошного учета транзакций со встроенными экономическими стимулами для участников сети, которые задаются математическим алгоритмом. - -Для поддержания децентрализации предусмотрена система мотивации участников сети токенами. В случае с Голосом предусмотрено вознаграждение создателей контента, читателей, майнеров, рекомендателей. - -Эмиссия токенов описана в аналитической документации. Токены эмитируются в соответствии с математическим алгоритмом и распределяются в качестве вознаграждения участникам сети. - -Стоимость токенов определяется спросом на токены на открытом рынке. Спрос зависит от популярности сети. - -#### Как Голос может развиваться в социальный медиа-ресурс, если пользователи мотивированы голосовать за вознаграждение? -Анализ, отбор и рецензирование авторских работ - это ключевая функция существующих медиа-ресурсов. При этом в существующих медиа-ресурсах, работа с контентом централизована. Мы предлагаем децентрализованное решение, которое работает как рынок предсказаний на каждую публикуемую единицу контента. - -Пользователям Голоса выгодно оценивать и продвигать ("курировать" в терминах Голоса) уникальный и качественный контент, так как это будет привлекать новых читателей и новых авторов, что сделает медиа-ресурс более привлекательным, а токены Голоса - более ценными. С учетом низкой вероятности заработка на рекламных материалах авторы будут замотивированы на создание качественного контента, интересного обществу. - -#### Как защищаются права авторов уникального контента? -Что вы будете делать, если кто-то начнет копировать найденный в Интернет контент в свои посты в Голос? - -Эта проблема решается, например, с помощью пользовательских ботов, которые сканируют новые посты и сообщают о наличии аналогичного контента в комментариях к посту. Сообщество вправе голосовать за такой контент негативно, что в свою очередь лишает авторов ворованного контента награды, а также уничтожает репутацию. - -#### Как бороться с размещением материалов, содержащих порнографический контент, призывы к насилию и прочее? -Согласно политике Голоса, такие посты фильтруются из выдачи на сайте Golos.io. Однако у нас нет возможности повлиять на запись таких постов в блокчейн. - -Как показывает практика, контент такого рода успешно фильтруется негативным голосованием пользователей. - -#### Как бороться с постами рекламного характера? -Это не планируется делать. Пользователи Голоса сами решают, какие посты достойны вознаграждения, а какие нет. - -#### Как эмитируются токены в Голосе? Какая инфляция здесь? -Согласно алгоритму, вновь эмитируемые токены Голоса распределяются в следующей пропорции: 26.66% - текущим держателям Силы Голоса, 66.66% - на вознаграждение авторам контента и кураторам, остаток делегатам. - -Годовая инфляция содержится на уровне 15%, и снижается на 0.01% каждые 250,000 блоков (около 0.5% в год), пока не остановится на 0.95%. - -#### На каких биржах торгуются токены ГОЛОС и Золотой? -На данный момент проект поддержан биржами: [Bittrex](https://bittrex.com/), [Livecoin](https://www.livecoin.net), [Kuna](https://kuna.io/), [OpenLedger](https://openledger.io/) / [RuDEX.org](https://market.rudex.org/). - -Также возможна продажа токенов ГОЛОС на токены Золотой и обратно [на внутреннем рынке](https://golos.io/market). - -#### Как обеспечивается работоспособность и безотказность сети? Как решается вопрос блокировок? -Голос - это социальная сеть, работа которой изначально поддерживается во всех странах, где проживает русскоязычное население. Такая децентрализация позволяет обеспечить устойчивость сети к атакам и блокировкам. Сайт Golos.io только выводит данные из децентрализованной сети Голос, то есть из блокчейна, и дает пользователям с ним взаимодействовать. Golos.io не попадает ни под один действующий закон о блокировке. - -Если по какой-то причине Golos.io будет заблокирован, то вопрос предоставления доступа пользователям Голоса к сети будет решаться путем создания зеркал сайта. - -Кроме того, после запуска сети Голоса объявлены баунти за разработку приложений для ведущих операционных систем (Windows, OS X, Linux, Android, iOS) со встроенной поддержкой таких проверенных технологий как TOR, I2P и (возможно) VPN. Используя такое приложение пользователь сможет иметь доступ к сети в независимости от блокировки сайта и без необходимости иметь какие-либо технические знания. - -#### Почему введен Золотой, обеспеченный золотом (GBG)? -В Стиме существует токен Стимдоллар - это долговое обязательство этого блокчейна выплатить 1 американский доллар в Стимах в течение недели по средненедельному курсу. - -В блокчейне Голос действует аналогичный токен Золотой (GBG), но он привязан к цене 1 миллиграмма золота. Это долговое обязательство блокчейна Голос выплатить стоимость 1 миллиграмма золота в ГОЛОСАХ в течение недели по средненедельному курсу. - -Мы остановили свой выбор на золоте, поскольку этот актив является наиболее стабильным активом (с 2000 года по текущий момент доллар по отношению к золоту обесценился в 5 раз, рубль - в 10 раз). Историческая стабильность курса на золото делает токен, привязанный к его цене, отличным инструментом для сбережений и расчетов. - -#### Чем отличается Голос от других социальных площадок? -Голос - это платформа для размещения своего контента. - -В чем же отличие от других площадок? Первое отличие - размещая свой контент на Голосе Вы можете получать за него вознаграждение в виде... денег! Также вы сможете вознаграждать других, поддерживая их контент (лайкать/курировать его). Ну и третье основное отличие (хотя их еще много), это то что, размещая свой контент на Голосе, вы размещаете его в блокчейне (и в интернете) навсегда. Полностью удалить контент можно только разрушив всю сеть блокчейна. - -#### Что такое "форк"? -Важно упомянуть, что Голос - это форк Стима (www.steemit.com), социальной площадки в основном для англоязычных пользователей. - -Проще говоря, Голос это некая копия программного обеспечения Стима, которую уже нельзя вернуть вспять. То есть у Голоса есть своя собственная сеть (об этом чуть позже), со своими собственными "валютами" и своим информационным потоком. - -#### Что такое децентрализация? -Простыми словами, децентрализация - это когда отсутствует центральный орган управления. То есть это нечто, что управляется не одним человеком / командой / органом, а сразу многими. Эти "многие" для управления добиваются консенсуса (об этом ниже). - -Простой пример - положив свои деньги в банк, Вы доверяете банку (точнее руководству этого банка) ими управлять. То есть эти деньги, по сути, контролирует центральный орган управления банка. Это централизованная площадка. - -Допустим у Вас и еще у 100 человек есть свой колхоз (в котором Вы все являетесь владельцами). Прежде чем Вы, что-то выращиваете, Вы это обсуждаете и принимаете 100% обоюдное решение о том что выращивать, почем продавать, где продавать и тд. Это децентрализация. - -Википедия: децентрализация это - "процесс перераспределения, рассеивания функций, сил, власти, людей или вещей от центрального местоположения или управляющего органа." - -#### Это легально? -Совершенно! Так как процесс децентрализации площадки относится только к её управлению, а не к тому, что происходит в реальном мире, то право выбора управления остается за её владельцами (в случае децентрализации - за всеми её пользователями, так как каждый является владельцем). - -Если Вам интересно почитать еще о философии децентрализации, советуем [вот эту статью](http://bankspravka.ru/bankovskiy-slovar/detsentralizatsiya.html) - -#### Откуда берутся деньги? -В Голосе Вы можете получить вознаграждение за свой контент. Как это происходит? - -Сама сеть Голос (то, что вы видите это только "оболочка" сложной математической программы) "вырабатывается" и управляется путем решения сложных зашифрованных математических задач... То есть существует сеть компьютеров (серверов) которые, решая эти задачи, и вырабатывают так называемые "блоки" (об этом ниже). Генерируются токены (см. ниже) - награда, которую уже потом можно перевести на всеобщий доступный язык знакомых нам валют. - -66.66% от общей суммы наград за добытые блоки отдаются пользователем "оболочки" (например, сайта golos.io) - то есть авторам контента и тем, кто его "лайкает" (курирует). - -В свою очередь эти проценты распределяются между авторами и кураторами согласно тому, какой контент более популярен. - -Та статья или комментарий, которые получили больше голосов (лайков / кураторства) других пользователей, становится более популярной и получит больше награды. - -Вознаграждение за контент делится в пропорции 75/25, где 75% получает автор контента, а 25% делится между кураторами (теми, кто лайкал), согласно их СГ (Сила Голоса - об этом ниже). - -Стоит заметить что общая сумма вознаграждения всегда равна 66.66% от добытых "блоков" и независимо от того, кто за кого голосует, будет распределена между теми, кто в этот день писал / курировал контент. Это называется "пул выплат". - -#### Откуда у "блоков" ценность? -Есть спрос и предложение. То есть участники рынка определяют, что у этих "блоков" (монет / токенов) стоимость равна Х, а у других У. - -#### Кто такие "майнеры" и "делегаты"? -Кто же стоит за сетью и делает так, чтобы она работала? За сетью стоит команда делегатов или еще проще - заверителей, которая избирается путем голосования на сайте Голоса (или в самой сети) всеми её участниками (кстати, этот децентрализованный метод управления называется dPOS, он считается гораздо лучше, безопасней и быстрее, чем метод без делегатов). - -Заверители заверяют (подтверждают) блоки в сети путем решения математического кода (точнее это делает за них компьютер, иначе Вы бы долго ждали свою награду). - -Майнеры - это «добыватели» тех же блоков, так же - решая математическую задачу. В других видах блокчейна (например, в сети биткоина) они и добывают основную часть награды. Тут же основная часть приходится на делегатов (заверителей блоков). - -#### Что такое "цепочка блоков"? -Все это называется технологией цепочки блоков (blockchain). Очень простыми словами, это блоки кода, связанные между собой и формирующие единую цепочку. - -Каждый блок (звено цепочки) подходит только к предыдущему (кроме первого блока, у которого нет предыдущего). Другими словами, в каждом блоке есть очень сложное уравнение и чтобы его решить, нужно обязательно решить предыдущее уравнение, тем самым совершив привязку друг к другу этих уравнений (ну или звеньев цепочки). - -Не бывает такого, чтобы к одному блоку подходило два разных блока, что и гарантирует единую неизменяемую цепочку. А точнее, "заверители" блоков (делегаты), как раз и занимаются тем, что гарантируют, что никто не подменил код в этих уравнениях, тем самым гарантируя единую правильную цепочку для всех и отсутствие разветвления цепочек. - -Посмотрите это видео (5 минут): -
- -[![Что такое блокчейн](https://img.youtube.com/vi/TRtHhXOte0o/0.jpg)](https://www.youtube.com/watch?v=TRtHhXOte0o) - - -#### Что такое криптовалюта? -Криптовалюта - это валюта, которая эмитируется технологией блокчейн (описано выше) и является децентрализованной. - -Обычно такие валюты торгуются на биржах в интернете или напрямую p2p (то есть без посредников) по соотношению к другим таким валютам или к тем, к которым мы все привыкли ("фиатным" валютам: доллар, рубль, евро и т.д.). Обычно все криптовалюты ориентируются на цену биткоина (можно провести аналогию с ценой на золото, на которую ориентируются традиционные "фиатные" валюты). - -В медиаблокчейне Голос криптовалютой является монета ("токен"), которая тоже называется Голос (golos). Именно её цена определяет размер ежедневного "банка наград" (помните про 66.66%, которые сеть выделяет на выплаты за контент?) по отношению к привычной Вам валюте (чуть ниже подробнее). - -#### Деньги настоящие? -Если для Вас настоящие деньги это, допустим, доллар США, то после простого обмена вашей награды (за контент или курирование) на биткоин и далее на доллары США (на бирже), вы станете счастливым обладателем "настоящих" денег, которые можно использовать в повседневной жизни. - -#### Кто оплачивает "банкет"? -Можно сказать, что делегаты / заверители (смотрите выше), так как именно благодаря работе их компьютеров (серверов) и получается награда, из которой 66.66% выделяется на оплату "банкета". - -#### Что за цифры я вижу под статьей в golos.io? -Это та сумма (в той валюте, в которой Вы выбрали, чтобы отображалась информация на сайте), которую Вы потенциально можете получить после истечения 7-ми дней с момента публикации статьи. - -Также выплата является потенциальной по двум причинам: -а) человеку может разонравиться Ваша статья и он снимет с неё свой апвоут -б) статья может получить флаги от кого-либо, тогда потенциальная выплата может снизиться -в) курс Голоса по отношению к отображаемой валюте может измениться - -#### Как получить мои деньги? -Получить свои "кровные" довольно просто. - -После того, как вам будет начислена награда, Вы можете это сделать, зайдя во вкладку "кошелек", где увидите свои балансы трех «токенов» (об этом ниже). Вам нужен "токен" Золотой или GBG. Нажимаем на стрелку справа от суммы и кнопку "передать". Далее заполняем графу "кому" (биржа получатель), "количество" (с каким не жалко расстаться), "заметка" (часто биржи требуют специальную заметку, берётся с биржи) и нажимаем передать. Вводим свой пароль. - -На бирже Вы обмениваете монеты на биткоин или другие криптовалюты, и далее на удобную для Вас валюту. После чего биржа предложит несколько способов вывода. Выбираем тот, который Вам удобнее всего и "вуаля" - денежки Ваши. - -"Токены" Силы Голоса можно обменять на "токен" Голос, делается это из Вашего кошелька, путем нажатия клавиши "Уменьшить силу Голоса" - далее сумма вашей Силы Голоса будет начисляться Вам в кошелек в виде "токена" Голос 1 раз в неделю в 13 равных частях. То есть Вы будете получать её 13 недель. - -Уменьшать свою Силу Голоса крайне не рекомендуется, так как её стоимость защищена от рыночных спекуляций (читайте подробней про экономику Голоса в [ЧАВО](/1-introduction/faq.html) и в других частях Вики). - -"Токен" Голос, так же можно вывести на биржу и обменять на биткоин и / или другие валюты. - -#### Как "голосовать"? -Голосовать за контент ("делать апвоут", "курировать") Вы можете путем нажатия на стрелочку в круге, справа от суммы внизу статьи. - -В случае, когда у Вас есть более определенного количества СГ (Сила Голоса), Вам будет доступна опция "ползунок" или "шкала" - вы сможете регулировать Ваш Голос в размере от 1 до 100%. -Помните, что в день можно голосовать, сколько угодно раз, но с каждым голосованием ваша Сила Голоса будет становиться меньше (соответственно, Ваш "лайк/апвоут" будет стоить меньше). Но не волнуйтесь, Сила Голоса так же постоянно восстанавливается. -Если пользователь много голосовал и сильно посадил батарейку, придется подождать несколько часов или дней, чтобы восстановить мощность аккаунта. Не стоит голосовать больше 40 раз за сутки со 100% силой. - -#### Что такое Сила Голоса и другие «токены»? -В медиаблокчейне Голосе 3 вида "токенов" (монет) - Голос, Сила Голоса и Золотой. - -а) Голос - это, как уже упоминалось выше, основная монета. Она используется, чтобы определить стоимость Золотого и размер Вашей награды в удобной для Вас валюте. - -б) Сила Голоса - определяет "вес" Вашего голоса (как много / мало будет стоить Ваш "лайк") - -в) Золотой - на сайте выражен в удобной для Вас валюте (можно её выбрать во вкладке "Кошелек" в настройках). Приравнивается к курсу 1 мг золота на рынке (на рынке драгоценных металлов по текущему курсу). - -#### Кто придумал Голос? -За идеей проекта Голос стоит команда [Кибер Фонда](https://cyber.fund/) - это команда русскоязычных разработчиков, управляющих несколькими криптофондами. - -#### Кто придумал Стим? -Стим придуман компанией Steem-ink, у руля которой стоит основатель Даниэль Лаример, также основатель проектов bitShares и EOS (тоже криптовалюты). - -#### Кто занимается поддержанием и развитием сети? -С командой проекта можно ознакомиться по следующей ссылке: -https://golos.io/about#team - -#### Когда начала работать сеть Голос? -Сеть была развернута и запущена 18 октября 2016 года. После окончания краудфандинга, 3 декабря 2016 года, состоялись первые выплаты авторам и кураторам. - -#### Расскажите о Кибер•Фонде? -[Кибер•Фонд](https://cyber.fund) на данный момент является аналитическим ресурсом, на котором аккумулируется информация обо всех работающих, готовых к запуску блокчейн-системах и блокчейн-приложениях. - -На нашем сайте представлена самая проверенная и актуальная информация о таких системах и приложениях. При этом каждая система оценивается по разработанной нами методологии, чтобы облегчить пользователям, желающим проинвестировать в криптоэкономику, задачу выбора наиболее подходящих для инвестирования проектов. - -Мы активно инвестируем в криптоэкономику с 2011 года. Текущий портфель, который находится под нашим управлением - Satoshi•Pie -, представлен на сайте [Кибер•Фонда](https://cyber.fund/@satoshi). - -#### У меня остались вопросы, как с Вами связаться? -Вы всегда можете найти нас по [Контактам](//kontakti.html) - - - diff --git a/1-introduction/faq/otveti-komandi.md b/1-introduction/faq/otveti-komandi.md deleted file mode 100644 index 2e9cdceb..00000000 --- a/1-introduction/faq/otveti-komandi.md +++ /dev/null @@ -1,266 +0,0 @@ -## Ответы команды golos.io на вопросы новичков - -Авторы:[ @vp-liganovi4kov](https://golos.io/@vp-liganovi4kov "@vp-liganovi4kov") - -**1. Какие существуют дополнительные инструменты для большей эффективности в Голосе?** - -**Ответ:** -Для эффективного продвижения автора на golos.io необходимо активное участие в жизни платформы, которое может быть выражено в различных действиях: - -* постоянное комментирование материалов других авторов; - -* “перелинковка”, “гиперссылки” - упоминание постов пользователей в своем блоге; - -* увеличение базы подписчиков; - -* увеличение количества просмотров постов непосредственно на платформе; - -* шеринг материалов из Голоса на других платформы, с целью привлечения лояльных читателей; - -* участие в конкурсах, викторинах, эстафетах и т. д. \(Тема недели \(чат в телеграм [https://t.me/temanedeli](https://t.me/temanedeli), список конкурсов можно найти в “Афише” Лиги Авторов” [@liga.avtorov](https://golos.io/@liga.avtorov)\); - -* публикации текстов параллельно со страниц своего блога и со страниц тематических сообществ, с сохранением авторства\). - -**2. Как найти ботов-помощников для работы с голосом? Где их искать?** - -**Ответ:** -Инструменты для работы на Голое частично выложены на странице [https://golos.io/about](https://golos.io/about) и на сайте [http://chainstore.io](http://chainstore.io/), а также в аккаунте [@vik](https://golos.io/@vik) - -**3. Влияет ли время публикации поста на его популярность?** - -**Ответ:** -На этот вопрос нет точного ответа. Голос - платформа международная, и можно наблюдать активность разных регионов планеты в разное время. К примеру, ночью публикуются пользователи, живущие в Штатах, Канаде. Ранним утром - в Сибири и на Дальнем Востоке. Пользователями Golos.io проводятся исследования. Считается, что лучшее время для публикации, это утро \(9-12 часов по Мск\) и вечер \(20-22 часов по Мск\). Именно тогда большинство читателей готовы просмотреть свежие посты, с утра, или накопившиеся за день - вечером. Также популярны посты в середине дня, многие читают ленту в обед. - -**4. Я много голосовала и теперь у меня низкая Сила Голосования - 61.67% Voting Power. Это плохо? Как я могу это поправить? Я комментирую, но больше новичков, такую небольшую поддержку оказываю.** - -**Ответ:** -То, что ваш Voting Power уменьшается при частом голосовании, это нормально. Сила голоса каждого пользователя ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Скорость снижения зависит также от частоты голосования: чем чаще вы это делаете, тем быстрее она снижается. Если, к примеру, голосовать один раз в 20 минут \(примерно\), Сила голосования будет снижаться незначительно. Чтобы восстановить ее прежнее значение, вам нужно какое-то время не голосовать, полностью она восстанавливается за 24 - 48 часов. Если “посажена” сильно, то может восстанавливаться в течение недели. - -**5. Где можно посмотреть блоги китов и касаток, какие-нибудь ТОПы? -Стоит ли увеличить свою силу Голоса разовым “вливанием” суммы?** - -**Ответ:** -Дифференцированный поиск пользователей \(в нашем случае, по силе голоса\) на платформе пока не организован. Однако регулярно публикуются топы успешных авторов, популярных тем и т. д., [например](https://golos.io/ru--golos/@aleco/top-golosa-kto-imeet-samyi-bolshoi-ves-na-platforme-15-03-2018). - -Раздел “Популярное” также представляет собой топ наиболее высоко оцененных постов. - -Силу голоса можно увеличить различными способами, в том числе, приобретением токенов на бирже, как и когда вы считаете нужным. - -**6. Можно ли здесь продвинуться быстрее, имея готовые тексты \(стихи, проза\), опыт рерайтинга, корректирования.** - -**Ответ:** -Имея какое-то количество готовых материалов и опыт написания текстов у вас, конечно, есть некоторые преимущества на Golos.io. Поскольку регулярно обновляемый блог с качественным и уникальным контентом имеет больше шансов на успех. Также можно публиковать свои тексты, размещенные ранее на других площадках, верифицируясь в Культуре Голоса \(чат телеграм[https://t.me/kultura\_golosa](https://t.me/kultura_golosa)\), и оставляя ссылку на первоисточник под постом. - -**7. У меня пропала возможность писать комментарии и делать лайки, это что-то не то с сайтом?** - -**Ответ:** -Это могло произойти из-за того, что вы много голосовали \(ставили лайки\), в результате чего [уменьшилась ваша сила голоса.](https://wiki.golos.io/2-rewards/curation_rewards.html) Необходимо либо пополнить силу голоса, докупив или получив от других пользователей токены Golos и переведя их в силу голоса, либо какое-то время не производить на сайте никаких действий. Сила голосования полностью восстанавливается в течение 24 часов, иногда дольше. - -**8. Как увидеть посты того, кто мне интересен? Жму на профиль, там почты есть - жму туда, ничего не происходит... Почему как-то странно считаются посты в блоге, я всего 4 создал, а мне пишет, что у меня их 10?** - -**Ответ:** -При переходе в профиль интересного вам автора открывается страница блога с его публикациями в хронологическом порядке. Переходить в почту не нужно. - -Любой контент, написанный вами и опубликованный - пост или комментарий - в Голосе называется постом. Поэтому цифра в профиле блога зачастую гораздо больше, чем количество публикаций. - -**9. Почему возле некоторых постов появляется логотип голоса и надпись 100% к силе голоса? Как еще выставляются проценты?** - -**Ответ:** -Это означает, что при публикации этих постов вы установили распределение вознаграждения 100% в силу голоса. Есть еще вариант 50/50, он означает, что 50% вознаграждения пойдут в силу голоса, а 50% - в GBG. - -**10. Почему иногда пропадают комментарии и даже опубликованные статьи? Что делать в такой ситуации? Бывало так, что даже показываются на мгновение в ленте, перегружаешь - посты исчезают. Пару раз сталкивалась с тем, что комменты были - и нет их.** - -**Ответ:** -Скорее всего, ваша публикация произошла в неудачный момент “рассинхронизации” нод. Это технические сбои, с которыми мы боремся. Ваш материал просто “не дошел” до блокчейна. В этом случае нужно запостить еще раз. - -[Источник](https://golos.io/golosio/@vp-liganovi4kov/novaya-rubrika-obratnaya-svyaz-otvety-komandy-golos-io-na-voprosy-novichkov) - -### Часть 2. - -**1. Раньше было оптимальным получать награду в выплатах 50/50, как мне объяснили, 50% монетами, 50% в Силу Голоса. Какую позицию выбрать сейчас \(50/50 или 100% в Силу Голоса\), чтобы это было максимально эффективно?** - -**Ответ:** -Вознаграждение за посты теперь начисляется в токенах Голоса, часть из которых впоследствии идет в Силу Голоса. Для начала логично “прокачать” свой аккаунт, чтобы потом он работал на вас и способствовал получению большего вознаграждения. То есть, награду за какое-то количество первых постов лучше переводить в Силу Голоса, а далее уже распределять, как 50/50, для поддержания репутации и получения выплат. - -**2. Чтобы не потерять голоса от флагов, стоит ли их выводить в сейф?** - -**Ответ:** -Сейф предназначен для защиты накоплений в случае воровства аккаунта. -Флаги никак не могут повлиять на Голоса, которые уже хранятся в кошельке. Из-за флагов можно потерять голоса, которые пост получает в течение семидневного окна выплат. -Как только окно выплат закрывается, поставить флаг посту и уменьшить количество полученных голосов нельзя. - -**3. В голосе можно писать личные сообщения? Как и где это делать?** - -**Ответ:** -Система личных сообщений для сайта Golos.io в разработке. Скоро функционал можно будет увидеть на песочнице. -Однако, с реализацией данного сервиса есть некоторые сложности. -Оптимизация работы личных сообщений полностью зависит от реализации API по постраничной выдаче данных блокчейна. Задача не попала в список на текущий ХФ и была выставлена на баунти. - -Любой из разработчиков сообщества Голоса может реализовать данную задачу, награду можно обсудить с командой [@golosio](https://golos.io/@golosio), пишите на почту dev@golos.io или телеграмм [@NickShtefan](https://golos.io/@nickshtefan) - -**4. Я, конечно, давненько не заходил сюда, но с каких это пор голос ругается на изображения свыше 2 мб как "слишком большие" и не дает их загружать?!** - -**Ответ:** -Ограничение по загрузке в пост тяжелых изображений существует с начала функционирования платформы. Чтобы добавить в пост картинку размером свыше 2 Мб, нужно сначала загрузить ее на хостинг, а затем полученную ссылку вставить в пост. - -**5. Как работать с поиском. В нем можно искать по тегам, или по фразе, или по нику?** - -**Ответ:** -На данный момент в блог-платформу Golos.io интегрирован поисковик google. С его помощью можно искать по фразам, отдельным словам и по юзернейму. - -Поисковика непосредственно по сайту Golos.io пока нет, в будущем команда планирует разработку данного функционала. - -**6. Я новичок. Я случайно нажал кнопку "отблагодарить", и все токены, которые у меня были, перевелись автору статьи. Как работает эта кнопка?** - -**Ответ:** -С помощью кнопки “отблагодарить” можно перевести автору поста какое-то количество голосов. Она активна и когда окно выплат поста открыто, то есть он собирает апвоуты, и когда оно уже закрыто. Если вам понравился материал, но проголосовать за него уже нет возможности, то можно отблагодарить автора через эту кнопку. Для этого необходимо ввести в соответствующую строку количество голосов, которые вы готовы передать, написать заметку и подтвердить перевод активным ключом. - -Если у вас перевелись все токены, это означает, что вы не ввели вручную сумму перевода, а нажали на баланс, который в полном объеме отобразился в окне перевода, и подтвердили действие активным ключом. -Напоминаем, для публикации и комментирования используйте постинг ключ. - -**7. Как конвертировать голос в gbg?** - -**Ответ:** -Печать GBG в системе сейчас прекратилась ввиду того, что количество данной валюты набрало критическую массу. Спустя какое-то время GBG снова может начать печататься. Это произойдет, когда количество денежной массы в системе увеличится, и процент GBG относительно всего пула станет меньше. Делистинга в ближайшее время не предвидится, поэтому GBG можно покупать и продавать на биржах: Bittrex, Livecoin, Liqui, Kuna и внутреннем рынке. - -**8. Как лучше поступить с Голосами? Перевести их в Силу голоса? Или пусть так просто лежат в голосах пока?** - -**Ответ:** - -При переводе голосов в Силу Голоса вы усиливаете ее и вес своего апвоута, соответственно, тем самым в перспективе укрепляете свою позицию на платформе и извлекаете больше пользы. Также на голоса, переведенные в Силу Голоса, начисляется процент от эмиссии токенов. - -Однако, если возникнет необходимость перевести криптовалюту в фиатные деньги, с голосами сделать это будет проще, их можно продать на биржах. А вот Силу Голоса сначала нужно перевести в голоса, а этот переход занимает порядка 13 недель. - -Таким образом, переводить ли голоса в Силу Голоса и в каком количестве, зависит от целей конкретного пользователя. - -**9.Почему кошелек иногда отображается только за 2-3 дня, прокрутка не работает дальше, а иногда там можно посмотреть историю даже за неделю?** - -**Ответ:** -Это связано с вашей активностью. Если в последнее время переводов было сделано много, то лента кошелька сокращается до значения “за последние сутки” или “в течение недели”. Если переводов было не много, то она может отображать действия за несколько недель или за месяц. - -**10. Есть ли приложение для Android, работает ли оно корректно, можно ли его ставить, или лучше пользоваться на телефоне браузером?** - -**Ответ:** -Android приложение Golos.io существует, скачать его можно в Google play. - -В мобильных устройствах удобнее пользоваться приложением, нежели открывать сайт платформы через браузер. В приложении есть поиск по тегам, ночной режим, компактная лента, возможность подписаться на автора и многое другое. Оно постоянно обновляется, например, в числе последних апдейтов была добавлена “батарейка” - отображение мощности голоса в профиле пользователя, расширен выбор валют, добавлено отображение для пролистывания изображений в галерее, поиск по пользователям и произведен апдейт профиля пользователя. - -[Источник](https://golos.io/golosio/@vp-liganovi4kov/obratnaya-svyaz-otvety-komandy-golos-io-na-voprosy-novichkov) - -### Часть 3. -**1. Как связаться с пользователем, если у него в аккаунте нет ни одного поста? И в телеграм он не отвечает, видимо, незнакомым аккаунтам.** - -Ответ: Связаться с пользователем можно, отправив ему минимальный перевод, например, 0,001 gbg, через ваш кошелек, и в поле memo написать сообщение или интересующий вас вопрос. - -**2. Я не могу опубликовать пост. Выдает текст что-то типа "У вас не хватает Мощности Голоса", что делать в таком случае?** - -Ответ: Такая ситуация может возникнуть, если вы до этого слишком много голосовали, или опубликовали большое количество постов. Проверьте, стоит ли у вас галочка в окошке "проголосовать за свой пост", если да, попробуйте ее снять. Возможно, это поможет. Если нет, вам необходимо увеличить вашу Силу голоса, либо подождать, когда она повысится, либо увеличить ее посредством приобретения токенов Голос и перевода их в Силу Голоса. Подробнее можно почитать в Вики Голоса, или здесь - -**3. Не могу зарегистрироваться уже третий день. Не приходит ни код, ни смс.** - -Ответ: Если при регистрации не произошла верификация вашего номера, и поля формы, которые нужно заполнить, не стали активными, сделайте скрины процесса и напишите в чат технической поддержки https://t.me/golos_support. - -**4. Прочитал, что сайт golos.io снимает 10% за публикацию через себя. Но я совсем новичок, большинство моих текстов ничего не стоят. Каким образом будет осуществляться этот расчет с нулевых выплат по постам?** - -Ответ: Бенефициарная награда аккаунту @golosio поступает не в токенах Golos, а в Силе Голоса. 10% за публикацию, сделанную через сайт Golos.io, исчисляются из суммы, которую собрал пост. Если выплата за пост нулевая, то и отчисления нулевые. -Сейчас мы работаем над созданием механизма поощрения пользователей, которые публикуют свои материалы через Golos.io. - -**5. Обнаружил в кошельке во вкладке Разрешения уйму ключей. Какие из них мне нужно сохранять? Где почитать про эту страницу?** - -Ответ: Ключи - это ваш “паспорт” в системе блокчейн, пароль не только от аккаунта, где опубликованы посты, но и от кошелька, где могут быть токены. Поэтому относиться внимательно нужно ко всем ключам, и хранить их в нескольких местах, желательно не только в электронном виде, но и на бумаге. -Самый важный - это ключ владельца, он включает в себя функции всех остальных ключей, и необходим для обновления пароля, если есть подозрения, что пароль скомпрометирован. Но без крайней надобности его лучше не использовать. Для постинга и голосования применяйте постинг-ключ, для переводов - активный ключ. -Почитать подробнее о ключах можно в Вики Голоса. - -**6. Почему при моем голосовании выплата автору, которого я поддерживаю, не увеличивается?** - -Ответ: Вероятно, ваша Сила Голоса еще слишком мала, чтобы принести автору доход. Когда она повысится, вы увидите "стоимость" вашего апа, проголосовав за любого автора. - -**7. Вижу под постами интересные цифры - процент силы голосования разный у разных людей. Но у меня нет возможности проголосовать на 50% или 80%. Почему? Она появится когда-нибудь? Такая возможность?** - -Ответ: Ползунок, позволяющий изменять % апвоута, появится со временем, когда ваша Сила Голоса и репутация увеличатся. Сейчас, пока вы новичок, вы не можете регулировать % своего голоса, и в этом нет экономической выгоды, поскольку ваша сила голосования слишком мала. - -**8. Я могу регистрировать несколько аккаунтов? Или только один? Один аккаунт на один номер телефона?** - -Ответ: Да, вы можете иметь несколько аккаунтов. При регистрации через сайт Golos.io для каждого из них потребуется отдельный номер телефона, поскольку подтверждение регистрации происходит по смс. -Подробнее о способах регистрации - здесь. - -**9. Какие действия я могу совершать с минимальной Силой Голоса, той, которая полагается мне после регистрации? Я могу писать посты, комментировать, голосовать?** - -Ответ: Вы можете публиковать посты, комментировать и голосовать за другие материалы. Но не стоит сразу размещать много постов и часто голосовать. Помните, что на платформе есть лимиты: в сутки не более 4 постов и 40 апвоутов со 100% Силой Голоса. -Также обращайте внимание на расход вашей “мощности” голоса, она ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Скорость снижения зависит от частоты голосования: чем чаще, тем быстрее она снижается. Отображение этих действий можно увидеть на "батарейке" в шапке сайта. -Чтобы восстановить “мощность“ голоса, нужно какое-то время не голосовать. Полностью она восстанавливается за сутки-двое. Если “посажена” сильно, то может восстанавливаться в течение недели. - -Источник - -### Часть 4. - -**1. Как связаться с пользователем, если у него в аккаунте нет ни одного поста? И в телеграм он не отвечает, видимо, незнакомым аккаунтам.** - -Ответ: Связаться с пользователем можно, отправив ему минимальный перевод, например, 0,001 gbg, через ваш кошелек, и в поле memo написать сообщение или интересующий вас вопрос. - -**2. Я не могу опубликовать пост. Выдает текст что-то типа "У вас не хватает Мощности Голоса", что делать в таком случае?** - -Ответ: Такая ситуация может возникнуть, если вы до этого слишком много голосовали, или опубликовали большое количество постов. Проверьте, стоит ли у вас галочка в окошке "проголосовать за свой пост", если да, попробуйте ее снять. Возможно, это поможет. Если нет, вам необходимо увеличить вашу Силу голоса, либо подождать, когда она повысится, либо увеличить ее посредством приобретения токенов Голос и перевода их в Силу Голоса. Подробнее можно почитать в Вики Голоса, или здесь - -**3. Не могу зарегистрироваться уже третий день. Не приходит ни код, ни смс.** - -Ответ: Если при регистрации не произошла верификация вашего номера, и поля формы, которые нужно заполнить, не стали активными, сделайте скрины процесса и напишите в чат технической поддержки https://t.me/golos_support. - -**4. Прочитал, что сайт golos.io снимает 10% за публикацию через себя. Но я совсем новичок, большинство моих текстов ничего не стоят. Каким образом будет осуществляться этот расчет с нулевых выплат по постам?** - -Ответ: Бенефициарная награда аккаунту @golosio поступает не в токенах Golos, а в Силе Голоса. 10% за публикацию, сделанную через сайт Golos.io, исчисляются из суммы, которую собрал пост. Если выплата за пост нулевая, то и отчисления нулевые. -Сейчас мы работаем над созданием механизма поощрения пользователей, которые публикуют свои материалы через Golos.io. - -**5. Обнаружил в кошельке во вкладке Разрешения уйму ключей. Какие из них мне нужно сохранять? Где почитать про эту страницу?** - -Ответ: Ключи - это ваш “паспорт” в системе блокчейн, пароль не только от аккаунта, где опубликованы посты, но и от кошелька, где могут быть токены. Поэтому относиться внимательно нужно ко всем ключам, и хранить их в нескольких местах, желательно не только в электронном виде, но и на бумаге. -Самый важный - это ключ владельца, он включает в себя функции всех остальных ключей, и необходим для обновления пароля, если есть подозрения, что пароль скомпрометирован. Но без крайней надобности его лучше не использовать. Для постинга и голосования применяйте постинг-ключ, для переводов - активный ключ. -Почитать подробнее о ключах можно в Вики Голоса. - -**6. Почему при моем голосовании выплата автору, которого я поддерживаю, не увеличивается?** - -Ответ: Вероятно, ваша Сила Голоса еще слишком мала, чтобы принести автору доход. Когда она повысится, вы увидите "стоимость" вашего апа, проголосовав за любого автора. - -**7. Вижу под постами интересные цифры - процент силы голосования разный у разных людей. Но у меня нет возможности проголосовать на 50% или 80%. Почему? Она появится когда-нибудь? Такая возможность?** - -Ответ: Ползунок, позволяющий изменять % апвоута, появится со временем, когда ваша Сила Голоса и репутация увеличатся. Сейчас, пока вы новичок, вы не можете регулировать % своего голоса, и в этом нет экономической выгоды, поскольку ваша сила голосования слишком мала. - -**8. Я могу регистрировать несколько аккаунтов? Или только один? Один аккаунт на один номер телефона?** - -Ответ: Да, вы можете иметь несколько аккаунтов. При регистрации через сайт Golos.io для каждого из них потребуется отдельный номер телефона, поскольку подтверждение регистрации происходит по смс. -Подробнее о способах регистрации - здесь. - -**9. Какие действия я могу совершать с минимальной Силой Голоса, той, которая полагается мне после регистрации? Я могу писать посты, комментировать, голосовать?** - -Ответ: Вы можете публиковать посты, комментировать и голосовать за другие материалы. Но не стоит сразу размещать много постов и часто голосовать. Помните, что на платформе есть лимиты: в сутки не более 4 постов и 40 апвоутов со 100% Силой Голоса. -Также обращайте внимание на расход вашей “мощности” голоса, она ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Скорость снижения зависит от частоты голосования: чем чаще, тем быстрее она снижается. Отображение этих действий можно увидеть на "батарейке" в шапке сайта. -Чтобы восстановить “мощность“ голоса, нужно какое-то время не голосовать. Полностью она восстанавливается за сутки-двое. Если “посажена” сильно, то может восстанавливаться в течение недели. - -[Источник](https://goldvoice.club/@vp-liganovi4kov/obratnaya-svyazx-otvety-komandy-golosio-na-voprosy-novichkov-1529760129/) - -### Часть 5. - -**1. Что делать, если пост не редактируется? Висит белая страница. -** -Ответ: Этот баг был оперативно устранен. На данный момент все посты должны открываться в режиме редактирования корректно. При возникновении данной ошибки на вашем устройстве сначала попробуйте очистить кэш браузера и файлы cookie сайта Golos.io, если это не поможет, напишите нам в Телеграм в чат техподдержки https://t.me/golos_support, или комьюнити-менеджеру Юле @yuliarodnikova. - -**2. Когда будет простой и понятный обменник для Голоса, чтобы вывести голоса в фиат? Я пробовала использовать стороннюю биржу - это очень сложно для меня.** - -Ответ: Обменник для Голоса существует, информация о нем есть вот здесь. Это телеграм-бот, воспользоваться сервисом можно, перейдя по ссылке https://t.me/golos_bank_bot. Недавно было закончено его тестирование, и сейчас бот работает в обычном режиме. Но все же не стоит сразу переводить большие суммы, сначала проверьте его на сделках небольшого объема. Задать любые вопросы по работе сервиса вы можете в чате техподдержки обменника по ссылке: https://t.me/joinchat/FaBODw9n97Qrqn8irqpmGQ. - -**3. Можно ли лайкать старые посты? Есть ли от этого польза? Есть ли какой-то принцип, как лайкать? Он где-то описан? Или это можно делать как бог на душу положит? -** -Ответ: Любой пост собирает голоса только в течение 7 дней с момента публикации. Поэтому голосование за посты старше 7 дней не имеет практической пользы, автор не получит награду за ваш голос, а вы кураторскую награду соответственно. -Почитать о принципах курирования материалов на Голосе можно здесь. - -**4. Делегирование. Объясните. Мне самому делегировать еще нечего. Но я хочу попытаться уговорить людей делегировать мне. Как я могу описать им выгоды, которые они получат от делегирования? Каков интерес того, кто делегировал и того, кому делегируют?** - -Ответ: Выгода того, кому делегируют, заключается в том, что таким образом он увеличивает свою Силу Голоса и может получать большее вознаграждение за курирование материалов. Экономической выгоды для того, кто ее делегирует, пока не предусмотрено. То есть здесь все зависит от личных договоренностей и условий, на которых вы берете Силу Голоса в аренду. Это может быть, например, процент от кураторских наград, или фиксированная плата за какой-то период. - -Реализовать автоматическое получение выгоды для того, кто делегирует Силу голоса, возможно, если сообщество запросит такой функционал, за него проголосуют делегаты и выберут, как одну из задач, на очередной хардфорк. - -**5. Недавно прочитал, что с каждого опубликованного поста 10% идет клиенту голос.ио. Разъясните пожалуйста - с комментариев тоже?** - -Ответ: Да, 10% награды, с каждого опубликованного на сайте Golos.io поста и комментария идут в Силу Голоса аккаунту @golosio. - -[Источник](https://golos.io/@vp-liganovi4kov/obratnaya-svyazx-otvety-komandy-golosio-na-voprosy-novichkov-1532369039/) \ No newline at end of file diff --git a/1-introduction/goloscfhistory.md b/1-introduction/goloscfhistory.md deleted file mode 100644 index cddec31d..00000000 --- a/1-introduction/goloscfhistory.md +++ /dev/null @@ -1,181 +0,0 @@ -# 🎯 golos.cf/history - Автономный, отказоустойчивый сервис для поиска, фильтрации и анализа любых событий в аккаунтах GOLOS/STEEM - -Автор: [@vik](https://gpolos.io/@vik) - -**Создан автономный инструмент для сканирования истории:** - -### 📌[golos.cf/history](https://golos.cf/history/) - -Его главное преимущество - автономность. Все вычисления происходят на стороне браузера, а значит вы можете просто скопировать html страницу и использовать ее даже если домен будет отключен. -Опция выбора публичной ноды поможет переключаться между доступными нодами, в том числе использовать блокчейн STEEMIT - -![](https://images.golos.io/DQmZ3WLeA1asMpHfn6diRxA2G36MUdjnUpa6rRhnCr5zQfc/Capture.PNG "golos.cf/history") - -Приложение позволяет работать в нескольких режимах: - -* Просмотр всей истории аккаунта -* Просмтор недавних операций -* Поиск недавних или всех операций содержащих ключевое слово \(в том числе наименование операций\) -* Поиск недавних или всех операций строго содержащих все указанные ключевые слова -* Поиск по множеству типов операций - - ![](https://images.golos.io/DQmdedKHLLXoWMSZBidyf24Rr6RhpV4vNYNzcaLFNpGmMRY/wide.gif "Опции golos.cf") - -## Примеры использования - -#### Поиск всех операций - -[@ladyzarulem](https://golos.io/@ladyzarulem)как-то попросила меня рассказать о способе поиска авторских наград для аккаунта[@vp-liganovi4kov](https://golos.io/@vp-liganovi4kov) -С помощью формы поиска это можно сделать так: - -![](https://images.golos.io/DQmTdBFh1SmMhdfs2A7HE68GPKA3viCaHqL5EcwrccjzazT/2.PNG "2.PNG") - -1. Указываем логин -2. Не указываем ключевые слова -3. Выбираем фильтр по операциям - Авторские награды -4. Отмечаем проверку всей истории - -Поскольку выбрано сканирование всей истории аккаунта это займет некоторое время. Скорость обработки во многом зависит от скорости вашего соединения и мощности пк. -![](https://images.golos.io/DQmeZHRb7oCXBhEVDxc5w1UAP1pdyob5Cg3nR4fXuHRYbzN/2.gif "2.gif") - -Через 10-15 секунд мы получаем результаты - -![](https://images.golos.io/DQmRTXArmEvBK3NonfZKWkghRxE37EwKL3bfEkqSfkHDN5J/3.PNG "3.PNG") - -### Поиск определенной операции - -Также задачу выше можно решить другим способом. Например нам нужно знать какая выплата была за пост`v-gostyakh-u-ligi-novichkov-avtor-lucisia-rasskazhet-o-tom-kak-dostich-postavlennykh-celei` - -Заполним форму вот так: -![](https://images.golos.io/DQmPKR63YZDcxMrxqLnzAtDpE6n6xLwXyVhyb3gNqUDfkBL/4.PNG "4.PNG") - -Обратите внимание, что в поисковые запросы добавлен запрос`author_reward`и ссылка, а также отмечена опция`в операциях должны присутствовать все указанные ключевые слова`, в тоже время выбраны любые типы операций. -Это значит, что во всех операциях аккаунта будут выбраны только авторские награды \(в них ключевое слово`author_reward`\) и содержащие ссылку на пост`v-gostyakh-u-ligi-novichkov-avtor-lucisia-rasskazhet-o-tom-kak-dostich-postavlennykh-celei`. - -Нажимаем поиск - получаем искомую операцию: -![](https://images.golos.io/DQmZH9ah2kbuTJ9ot5gzVgK2wd7LFFbVuu8mEMEiaxKAAwf/5.PNG "5.PNG") - -Стоит понимать, что вместо`author_reward`и опции "Любые типы операций" можно было выбрать опцию "Авторские награды", но как альтернативный подход в ключевых словах можно использовать и наименование операций! - -## Поиск платежей - -Вчера antonkostroma просил найти меня его перевод для[@uplift](https://golos.io/@uplift), в мемо которого был значок`$` -Как это можно сделать на примере формы: -![](https://images.golos.io/DQmZoW1sEre31R9tyRzcn29iqVuEDppUCT7VzcdWY1BshCY/6.PNG "6.PNG") -Поисковые запросы нужно вводить каждый с новой строки, мы ввели`uplift`и`$`, а также указали опцию`трансферы монет`. - -Результат: -![](https://images.golos.io/DQmeyqVAfaATUt757Bw5Swqhj5rp6aqGztYj5rondU2kLVZ/7.PNG "7.PNG") - -### Поиск общих счетов на бирже - -Популярный запрос, суть которого найти на[@bittrex](https://golos.io/@bittrex)все аккаунты с одинаковым memo, что будет значить, что средства с этих аккаунтов поступали на один и тот же счет на бирже. -Пример использования: - -Просканируем историю**insider**, выберем опцию`трансферы монет`и добавим ключевое слово`bittrex` -![](https://images.golos.io/DQmPPEHbtsXKdqmWXP8xzfsFLUScZM6NiTfkzUrv9xq9o4e/8.PNG "8.PNG") - -В результатах мы видим переводы на биржи с различиными memo -![](https://images.golos.io/DQmVz1y9G8vm3Wi9k53RLq7YBab5hfuxJfwtHsXSzcb2xTd/9.PNG "9.PNG") -Выберем одно из memo и снова откроем поиск по истории, но уже аккаунта**bittrex** - -Логин**bittrex**поисковый запрос - memo которым пользуется**insider**, тип операций - трансферы монет. -![](https://images.golos.io/DQmQuyEeg8k7DKkT1EfPBets9zYAcJCL4wKduwNWWjKu1bS/11.PNG "11.PNG") - -В результатах мы увидим, что на этот счет в**bittrex**отправляли средства еще несколько аккаунтов на голосе -![](https://images.golos.io/DQmb7giXqiCce9rVwEhj2RNFysfnbgPVYiQFKwA2hjiheUj/12.PNG "12.PNG") - ---- - -#### Приведенные выше примеры лишь часть возможных комбинаций поиска и способов применения. - -**Уверен форма будет полезна многим, поскольку отлично реализует функцию поиска операций выполнить которую вы так часто просили :\)** - ---- - -Позднее будут добавлены: - -* Стоп слова для исключения операций из поиска - **\(✔️ Добавлено\)** -* Поиск по регулярным выражениям -* Версия с серверной акселерацией поиска - - Если у вас есть пожелания к функционалу - пишите в комментариях или в моем - [**чате**](https://t.me/chain_cf) - ---- - -## FAQ - -> Вопрос: как найти все флаги выданные аккаунту? - -Ответ: -В поле поисковых запросов вводим - -``` -"author": "vik" -"weight": - - -``` - -Отмечаем искать все слова -Отмечаем поиск всех транзакций -![](https://images.golos.io/DQmVHq257BuKJ5F5U57TZ3acsPCLswqMdrgSwqUnTAPu9im/image.png) - -Жмем "поиск"... -![](https://images.golos.io/DQmcHpDRyEbEqnkvGa3FwiiJMChtfuaWxUpCCGGD376neGZ/image.png) - ---- - -Как видите - в операциях можно искать не только по словам, но и по фрагментам кода.`"weight": -`указан для поиска всех флагов. А чтобы найти например только 100%-ые, нужно вводить так:`"weight": -10000` - - - -##### Добавлен новый функционал в[приложение для просмотра и поиска по истории аккаунтов - golos.cf/history](https://golos.io/ru--golos/@vik/golos-cf-history-avtonomnyi-otkazoustoichivyi-servis-dlya-poiska-filtracii-i-analiza-lyubykh-sobytii-v-akkauntakh-golos-steem) - -### RAW содержимое блока - -Нажмите на номер блока чтобы увидеть все его содержимое: -![](https://images.golos.io/DQmf3G8eiGWTG8VJfAZLManwJamozrb79XgBrbzUvPTD5Yq/raw.gif "raw.gif") - -### Возможность получить ссылку на отдельную транзакцию - -У всех операций \(кроме виртуальных\) теперь есть прямая ссылка -Это может быть полезно если вы хотите предъявить факты из транзакции другому пользователю. -![](https://images.golos.io/DQmRgqTsYP9fzeXiPuXXxR472sfsgDQNuZLLykv7VdqMkUL/linktx.gif "linktx.gif") - -### Формирование ссылки на поисковую комбинацию запросов - -Если вам нужно часто проверять историю аккаунта на предмет каких-то определенных операций или нужно отправить ссылку с настроенным поисковым запросом другому пользователю - теперь это стало возможно! - -Просто сформируйте свой запрос в форме -Например я хочу посмотреть недавнее движение средств в моем аккаунте, но без переводов от[@robot](https://golos.io/@robot),[@dobrobot](https://golos.io/@dobrobot)и без мелких переводов`0.0**`монет -Вбиваю логин vik, тип операций - трансферы монет, стоп слова:`"robot"`,`"dobrobot"`и`0.0`- поиск -![](https://images.golos.io/DQmQJiGNWxyQzTkDf1DjGYFi4qk7yGdtww6PZezwoGyPU3f/2.gif "2.gif") - -После этого в адресной строке сформировалась ссылка вида -[https://golos.cf/history?login=vik&stop=](https://golos.cf/history?login=vik&stop=)"robot","dobrobot",0.0&keywords=&match=false&all=false&type=transfer -ее можно использовать как закладку и открывать при необходимости проверить данные, либо передать другому пользователю, если хотите поделиться историей. - -Перейдя по ссылке будет автоматически активирован поиск с учетом параметров в ней -![](https://imgp.golos.io/0x0/https://s17.postimg.org/jvqqr8l3h/image.gif) - -### Просмотр данных о постах \(Выплаты, апвоты\) - -Если в истории аккаунта встречается операция комментария или поста - вы сможете открыть RAW данные и посмотреть выплаты, параметры, список апвотов и другие связанные с постом данные -![](https://imgp.golos.io/0x0/https://s17.postimg.org/6dfpkfnlr/333.gif) - ---- - -Напомню, что данная форма полностью автономна, работает на стороне браузера и ее можно использовать просто скопировав html. - -В планах добавить "человеческие" описания к операциям для легкости восприятия данных широкой аудиторией. - - - -> По материалам [статьи1](https://golos.io/ru--golos/@vik/golos-cf-history-avtonomnyi-otkazoustoichivyi-servis-dlya-poiska-filtracii-i-analiza-lyubykh-sobytii-v-akkauntakh-golos-steem) и [статьи2](https://golos.io/ru--golos/@vik/obnovlenie-golos-cf-history-novye-vozmozhnosti-dlya-poiska-i-analiza-istorii-akkauntov) -> -> Автор: @vik - - - diff --git a/1-introduction/golosfest.md b/1-introduction/golosfest.md deleted file mode 100644 index 5708c46b..00000000 --- a/1-introduction/golosfest.md +++ /dev/null @@ -1,23 +0,0 @@ -### Что такое ГОЛОС Фест -\{\%youtube\%\}sAT2HwAjUsI\{\%endyoutube\%\} -Трансляция ГолосФест 2017 - -2-дневная встреча сообщества блогеров GOLOS.io в Москве 29-30 июля 2017 г., для погружения в мир блокчейна, блоггинга, криптовалют, а также - знакомства, общения и обмена опытом! - -Большая блокчейн-конференция, праздничный ужин, лаунж-зона с лёгкой музыкой и напитками на любой вкус, экскурсии по Москве, конкурсы, призы и море позитива! - -👍 **[Анонс фестиваля](https://golos.io/golos/@golosevents/yaidunagolosfest-or-ceny-spikery-volontyory-besplatnyi-bilet)** -👍 **[Программа](https://golos.io/ru--yaidunagolosfest/@golosevents/zavtra-29-iyulya-yaidunagolosfest-finalnyi-post-raspisanie-programma-utochneniya)** - -### О фестивале -![](https://imgp.golos.io/0x0/https://s5.postimg.org/t1oy0n0gn/Screenshot_2017-07-04_5.12.26.jpg) - -**Когда:** 29 - 30 июля 2017 г. (суббота - воскресенье). - -**Где:** Москва, Radisson Slavyanskaya. - -**Итоговый пост:** [яБылНаГОЛОСфест!](https://golos.io/ru--golos/@golosevents/yabylnagolosfest-itogovyi-post) - -**Отклики и отчеты:** -- [Посты с тегом #яИдуНаГОЛОСфест](https://golos.io/trending/ru--yaidunagolosfest) -- [Все статьи, фото и видео с ГОЛОС Феста](https://golos.io/ru--yaidunagolosfest/@sheriff/upd-or-vse-foto-i-video-s-golos-festa) diff --git a/1-introduction/instruktsiya-dlya-novichkov-pdf.md b/1-introduction/instruktsiya-dlya-novichkov-pdf.md deleted file mode 100644 index 292c57d0..00000000 --- a/1-introduction/instruktsiya-dlya-novichkov-pdf.md +++ /dev/null @@ -1,8 +0,0 @@ -### Инструкция для новичков по работе с Голосом![](/assets/ituber.png) - -#### [Скачать инструкцию файлом](https://goo.gl/3NoaGd) \(в формате PDF\) - -См. также [Курс обучающих видео](https://www.youtube.com/watch?v=GEXT9kju0M0&list=PL_5Hfjgx8sF7QEkpCIew0hb0QZS4Zw36m) на Youtube - -Автор: [@ituber](https://golos.io/@ituber) - diff --git a/1-introduction/instrumenti-golosdbcom.md b/1-introduction/instrumenti-golosdbcom.md deleted file mode 100644 index 9f29ca0b..00000000 --- a/1-introduction/instrumenti-golosdbcom.md +++ /dev/null @@ -1,126 +0,0 @@ -## Дополнительные инструменты - сайт GOLOSDB.COM - -Автор: [@liga.avtorov](https://golos.io/@liga.avtorov) - -Мы продолжаем серию инструкций о вспомогательных инструментах, которые помогут вам ориентироваться на Голосе и успешно вести свой блог. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/e9vofwg9f/image.jpg) - -Сегодня у нас на очереди портал golosdb.com, благодаря которому можно узнать много нового о блокчейне Голоса. Благодарим за это делегата [@jesta](https://golos.io/@jesta). - -Итак, начнём. Сперва проходим по адресу [https://golosdb.com/](https://golosdb.com/). Вам откроется окно с рейтингом постов за сегодняшний день. - -**Вкладка Posts / Посты** - -Нажимая кнопку Sorting / сортировать, вы увидите всплывающее окошко с дополнительными возможностями сортировок. По умолчанию посты отсортированы по выплатам, но можно выбрать сортировку по количеству апвоутов, также можно посмотреть рейтинг постов за следующий или предыдущий день. - -![](https://imgp.golos.io/0x0/http://storage7.static.itmages.ru/i/17/0826/h_1503720429_3491046_c3e87fa205.png) - -**Вкладка Accounts / Аккаунты** - -Переходим на следующую вкладку в самом верхнем меню страницы под названием «Accounts». Здесь мы увидим рейтинг блогов, зарегистрированных на Голосе. Изначально он будет отсортирован по показателю Vests. Также во вкладке «Richlist» можно отсортировать блоги пользователей Голоса по показателю GBG или GOLOS. - -**Вкладка Posts / Посты** - -Следующая вкладка - «Posts». При ее выборе список страниц распределится по количеству опубликованных постов. Сюда входят не только сами посты, но и оставленные комментарии. - -![](https://imgp.golos.io/0x0/http://storage7.static.itmages.ru/i/17/0826/h_1503720429_7701232_9443942464.png) - -**Вкладка Social / коммуникации или социальные связи \(здесь\)** - -Во вкладке «Social» доступно 2 вида сортировки: - -* Followers — по количеству подписчиков. -* Value of Followers — по сумме показателя Vests у всех подписавшихся. - -В свою очередь вкладка Reputation отсортирует список по репутации пользователя. - -![](https://imgp.golos.io/0x0/http://storage9.static.itmages.ru/i/17/0826/h_1503720430_5785951_248628b6a3.png) - -**Вкладка Witnesses / Делегаты** - -Переходим к вкладке “witnesses”. В этой вкладке отображается информация о делегатах и их деятельности в этом качестве. - -![](https://imgp.golos.io/0x0/http://storage8.static.itmages.ru/i/17/0826/h_1503721670_3275046_ca1c9d681c.png) - -1. Votes rank. Место в рейтинге делегатов. -2. Witness. Никнейм делегата и ссылка на его делегатский пост. -3. Votes. Суммарное количество Vests, отданных за делегата. -4. Weekly & Total Misses. Количество пропущенных блоков за последнюю неделю и их общее количество. -5. Price Feed. Цена GBG/GOLOS и время последнего обновления цены. -6. Reg Fee. APR. Block Size. Стоимость регистрации, процент годовой инфляции, размер блока. -7. Version. Версия делегатского ПО. -8. VESTS. Суммарное количество Vests самого аккаунта. -9. Miner Queue. Очередь майнеров. - -**Вкладка Labs / Лаборатория** - -Следующая вкладка “labs”. Эта страница состоит из двух частей. Верхний блок: - -![](https://imgp.golos.io/0x0/http://storage2.static.itmages.ru/i/17/0826/h_1503721739_3828909_a688db3c86.png) - -1. Author Reward Leaderboard. Выводит рейтинг авторов, которые получили самые большие выплаты за выбранный день. -2. Curation Reward Leaderboard. Рейтинг кураторов, получивших наибольшее вознаграждение, за текущий день. -3. Rshare allocation by voter. Один из самых интересных показателей, здесь расписано, как делится пул наград, и кто больше всех влияет на это. -4. Biggest power ups. Судя по названию, на этой странице должен быть рейтинг кураторов, которые распределили больше всего выплат за последние 30 дней, но эта страница не открывается. - -Нижний блок: - -![](https://imgp.golos.io/0x0/http://storage3.static.itmages.ru/i/17/0826/h_1503721783_4626654_5bedc6d609.png) - -Блок со специальными данными блокчейна в формате [JSON. ](https://ru.wikipedia.org/wiki/JSON)Этот раздел особенно будет полезен для разработчиков. - -Дальше у нас идёт кнопка «Create Account», кликнув на неё, вы перейдёте на портал Golos.io. - -**Как посмотреть информацию об аккаунте** - -Чтобы посмотреть информацию об аккаунте на портале golosdb.com, наберите название аккаунта в пустом поле в верхнем правом углу страницы, в выпавшем меню выберите нужный вам аккаунт, и после загрузки страницы вы увидите подробную информацию о выбранном аккаунте. - -На персональной странице можно увидеть ленту активности аккаунта, количество подписчиков, подписок и постов, а также тут есть область для различных графиков, которая поможет наглядно увидеть изменения, происходящие с выбранной страницей. - -![](https://imgp.golos.io/0x0/http://storage1.static.itmages.ru/i/17/0826/h_1503720430_5883870_d6dc598c94.png) - -**Вкладка Activity / Действия \(здесь\)** - -При нажатии на кнопку «Activity», появляется меню, в котором можно выбрать по какому параметру будет строиться график и изменяться страница. В этой вкладке есть следующие параметры: - -![](https://imgp.golos.io/0x0/http://storage9.static.itmages.ru/i/17/0826/h_1503720430_3055133_01929abe9a.png) - -1. Posts. Построит график, на котором будет отображено количество постов, опубликованных с выбранного аккаунта. -2. Votes. Этот параметр построит график, на котором будет видно количество полученных апвоутов и апвоутов, отданных за чужие посты. Снизу так же будет история входящих и исходящих апвоутов. -3. Replies. Выводит историю комментариев оставленных с выбранной страницы. -4. Reblogs. Показывает историю реблогов или, как ещё говорят, репостов. -5. Rewards. Эта вкладка покажет вам график выплат и их историю. Отдельные страницы для кураторских и авторских наград. -6. Transfers. Выводит график последних переводов между кошельками и их историю. - -**Вкладка Social / Коммуникации \(социальные связи\)** - -Внутри неё есть 3 параметра: - -![](https://imgp.golos.io/0x0/http://storage6.static.itmages.ru/i/17/0826/h_1503720428_1840039_c849692d5d.png) - -1. Followers. Отображает график прибавления подписчиков, ниже находится список подписавшихся в хронологическом порядке. -2. Following. Показывает список подписок в порядке добавления. -3. Reblogged. Выводит историю репостов, сделанных со стены пользователя. - -**Вкладка Witness / Делегаты** - -Этот пункт меню нужен для того, чтобы отследить активность пользователя в качестве делегата Голоса. - -![](https://imgp.golos.io/0x0/http://storage8.static.itmages.ru/i/17/0826/h_1503720429_4379197_fb7a034109.png) - -1. Voting. Показывает юзеров проголосовавших за пользователя, как за делегата, а также тех, за каких делегатов проголосовал данный пользователь. -2. Blocks. Отображает блоки, заверенные данным делегатом. -3. Missed. Выводит блоки, которые были пропущены. -4. Proxied. Информация о делегированной силе голоса \(пока не работает, ждём хардфорк 0.2\) - -**Вкладка Data / Данные** - -Это страница, на которой отображены данные из блокчейна, связанные с вашим профилем. - -На этом инструкция по порталу golosdb.com закончена, надеемся, что пользование этим порталом поможет вам быстрее освоиться на Голосе и получить больше информации не только о личных страницах авторов и их постах, но также и о делегатах и их деятельности. - -[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://www.gitbook.com/book/cyberfund/golos/edit#) - -По материалам[статьи](https://www.gitbook.com/book/cyberfund/golos/edit#)\(автор[@liga.avtorov](https://www.gitbook.com/book/cyberfund/golos/edit#)\) - diff --git a/1-introduction/instrumenti-golosdcom.md b/1-introduction/instrumenti-golosdcom.md deleted file mode 100644 index f52b8bdb..00000000 --- a/1-introduction/instrumenti-golosdcom.md +++ /dev/null @@ -1,140 +0,0 @@ -## Дополнительные инструменты - сайт GOLOSD.COM - -Автор: [@liga.avtorov](https://golos.io/@liga.avtorov) - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/72pe6afyr/image.jpg) - -Сегодня рассмотрим [http://golosd.com/](http://golosd.com/) как эффективный инструмент, который поможет нам следить не только за показателями собственного блога, но и за активностью пользователей на Голосе. Golosd.com создан и поддерживается делегатом Стима [@roadscape](https://steemit.com/@roadscape). Если быть более точным, этот инструмент позволяет просматривать многие данные Блокчейна GOLOS. - -Ресурс позволяет оценить не только деятельность делегатов. В отдельном разделе можно ознакомиться с активностью по рангу: киты, касатки, дельфины, рыбки и коньки. - -При переходе по ссылке мы попадаем на главную страницу. Что мы здесь видим? -Начинаем с самого верха. Здесь мы видим кнопки «witnesses» и «distribution». - -**Кнопка witnesses / делегаты** - -Кликая на эту кнопку, мы видим страницу со списком делегатов Голоса. -Делегаты - это пользователи, наделенные сообществом определенными полномочиями. Они запускают и поддерживают ноды \(это некоторое количество компьютеров, заключенных в общую цепь, которые занимаются подтверждением транзакций\) занимаются подписью блоков, проводят работу по пропаганде сети Голос на других интернет ресурсах и оффлайн и занимаются поддержанием объективного курса токена. - -Рассмотрим страницу более подробно - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/8m27kdi69/Screenshot_21.png) - -На ней показан ТОП-100 делегатов. В верхней части списка ТОП-19. Мы видим все учетные записи, которые создали блок в последнем туре \(они выделены жирным\). С правой стороны видим список майнеров в порядке очередности на “добычу”. - -Рядом с каждой учетной записью мы видим следующие данные \(в поступательном порядке\) - -1. ``` - Approval – это общее количество MVESTS голосовавших, за делегата. - ``` -2. ``` - % - от общей суммы СГ в сетевом голосовании. - ``` -3. ``` - Miss – количество блоков, которые были запланированы для делегата, но не были выпущены. - ``` -4. ``` - Last block – номер последнего блока, который был подтвержден делегатом. - ``` -5. ``` - Url – ссылка на пост, в котором делегат рассказывает о себе. - ``` -6. ``` - Reg fee – минимальное количество GOLOS, которое установил делегат для своей учетной записи при помощи команды update_witness. Данный показатель является сетевой переменной. - ``` -7. ``` - Feed – как всем известно, делегаты занимаются тем, что поддерживают курс токена Голос. Это именно та стоимость, которую они выставляют для токенов Голоса. При этом, курс, дополнительно контролируется самим рынком. - ``` -8. ``` - Bias – этот показатель отражает привязку к курсу золота. - ``` -9. ``` - APR – это годовой процент прибыли от GBG. - ``` -10. ``` - Block Size – это переменная, устанавливающая максимальный размер, в байтах, который может быть блоком. - ``` -11. ``` - Version – это показатель, который отображает последнюю версию GOLOS, которая сгенерировала последний успешный блок учетной записи. - ``` - -В верхнем углу расположена статистика участия. То есть, процент делегатов, которые выпустили свои запланированные блоки. - -**Кнопка distribution / распределение** - -Кнопка ведет на страницу статистических данных по самой платформе. Но о них поговорим чуть позже. Здесь же отображаются все размещенные с голоса посты \(левая колонка\). Информация о состоянии и статистические данные Голоса \(правая колонка\). - -Рассмотрим кнопку «distribution» более подробно - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/ri3aqguo1/Screenshot_20.png) - -Здесь мы видим данные о всех активных пользователях за последнее время. Причем, в зависимости от их СГ и рейтинга. Показатели определены по каждой категории: коньки, рыбки, дельфины, касатки и киты. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/we6xi5utd/Screenshot_10.png) - -В правом верхнем углу расположена кнопка create account, которая перекидывает пользователя на его блог на платформе Голос. - -**Кнопка All Posts\|Recent / Все посты \| Текущие** - -Теперь нажмем на ник \(имя записи\) - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/wn93ltwzl/Screenshot_11.png) - -Мы увидим практически все данные указанной записи. То есть, все действия под размещенным постом. - -Нажимаем на время. Эта команда переведет нас на страницу, где можно увидеть все комментарии к постам. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/o3l4abz9d/Screenshot_12.png) - -Если нажмем на ссылку в верхнем углу, тогда попадем под этот пост на самой платформе. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/mai7m0e2p/Screenshot_13.png) - -Теперь посмотрим на кнопку «advanced mode». Она открывает нам более широкую статистику по посту. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/p3bf61ef5/Screenshot_14.png) - -Если посмотреть влево, то увидим команды для использования через инструмент cli\_wallet \(работа с нодой из командной строки\). Эти команды позволяют голосовать и комментировать. Если нажать на ссылку «your-acct», которая есть в любой команде, тогда можно будет сменить имя по умолчанию на собственное. При этом данная настройка будет оставаться неизменной - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/csiglyse9/Screenshot_15.png) - -С правой стороны мы видим колонку с подробной статистикой и информацией по самому посту. Но тут нас интересует кнопка, которая располагается несколько ниже: «vote details». То есть, по сути: «голосование». - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/9a6gpkri9/Screenshot_16.png) - -Здесь мы можем узнать, кто голосовал, когда и с какой СГ, в том числе, сколько он принес нам профита своим голосом. Здесь же есть временная ссылка на транзакцию. На скрине показано, что один человек проголосовал с силой 100%. Других голосов пока не было. Про особенности курирования контента поговорим в следующий раз. - -Теперь перейдем на саму страницу автора поста. Тут нас интересует левая колонка. Правда, всего одна строчка: Voting power. Это сила вашего голосования. Тут можно просчитать, сколько имеется голосов. Считается из расчета 0.5% за один голос, от текущей силы голосования. То есть, у вас есть 40 лайков в сутки с СГ в 100%. Справа показан список всех действий по вашей учетной записи. Сюда включено: голосование, переводы, упоминания, комментарии, ответы и так далее. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/7jnfo39z5/Screenshot_17.png) - -В правом верхнем углу мы видим финансовую информацию: Mgests, GBG and GOLOS за пост, на момент проверки данных. - -С левой стороны можно увидеть все свои Метаданные, историю ключей \(эти данные важно просматривать для того, чтобы контролировать возможное нарушение учетной записи\), авторизаций. - -Отдельно остановимся на одном важном моменте, который в основном упускается из вида. Напротив каждого действия есть данные мини-хеширования каждой транзакции. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/k3dyy38sh/Screenshot_18.png) - -Если нажать на эту кнопку, можно ознакомиться с необработанной транзакцией. - -![](https://imgp.golos.io/0x0/https://s6.postimg.org/sj3jflbnl/Screenshot_19.png) - -Таким образом, этот инструмент позволяет контролировать все показатели не только по собственной учетной записи, но и наблюдать за качеством работы делегатов. - ---- - -Дополнительные ссылки: - -[https://golos.io/ru--golos/@pfunk/obshinnyi-gid-dlya-polzovatelya-po-saitu-golosd-com](https://golos.io/ru--golos/@pfunk/obshinnyi-gid-dlya-polzovatelya-po-saitu-golosd-com) - -Здесь вы можете ознакомиться с подробной технической информацией о ресурсе. Учитывайте, пожалуйста, что приведенная статья написана давно, осенью 2016 г. Если вы не программист, то советуем вам ознакомиться с ней тогда, когда вы освоите платформу и поймете основные принципы ее работы. - -[https://golos.io/ru--golos/@testz/paskhalnye-yaica-servisa-http-golosd-com](https://golos.io/ru--golos/@testz/paskhalnye-yaica-servisa-http-golosd-com) - -Еще одна статья о нюансах работы с инструментарием golosd.com. Написана также осенью 2016 г. - -[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) - -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/dopolnitelnye-instrumenty-dlya-effektivnoi-raboty-na-platforme-golos-golosd-com) \(автор[@liga.avtorov](https://golos.io/@liga.avtorov)\) - diff --git a/1-introduction/instrumenti-golossteemstatscom.md b/1-introduction/instrumenti-golossteemstatscom.md deleted file mode 100644 index 2b80d669..00000000 --- a/1-introduction/instrumenti-golossteemstatscom.md +++ /dev/null @@ -1,65 +0,0 @@ -# Инструменты для голоса - golos.steemstats.com - -Автор: [@**liga.avtorov**](https://golos.io/@liga.avtorov) - -На этот раз мы разберём портал **golos.steemstats.com**, который изначально использовался для Steemit. Делегат [@jesta](https://golos.io/@jesta) адаптировал его для Голоса и любезно предоставил пользователям. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/qd4yhmxub/olos.steemstats.com.png) - -Для начала переходим по адресу [http://golos.steemstats.com](http://golos.steemstats.com/). Когда страница загрузится, мы сразу попадём на пункт меню**«Activity / Действия»**, в этом пункте меню есть несколько вкладок. - -**Activity / Действия** - -![](https://imgp.golos.io/0x0/http://storage8.static.itmages.ru/i/17/0905/h_1504588770_6759041_d72709edf1.png) - -**1. Recent Activity / Недавняя активность. **В этой вкладке показаны те посты, которые вы апнули, и посты аккаунтов, на которые вы подписаны. -**2. Posts / Публикации. **Здесь вы увидите посты, размещённые в вашем блоге, а также репосты, которые вы сделали себе в блог. -**3. Comments / Комментарии. **В этой вкладке отображаются последние 20 комментариев и собранное ими количество голосов. -**4. Incoming Votes. / Полученные апвоуты **Здесь видна информация о последних апвоутах на выбранном аккаунте, аккаунт того, кто проголосовал и ссылка на пост, получивший апвоут. В случае, если вы делегат, то здесь также отображаются голоса пользователей за вас. -**5. Replies /Ответы. **В этой вкладке видны все ответы на посты и комментарии выбранного аккаунта. - -Справа от основного поля есть меню, где отображаются выбранные аккаунты, и строка поиска для добавления аккаунтов. Можно выбрать несколько аккаунтов и просматривать всю информацию о них в одном месте. - -**Accounts / Информация об аккаунте** - -Переходим в следующий пункт меню под названием **«Accounts / Информация об аккаунте». **Здесь мы видим 4 вкладки: - -![](https://imgp.golos.io/0x0/http://storage4.static.itmages.ru/i/17/0905/h_1504588662_4669689_46d8fda2c4.png) - -**1. Account Overview / Обзорные данные по аккаунту \(здесь\)**. В этой вкладке показаны количество токенов GOLOS и GBG, также видна Сила Голоса, количество отданных голосов за последние сутки и количество подписчиков. -**2. Steem Power / Сила Голоса \(здесь\)**. Здесь отображается количество Силы Голоса и то, с какой скоростью будет происходить её понижение. -**3. Following / Вы подписаны. **В данной вкладке вы увидите список аккаунтов, на которые вы подписаны. Чёрная галочка — подписка, синяя — взаимная подписка. -**4. Followed by / Ваши подписчики. **В этой вкладке отображаются ваши подписчики. Всё так же: чёрная галочка — подписка, синяя — взаимная подписка. - -**Transactions / Транзакции** - -Переходим на следующий пункт меню под названием **«Transactions / Транзакции». **Здесь отображаются все движения в кошельках выбранных аккаунтов. - -![](https://imgp.golos.io/0x0/http://storage5.static.itmages.ru/i/17/0905/h_1504588663_7457740_02b5f26549.png) - -Галочкой можно выбрать, какие типы транзакций будут отображаться: - -Author Rewards / Авторские выплаты. -Curation Rewards / Кураторские награды. -Transfers /Переводы. -Savings Deposit /Перевод в сейф. -Savings Withdrawal /Вывод из сейфа. - -**Witnesses / Делегаты** - -Следующий пункт меню **«Witnesses / Делегаты». **В нём отображается топ делегатов и другая информация и них. - -![](https://imgp.golos.io/0x0/http://storage5.static.itmages.ru/i/17/0905/h_1504588663_9693357_5b60ec8662.png) - -**Settings / Настройки** - -И, наконец, последний пункт меню **«Settings / Настройки». **Здесь мы попадём на страницу настроек. - -![](https://imgp.golos.io/0x0/http://storage6.static.itmages.ru/i/17/0905/h_1504588663_6858540_66bf2f7dd8.png) - -На этой странице всего 2 вкладки: -**1. General / Основные. **В этой вкладке можно настроить частоту обновления данных из базы блокчейна и установить оповещения об изменениях на выбранных аккаунтах. -**2. Debug / Информация \(здесь\). **На этой странице вы увидите количество загруженной информации по выбранным аккаунтам. - -На этом мы заканчиваем обзор портала [http://golos.steemstats.com](http://golos.steemstats.com/). Надеемся, он поможет вам взглянуть на площадку Голос с другого ракурса и узнать что-то новое. - diff --git a/1-introduction/instrumenti-roket-chat.md b/1-introduction/instrumenti-roket-chat.md deleted file mode 100644 index 3b7842d2..00000000 --- a/1-introduction/instrumenti-roket-chat.md +++ /dev/null @@ -1,197 +0,0 @@ -# Дополнительные инструменты - рокет чат - -Автор: [@**liga.avtorov**](https://golos.io/@liga.avtorov) - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/vio15cytv/image.jpg)Подробно рассмотрим **Рокет чат **- отличный инструмент для обмена личными сообщениями, коллективного общения по интересам и для продвижения своих публикаций. - -Даже если вы уже знакомы с Рокет чатом, то всё равно стоит изучить эту инструкцию. В ней есть сведения, которые помогут вам эффективнее работать с Rocket.Chat. - - - -![](https://imgp.golos.io/300x300/https://api.ogptoolbox.org/images/fa/df9767d0119feb76551820a7a77ab7.png?dim=1000) - - - -Кнопка Рокет чата \(красная ракета\) расположена в верхнем меню перед кнопкой “Добавить пост” - -## Регистрация - -Зарегистрироваться в Рокет чате можно сразу при клике на его значок или по этому адресу: [https://chat.golos.io](https://chat.golos.io/) - -Вам откроется стандартное окно с формой для входа или регистрации. Жмите на "**Зарегистрироваться**" и заполняйте поля своими данными. -Лучше всего в поле **Имя **ввести **ваш ник на Голосе**, чтобы другим пользователям было проще вас отыскать для личного общения. -А в поле для пароля категорически **не стоит использовать пароль **от аккаунта на Голосе! - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/brlp59cgj/image.png) - -К вам на электронную почту придет уведомление с просьбой подтвердить почтовый адрес. Сделайте все необходимые действия, после этого зайдите в Рокет чат. - -## Настройки - -Выберите ваш язык, чтобы легче было настраивать аккаунт и перейдите к настройкам. - -При клике на название \(ваш ник\) откроется меню настроек: - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/yqnglaes3/image.png) - -Здесь вы сразу можете выбрать режим, который видят другие пользователи. - -И детально настроить аккаунт, нажав “Мой аккаунт” / ”My Account”: - -Во вкладке **Настройки **просто отметьте точкой те пункты, где хотите изменить настройки по умолчанию. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/ntm4wis0j/image.png) - -Во вкладке **Профиль **можно изменить имя пользователя и пароль при необходимости. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/5s2zypxzn/image.png) - -Во вкладке **Аватар **можно вставить ссылкой аватар, такой же, как у вас на аккаунте в Голосе или загрузить картинку прямо с компьютера. - -При удачной загрузке в правом верхнем углу появится соответствующее сообщение. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/yvr7uym37/image.png) - -## Групповые чаты - -После того, как вы настроили профиль, возвращайтесь на главную панель. В списке чатов вы сразу видите уже выбранным **основной чат Голоса**. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/52f5p8r4j/image.png) - -Также в списке чатов, нажав кнопку _Другие чаты…_ или _More channels…_вы увидите весь перечень тем \(каналов\) чатов. Выбирайте интересные вам и добавляйте их в вашу панель, нажимая в открывающемся окошке справа внизу серую кнопку “вступить”:![](https://imgp.golos.io/0x0/https://s19.postimg.org/z0px7in2r/image.png) - -Напротив выбранных вами каналов будет появляться значок глаза. -Можно скрыть канал, кликнув на закрытый глазик “Скрыть номер”. И покинуть чат, кликнув на квадрат со стрелкой “Покинуть комнату”. Эти кнопки появляются при наведении на название чата. - -Все каналы перечислять здесь не имеет смысла - вы увидите их в списке. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/xx5svk2fn/image.png) - - - -Как вы видите, здесь есть общие чаты по темам — образование, искусство и другие. Есть чат для делегатов. Есть чаты для продвижения своих постов. Обратите внимание, что те каналы, в которых есть непрочитанные вами сообщения, выделены более жирным шрифтом. - -**Как продвигать свой пост с помощью Рокет чата** -После публикации своего поста вы выбираете нужный вам чат \(по теме, на которую написан ваш текст или общий по продвижению\), и публикуете ссылку в нем. Некоторые пользователи Голоса предпочитают искать материалы по нужной теме именно там, а в общей ленте могут их пропустить. - -**Как создать собственный канал в Рокет чате** -Если у вас есть необходимость в создании канала для общения группы пользователей по интересам, то для этого необходимо оставить сообщение в общем чате или чате "помощь" для создания нового канала. Поскольку доступ к этой функции есть только у администраторов Рокет чата. - -## Личные сообщения - -**Как связаться с пользователем** - -В Рокет чате можно оставить личное сообщение любому пользователю, если он зарегистрирован здесь. Сделать это можно двумя способами. - -**Вариант 1.**Вы нажимаете кнопочку _Личное сообщение / Direct message_, и в появившемся окошке вписываете ник пользователя \(без собаки\), с которым хотите связаться. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/ifiaruvyr/image.png) - - - -**Вариант 2.**Если вы наберете [https://chat.golos.io/direct/@ник](https://chat.golos.io/direct/@%D0%BD%D0%B8%D0%BA) пользователя, то также выйдете в приват. - -**Как написать сообщение:** - -При вводе своего сообщения можно сделать разметку, пользуясь шпаргалкой ниже, вставить смайлы, ссылки и прикрепить файлы. -Эти функции работают просто и интуитивно понятно. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/giqmkebmb/image.png) - - - -**Настройка уже опубликованного сообщения:** - -Вверху справа от опубликованного сообщения появляется значок настроек при наведении. - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/dd60u6t03/image.png) - - - -* первая стрелочка поможет ответить на сообщение, цитируя автора выше. -* кликните на карандаш, если хотите отредактировать своё сообщение. -* третья кнопка "корзина", чтобы удалить сообщение. -* значок цепи - сделает ссылку на это сообщение и скопирует в буфер. -* следующая кнопка "два листа" копирует сообщение в буфер. -* значок "кавычки" цитирует сообщение не ссылаясь на автора. -* значок ✰ помещает сообщение в избранное. -* кликнув на последнюю кнопку, можно выразить свои эмоции смайлом. - -## Правое боковое меню - -1.Кнопка с изображением буквы i \(информационная\). Нажимая на нее, вы увидите все описание канала, которое добавили авторы при его создании. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/aye59rcr7/image.png) - -2.Кнопка с изображением лупы - поиск по чату. Вы можете искать нужную тему по словам, словосочетаниям, никам. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/5bmdq0zmb/image.png) - -3.Кнопка “список пользователей” выбранного чата. -Тут можно сортировать пользователей, отображая лишь активных \(онлайн\) или всех подряд. - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/5pnppmjpv/image.png) - - - -3.1.В личных сообщениях эта кнопка заменена на информацию о пользователе. Где при установке специального расширения можно включать демонстрацию экрана и делать голосовые и видеозвонки. - -4.Кнопка с изображением колокольчика - “уведомления”. Здесь вы можете настроить параметры уведомлений, которые будете получать от пользователей. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/djobb0rir/image.png) - - - -5.Кнопка со скрепкой - интуитивно понятна всем. Это “хранилище файлов”, которые когда-либо отправляли через чат с помощью скрепки, расположенной справа от текстового поля. То есть, если вам нужно повторить отправку файла, то не нужно снова загружать файл - достаточно зайти в “хранилище” и найти его там. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/ulh5d46dv/image.png) - - - -6.Кнопка упоминания @. Она, судя по всему, не работает. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/5thj5vp77/image.png) - - - -7.Кнопка ★ “Избранные сообщения”. -Если вы хотите сохранить в быстром доступе нужный вам канал чата или сообщение, ссылку, файл - пометьте их звёздочкой. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/ed0x3mxjn/image.png) - - - -7.Закрепленное сообщение. Эта функция доступна только администраторам Рокет чата. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/ucjkn6tlf/image.png) - - - -8.Кнопка с изображением ключа доступна только в личных сообщениях. Помогает записать диалог, если пользователи одновременно в сети и если установили специальное расширение. - - - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/tbjby2clv/image.png) - - - - - - diff --git a/1-introduction/interfeis-golosio.md b/1-introduction/interfeis-golosio.md deleted file mode 100644 index 94dfc7b9..00000000 --- a/1-introduction/interfeis-golosio.md +++ /dev/null @@ -1,62 +0,0 @@ -

Интерфейс платформы Golos.io

- -Автор: @liga.avtorov - -

-

Сегодня у нас очень важная тема. Мы подробно рассмотрим дополнительное и основное верхнее меню.

-

Дополнительное верхнее меню (верхний трей):

-

-

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

-

1.Логотип Голоса. Кликая на него, вы попадаете на вкладку “Лента”. На этой вкладке, напомню вам, отображаются посты тех людей, на которых вы подписаны.

-

2.Адрес страницы - название блога или вкладки, которая сейчас открыта.

-

3.Рекламный-новостной блок - в данный момент здесь размещена информация о двухдневной встречи сообщества блогеров GOLOS.io, которая состоится в Москве 29-30 июля.

-

4.Информационная кнопка - буква i в круге - вы попадаете на ознакомительную страницу по работе с платформой - “О проекте”
-Советуем посмотреть и почитать внимательно предложенные материалы. Если вам что-то в данный момент непонятно - записывайте вопросы обязательно. В процессе работы вы будете находить на них ответы.

-

5.Картинка “класс+облачко коммента” переведет вас на страницу обратной связи, где вы можете оставить свои отзывы и предложения о работе платформы, а также сообщить об обнаружении бага.

-

6.Рисунок лупы - классическая кнопка “поиска”. Пользуйтесь ей, когда вам нужно найти похожие по тематике посты, недостающую информацию, посмотреть популярные теги, авторов, конкурсы, эстафеты.

-

7.Язык интерфейса РУС / ENG / УКР / SRP / ROM - меняется в выпадающем меню.

-

8.Кнопка в виде ракеты - рокет-чат Голоса, в котором есть возможность общаться лично. В нем открыто много различных каналов - для продвижения и общения. Адрес страницы - https://chat.golos.io/home

-

9.Текстовая кнопка “Добавить пост”. Недвусмысленно предлагает вам опубликовать ваш новый материал. Когда вы кликаете по ней, попадаете в окно с шаблоном, в котором все еще существует ваш последний пост. Очистите окно, заполните контентом и публикуйте новый пост.

-

10.Кнопка с вашим аватаром. Нажимая на нее, вы увидите всплывающее окно с уже знакомыми вам вкладками - лента, блог, комментарии, ответы, кошелек, сменить пароль, настройки, выйти.

-

Рассмотрим их по порядку:

-
-

Лента - аналогична кнопке “Лента” из верхнего меню. Здесь вы увидите материал тех авторов, на которых вы подписаны;

-

Блог - нажимая сюда, вы попадете в свой личный блог;

-

Комментарии - вы сразу попадете на страницу, на которой увидите все свои комментарии. Этой кнопкой можно пользоваться, если у вас не установлен @steemnotifybot. Если бот-оповеститель установлен, то им пользоваться гораздо удобнее. Если комментарий просмотрен вами - то текст будет отображаться серым, если это “не открытый” комментарий - он будет черным;

-

Ответы - здесь находятся ответы пользователей на ваши комментарии;

-

Кошелек - это одна из самых интересных позиций в вашем блоге. О кошельке, его свойствах мы готовим отдельную статью. Говоря коротко - в нем хранится запись всех ваших транзакций, здесь же вы можете увидеть количество своих токенов Голоса, ГБГ и так называемой “Силы голоса” - величины, которая рассчитывается математическим алгоритмом;

-

Сменить пароль - этой возможностью можно воспользоваться в крайнем случае. К примеру, если вы скомпрометировали свой пароль (случайно опубликовали его где-нибудь, в чате, в заметке в кошельке и пр.) Если это произошло, срочно меняйте пароль и снова храните его как зеницу ока ) ВОССТАНОВИТЬ ПАРОЛЬ НЕЛЬЗЯ!

-

Настройки - этот пункт мы подробно разобрали в Инструкции №1

-

Выйти - эта кнопка позволяет вам выйти из аккаунта.

-

11.Три горизонтальные черты - значок выпадающего меню
-Вероятно, нет смысла подробно рассматривать все кнопки меню - часть повторяется. Их назначение понятно из названия, разберем их коротко.

-
-

Обратная связь - соответствует кнопке 5.
-Вики составляющая кнопки 4
-Добро пожаловать - составляющая кнопки 4
-Выплаты по тэгам https://golos.io/tags/hot - на этой странице вы можете посмотреть, по каким тегам происходят выплаты, соответственно, сможете использовать эту информацию при подборе тегов для своего поста
-Бумага о Голос составляющая кнопки 4
-Внутренний рынок - эта кнопка ведет на внутреннюю биржу. Подробности будут в отдельной инструкции.
-Возврат украденного аккаунта https://golos.io/recover_account_step_1 - эта кнопка не работает!
-Изменить пароль аккаунта - повтор кнопки из пункта 10
-Голос чат- рокет-чат Голоса, дублирует кнопку 8
-Центр приложений Голос - весьма интересная страница, на которой вы найдете приложения, выполненные участниками сообщества Голос. Очень много полезных, советуем заглянуть сюда.
-Голосовать за делегатов - на этой странице вы сможете проголосовать за делегатов (само понятие делегат мы разберем более подробно позже)
-Договор купли-продажи - версия от 5 октября 2016 года. Настоящий документ является публичной офертой Graciola Systems Inc. заключившей Договор купли-продажи токенов «Силы Голоса». Пожалуйста, ознакомьтесь с рисками, связанными с использованием токенов «Силы Голоса», указанных в Уведомлении о рисках golos.io/legal/risk_disclosure.pdf, прежде чем принять условия Договора купли-продажи токенов «Силы Голоса».
-Условия пользования - пользовательское соглашение
-Политика Конфиденциальности - настоящая политика конфиденциальности устанавливает правила использования офертой Graciola Systems Inc. информации, получаемой от пользователей социальной сети Golos.io. Текст Политики доступен Пользователям в сети Интернет по сетевому адресу golos.io/legal/privacy_policy.pdf. Использование сайта golos.io означает выражение Пользователем безоговорочного согласия с Политикой и указанными условиями обработки информации.

-

С обзором верхнего трея и выпадающего меню мы закончили.

-

Основное верхнее меню:

-

-

Здесь вы видите пять вкладок:

-

Лента – здесь вы увидите материал тех авторов, на которых вы подписаны. По мере поступления постов тексты сдвигаются вниз.

-

Новое – это новые посты в “реальном времени”, отсортированы по дате публикации, от нового к старому. По мере поступления постов тексты сдвигаются вниз.

-

Актуальное – посты, получающие в данный момент наибольшее количество голосов, самые свежие.

-

Популярное – посты, набравшие максимальные суммы вознаграждения за последние дни в течение месяца.

-

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

-
-

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

- -
[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/pervyi-shag-na-golose-interfeis-platformy-golos-io) (автор [@liga.avtorov](https://golos.io/@liga.avtorov)) -
diff --git a/1-introduction/interfeis-lichnogo-bloga.md b/1-introduction/interfeis-lichnogo-bloga.md deleted file mode 100644 index 72d12f31..00000000 --- a/1-introduction/interfeis-lichnogo-bloga.md +++ /dev/null @@ -1,61 +0,0 @@ -

Интерфейс личного блога

- -Автор: @liga.avtorov - -

-

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

-

ПЕРВАЯ ВКЛАДКА "БЛОГ"

-

Открывая эту вкладку, вы попадаете в ваш личный блог, в котором отображаются все статьи, опубликованные вами на платформе Голос и сделанные вами репосты других Авторов.
-Что вы видите под каждой своей статьей? Здесь масса информативных кнопок, которыми можно эффективно пользоваться.

-


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

-

Сумма вознаграждения за ваш пост. Это сумма (ее валюта выбирается в настройках) вашей потенциальной выплаты. Она может изменяться в зависимости от курса токенов GOLOS и GBG, а также в случае, если какой-либо куратор “отзовет” свой голос или поставит флаг.

-

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

-

Стрелочка вниз справа от суммы вознаграждения - нажав на нее, вы увидите потенциальную выплату за ваш пост, в том числе процент “авторских” и “кураторских” выплат. Это тоже сложная позиция, которую надо рассматривать отдельно.

-

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

-

Сумма голосов за пост - показывает, сколько человек или ботов проголосовали за ваш контент.

-

“Облачко” комментариев и их количество - если вы нажмете на эту кнопку, то попадете прямо в конец статьи, в ту ее часть, где начинаются комментарии.

-

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

-

Никнейм автора - кнопка перехода в блог автора. Поскольку вы в своем блоге, то никуда, конечно, не перейдете, но если вы нажмете такую кнопку под блогом другого автора - то попадете к нему в блог.

-

Кружок с цифрами внутри - это ваша “репутация”. Эти же цифры отображаются в шапке блога в скобках рядом с ником. Репутация сообщает другим авторам не только об уровне вашей активности и доверия к вам, но и помогает защитить вас от пользователей с низкой репутацией. Каждый новый уровень репутации зарабатывается в 10 раз сложнее, чем предыдущий. Сообщения пользователей с низкой репутацией выглядят закрытыми и бледными (светло-серыми).

-
Подробнее о репутации читайте у @arcange здесь
-

Первый тег, указанный в вашем посте. Его нельзя изменить. Вот почему нужно продумывать, какой тэг поставить первым. Если вы на него кликните - попадете на вкладку “Популярное” со статьями, в которых этот тег также был использован первым.

-

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

-
Внимание: Рассматривая блоги других авторов, вы заметите отличия от вашего. В частности, справа вверху появятся две кнопки - “подписаться/отписаться” и “заблокировать”. Принцип их действия понятен.
-


-Кнопка “заблокировать” - вы имеете возможность заблокировать того пользователя, который по какой-либо причине доставляет вам дискомфорт. Сделать это вы сможете, перейдя в личный блог пользователя (несколько вариантов перехода)

- -

- -

-

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

-

Кнопка "Отписаться" от пользователя -

-

Аналогичным образом вы можете отписаться от пользователя, если его контент стал вам неинтересен. Посты автора не будут больше появляться в вашей “Ленте”.

-

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

-


-ВТОРАЯ ВКЛАДКА "КОММЕНТАРИИ"

-

Открывая эту вкладку, вы видите свои комментарии в цепочках, связанных с ними, оставленные либо под чужими постами, либо в ответ на комментарии пользователей под вашими постами.
-Трей кнопок под комментарием работает аналогично описанному выше, однако есть нюансы. Когда вы переходите по кнопке с изображением облачка и количеством комментариев, вы попадаете напрямую в комментарии статьи - и ваш коммент будет подсвечиваться. Это очень удобный инструмент “быстрого ориентирования”.

-


-ТРЕТЬЯ ВКЛАДКА "ОТВЕТЫ"

-

Открывая вкладку “Ответы”, вы видите ответы людей и цепочки комментариев, с ними связанных. Работает аналогично вкладке “Комментарии”, кроме дополнительной квадратной стрелочки, обозначающей “поделиться”. Если вы нажмете эту кнопку, то поделитесь постом в своей ленте. Не отдельным комментарием, обратите внимание, а всем постом.

-


-ЧЕТВЕРТАЯ ВКЛАДКА "НАГРАДЫ"

-

Кликая на вкладку “Награды”, вы видите всплывающее окошко, в котором указан вариант выбора - авторские награды и кураторские награды. Собственно, это и есть ваши выплаты. Их историю можно посмотреть и проанализировать ниже.

-


-Кураторские награды - выплаты по вашему голосованию за чужие посты.Авторские награды - выплаты за ваши посты. История расположена ниже. Вознаграждение выплачивается в токенах Голос и GBG, но об этом позже.

-

ПЯТАЯ ВКЛАДКА "КОШЕЛЕК"

-

Многими пользователями любимая вкладка, греющая душу! Здесь вы увидите свой дебит-кредит. Здесь отражены все операции, в которых существует “денежный элемент”. Работу кошелька мы подробно рассмотрим в отдельном посте.

-

ШЕСТАЯ ВКЛАДКА "НАСТРОЙКИ" - ее мы разобрали в предыдущей инструкции.
-

-

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

-
[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/pervyi-shag-na-golose-interfeis-lichnogo-bloga) (автор [@liga.avtorov](https://golos.io/@liga.avtorov)) -
diff --git a/1-introduction/koshelek-klyuchi-viplati.md b/1-introduction/koshelek-klyuchi-viplati.md deleted file mode 100644 index 21ededd4..00000000 --- a/1-introduction/koshelek-klyuchi-viplati.md +++ /dev/null @@ -1,119 +0,0 @@ -

Кошелёк, ключи, выплаты

- -Автор: @liga.avtorov, редактирование и обновление статьи - @aleos. - -

Этот пост будет полностью посвящён очень важной теме. Сегодня мы с вами разберём, как работает Кошелёк вашего аккаунта.
-Эта кнопка находится в верхнем меню вашего блога справа, пятая по счёту.

-

Кроме того, мы попутно рассмотрим вопросы выплат и ключей.

-

-

Самым интересным, казалось бы, должен стать вопрос о выплатах, но он не самый основной. Основой можно считать кошелёк! Ведь сам аккаунт в ГОЛОСе - это и есть кошелёк, только с возможностью постинга на клиенте/сайте golos.io/mapala.net и других (по мере их появления).

-

golos.io - это всего лишь веб-оболочка с удобным интерфейсом, работающая от блокчейна golos.

-

Итак, приступим. Вы попали на сайт golos.io, зарегистрировались и получили свой аккаунт @ник. У вас теперь есть отправная точка в самом блокчейне golos.

-

Платформа себя позиционирует как социальная медийная сеть на блокчейне, в которой каждый пользователь может получить плату за свои публикации. Львиная доля всех пользователей была привлечена на платформу именно этим. Это совершенно нормально желание - получать плату за свою работу. Распорядиться этой оплатой можно по-разному. Есть несколько вариантов:

- -

В блокчейне любая операция - это транзакция, а она требует наличия монет.

-

Что же отображается в вашем кошельке и как им управлять?

-

-

Балансы

-
    -
  1. Балансы - это первая вкладка кошелька. Здесь вы видите общую оценку стоимости своего аккаунта и историю транзакций.
  2. -
-


- -

В кошельке существует 3 типа валют: Голос, Сила Голоса и Золотой.
-О каждом подробнее:

- - -

Голоса можно:
-Передать - Голоса передаются на другой аккаунт или на биржу. Для этого надо правильно заполнить появившуюся форму (при переводе на биржу в заметку вставляется мемо) и авторизироваться для проведения транзакции.

-

Перевести в сейф - это делается для безопасности и сохранности ваших средств, если есть подозрения, что пароль мог быть скомпрометирован. Токены в сейф попадают мгновенно, а обратный вывод проводится 3 дня. Можно перевести не только в свой сейф, но и другому пользователю, кликнув на РАСШИРЕННЫЕ ОПЦИИ.

-

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

-

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

-


- -

Итак, при регистрации вы получили 5 Голосов в Силу Голоса. Этого вполне достаточно для публикаций своего контента и для голосования за чужой контент.

-

Сила голоса показывает Ваш “вес” на платформе. Не путайте с репутацией. Сила Голоса, говоря иносказательно, это акции платформы, и каждый пользователь имеет свою долю, свой “вес”. Причём при долгосрочном хранении Голосов в Силе Голоса их количество увеличивается. Вдобавок к тому, что ценность и курс токена Голос со временем будет только расти.

-

Из Силы Голоса токены Голос тоже можно вывести. Для этого надо Уменьшить Силу Голоса. Однако это долгий процесс, происходящий в течение 20 недель. И Голоса будут выводиться раз в неделю равными долями от той суммы, что была при нажатии на кнопку понижение. Но делать это крайне не рекомендуем.

-


- -

Золотые можно:
-Передать - Золотые передаются пользователю на другой аккаунт или на биржу. Аналогично токенам Голос.

-

Перевести в сейф - перевод работает так же, как и с Голосами.

-

Купить или продать - кликнув на эту кнопку, вы сразу попадёте на внутреннюю биржу, где можете провести желаемые транзакции с Золотыми.

-

Перевести в Голос - перевод Золотых в Голос занимает три с половиной дня. Конвертация осуществляется по среднему курсу в течение этих дней.

-


-

Вот статья от @primus, в которой размещено подробное видео по обсуждаемому вопросу https://golos.io/ru--golos/@primus/prosto-o-golose-chto-takoe-golos-tokeny-sila-golosa-i-zolotye-golosa-kak-s-nimi-rabotat-i-kak-zarabatyvat-v-golose

-

Разрешения

-

2. Разрешения - вторая вкладка в меню кошелька - хранилище ваших ключей.

-

-

Нажимая эту кнопку, вы видите набор шифров - публичных, которые можно прочитать с экрана, они расположены слева и начинаются с буквы “G”, и приватных ключей - они расположены справа и спрятаны за прямоугольниками, начинаются с цифры 5.

-

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

-

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

- -

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

- -

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

- -


-

Важно! Никогда не вводите приватные ключи в поле, предназначенное для заметки. Любые ключи, только при запросе проверенной системы, которой можно доверять.

-

Пароль

-

3. Нажимая на вкладку Пароль, вы видите следующую страницу:

-

-

Эта вкладка вам понадобится только в том случае, если аккаунт был создан не вами и для сохранности своих средств и репутации нужно сменить пароль. Или в том случае, если ваш пароль узнали посторонние лица.

-

Важно! Не забудьте надёжно сохранить свой пароль, как много раз сказано на картинке!

-


-

4. Вкладка Приглашения пока неактивна.

-


-

Выплаты

-

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

-

Эта сумма зависит от Силы Голоса и количества проголосовавших пользователей, т. е. - это сумма набранных вами апвоутов. Вычисляется из gests. Gests - это более точная единица измерения. Под постами отображается округлённая цифра с пересчетом курса на фиатные деньги.

-

Каждый ваш апвоут другого пользователя измеряется блокчейном именно в gests. Любое действие, любая транзакция измеряется в gests. Для простоты восприятия их автоматически переводятся в токены Голоса и Золотые.

-


-

Если мы возьмём пост, выплаты за который ещё не произошли, то нажав на треугольник возле суммы выплаты, можно увидеть, насколько сумма оценивается в Золотых в данный момент.
-Причём эта сумма до выплат может не только расти, но и уменьшаться.

-

Уменьшается она по трём причинам:

- -

-

Потенциальная выплата будет поделена на авторские 75% и кураторские выплаты 25% (делятся на всех кураторов в зависимости от Силы Голоса и времени голосования).
-При этом автор из этих 75% получает 50/50 (если выбрано это соотношение при публикации поста) в Золотые и Силу Голоса или 100% в Силу Голоса.

-

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

-

Начиная с 4 апреля 2018 года (когда был принят хардфорк 0.17) - выплаты за посты/комменты происходят ровно через 7 дней после публикации. Раньше было два окна выплат: первое "окно" было плавающее - в течение 24 - 48 часов после публикации поста/коммента. И второе - через 30 дней.


- - -

Все полученные вами выплаты отображаются в интерфейсе блога во вкладке Награды.

-

- - -

Там отображается история всех кураторских и авторских наград. А также:

- -
[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/pervyi-shag-na-golose-koshelyok-klyuchi-vyplaty) (автор [@liga.avtorov](https://golos.io/@liga.avtorov)) -
diff --git a/1-introduction/kriptotermini.md b/1-introduction/kriptotermini.md deleted file mode 100644 index 187335bb..00000000 --- a/1-introduction/kriptotermini.md +++ /dev/null @@ -1,109 +0,0 @@ -

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

- -Автор: @uanix - -

-

Активно развивающаяся в последние годы криптоиндустрия породила ряд новых терминов и понятий. Для того, чтобы рядовому пользователю ориентироваться в них, @uanix подготовил краткий словарь.

-

Он состоит из нескольких разделов:

-
    -
  1. Словарь основных терминов.
  2. -
  3. Англоязычные аббревиатуры и сокращения.
  4. -
  5. Список основных криптовалют.
  6. -
  7. Термины, используемые в прохождении транзакций.
  8. -
-

-

Словарь терминов:

-

Автономные агенты (Autonomous Agents) — программные сущности (приложения и модули), которые могут принимать решения без необходимости участия и одобрения человека. Умный контракт (smart contract) — это своего рода автономный агент, базирующийся на блокчейне.

-

Адрес (Address) — биткойн-адрес используется для отправки и получения транзакций. Он состоит из буквенно-цифровых символов, но также может быть представлен в виде сканируемого QR-кода. Биткойн-адрес также является публичным ключом, используемых держателями биткойнов для цифровой подписи транзакций.

-

Адрес тщеславия (Vanity Address) — биткойн-адрес, содержащий определенный элемент, например, имя.

-

Альткойн (Altcoin) — общее название для всех криптовалют, предлагаемых в качестве альтернативы биткойну. В их числе — лайткойн (Litecoin), неймкойн (Namecoin), новакойн (Novacoin) и пр.

-

Атака 51% (51% attack) — состояние, когда более половины вычислительной мощности сети криптовалюты контролируется одним майнером или группой майнеров. Теоретически, этот объём вычислительной мощности дает власть над сетью. Это означает, что каждая клиентская программа в сети верит в подтвержденный блок транзакций атакующей стороны. Это дает им контроль над сетью, включая следующие полномочия:

- -

Биткоин (Bitcoin) — одноранговая цифровая денежная система, построенная на криптографических алгоритмах. Первая массовая криптовалюта.

-

Блок (block) — список проверенных транзакций, который добавляется к блокчейну в результате майнинга. Является базовым элементом структуры блокчейна. Состоит из двух частей — заголовка (Head) и полезной нагрузки (Payload) — собственно записи транзакций.

-

Блокчейн (block chain — цепочка блоков) — распределенный реестр, состоящий из цепочки блоков финансовых транзакций, в которой каждый последующий блок криптографически связан с предыдущим. Включает в себя сети peer-to-peer (P2P), распределенное хранение данных и криптографию.

-

Волатильность (Volatility) — изменение движений цен с течением времени на торгуемые финансовые активы (включая криптовалюты).

-

Двойная трата или двойное расходование (Double spending) — попытка потратить деньги дважды. Это происходит, когда кто-то выполняет финансовую транзакцию, а затем совершает вторую сделку с теми же самыми деньгами.

-

Кошелек (wallet) — программное приложение, позволяющее производить транзакцию с заданного адреса и просматривать его баланс.

-

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

-

Криптовалюта (Cryptocurrency) — распределенная и децентрализованная система безопасного обмена и передачи цифровых денежных знаков, основанной на средствах криптографии.

-

Криптография (от др.-греч. κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним), целостности данных (невозможности незаметного изменения информации) и аутентификации (проверки подлинности авторства или иных свойств объекта).

-

Майнинг (mining) — необходимый и важный процесс в сети Биткоина и других криптовалют, в результате которого в блокчейн добавляется новый блок транзакций и происходит эмиссия монет.

-

Мастерноды (Masternodes) — специальные узлы (серверы) сети, обеспечивающие работу механизма перемешивания транзакций для увеличения степени анонимности.

-

Нода (node) — узел (сервер) сети Bitcoin — компьютер, на котором хранится полная актуальная версия блокчейна.

-

Обфускация (запутывание, сбивание с толку) — технология, позволяющая увеличить степень анонимности криптовалютных транзакций.

-

Премайнинг (Pre-mining) — добыча криптомонет создателем криптовалюты до того, как официально объявлено о её появлении. Позволяет осуществить эмиссию криптовалюты до её выхода на рынок. Зачастую используется в мошеннических криптовалютах, но не все премайнинговые монеты являются мошеническими.

-

Приватный (закрытый) ключ (private key) — кодовая строка, при помощи которой осуществляется доступ к кошельку или биткоин-адресу. Необходима для осуществления транзакций.

-

Публичный (открытый) ключ (public key) — парная соответствующему приватному ключу кодовая строка, к которой имеется открытый доступ. Используется наряду секретным приватным ключом для отправки транзакций. Публичный ключ соответствует биткоин-адресу.

-

Пул (Pool) или Майнинг-пул (mining pool) — собрание майнеров, которые коллективно добывают блок, а затем делят полученное вознаграждение. Майнинг-пулы — способ увеличить доходность при росте сложности майнинга.

-

Сатоши Накамото (Satoshi Nakamoto) — анонимный создатель (или группа создателей) одноранговой электронной денежной системы Биткоин (Bitcoin). - -Транзакция (transaction) — перевод денег между двумя адресами.

-

Умные контракты (Smart Contract) — механизм, включающий цифровые активы и две или более стороны, которые вкладывают активы в контракт, после чего они автоматически распределяются между этими сторонами, согласно формуле, основанной на показателях, значения которых неизвестны на момент подписания контракта.

-

Форк (Fork — вилка) — создание альтернативной успешной версии цепочки блоков. Это может происходить умышленно, когда группа майнеров получает слишком много контроля над сетью (см. атаку 51%), случайно (одновременная запись новых блоков разными майнерами или из-за ошибки в системе), или целенаправленно, когда команда разработчиков решает представить новые функции в новой версии клиентской программы.
-Форк успешен, если он становится самой длинной версией цепочки блоков с точки зрения сложности. В этом случае альтернативная ветка блокчейна отвергается и становится невалидной.
-Часто форком называют новую криптовалюту, которая построена на протоколе существующей. Например, лайткоин (LTC) является форком биткоина (BTC).

-

Холодное хранение или оффлайн хранение — в широком смысле — хранение криптовалюты без доступа к интернету. На самом деле — хранение приватных ключей или seed на утройствах, не имеющих доступа к интернету. Например, распечатанными на бумаге. Осуществляется в целях безопасности.

-

Цветные монеты (Colored coins) — надстройка над протоколом биткоина, которая позволяет пользователям биткойнов наделять их дополнительными свойствами, задаваемыми самим пользователем, позволяя маркировать биткойны как «акции» или даже «реальные активы». Это позволяет использовать биткоины как токены («жетоны») для любой другой собственности.

-

Цифровая подпись (ЭЦП — электронная цифровая подпись) — код, ко­то­рый ге­не­ри­ру­ет алгоритм шиф­ро­ва­ния с от­кры­тым клю­чом, при­креп­ля­е­мый к транзакции для про­вер­ки неизменности её со­дер­жи­мо­го и иден­ти­фи­ка­ции от­пра­ви­те­ля. Используется для подтверждения транзакции владельцем биткоин-кошелька отправителя.

-


-

Англоязычные термины и сокращения:

-

ASIC (Application-Specific Integrated Circuit) — интегральная схема специального назначения или асик, — процессор для работы с хэшами, используемый в майнинге криптовалют.

-

BIP (Bitcoin Improvement Proposal) — Проект развития Биткойна, — документ, в котором описывается технический дизайн, новые возможности, новые процессы или программная среда, меняющие протокол Биткоина.

-

Bitcoin Investment Trust (Биткойновый инвестиционный фонд) — Частный фонд, который совершает инвестиции исключительно в биткойны и использует хранение биткойнов от имени и по поручению своих вкладчиков. Предоставляет финансовые услуги для людей, желающих инвестировать в биткоины, без необходимости самому покупать и безопасно хранить криптовалюту.

-

Bitcoins per Block или Block Reward (биткоинов за блок) — вознаграждение, выплачиваемое майнеру за успешное решение криптографической задачи и присоединение блока к блокчейну.

-

BPI (Bitcoin Price Index) — индекс цены биткойна, — разработанный сайтом Coindesk, представляет среднюю цену биткойна на крупнейших мировых биржах.

-

Coinprizm — приложение (кошелек) и одноименная сеть для цифрового подтверждение прав собственности на произвольные объекты и работы с цветными монетами (Colored coins).

-

CryptoNote — протокол, обеспечивающий обфускацию (запутывание) транзакций с целью увеличения степени анонимности.

-

DA или Dapp (Decentralized Application) — децентрализованное приложение, — про­грам­ма с от­кры­тым ис­ход­ным кодом, ко­то­рая ра­бо­та­ет ав­то­ном­но и хра­нит свои дан­ные в це­поч­ке бло­ков.

-

DAO (Decentralized Autonomous Organization) — децентрализованная автономная организация (ДАО).

-

Difficulty (сложность) — параметр, характеризующий сложность майнинга, т.е. сложность решения криптографической задачи.

-

DGW (Dark Gravity Wave) — алгоритм подстройки сложности майнинга.

-

DLT (Distributed Ledger Technology) — Технология распределенного реестра учета (блокчейн Биткоина) — Комбинация компонентов, включающих в себя сети peer-to-peer (P2P), распределенное хранение данных и криптографию.

-

ECDSA (Elliptic Curve Digital Signature Algorithm) — алгоритм, используемый для подтверждения транзакций в протоколе Bitcoin.

-

ETF (Exchange Traded Fund) — биржевый инвестиционный фонд. Фонд, паи (акции) которого обращаются на бирже. Подробнее

-

EVM (Ethereum Virtual Machine) — виртуальная машина Эфириума.

-

Hashrate (хэшрейт или вычислительная мощность) — вычислительная производительность компьютерного оборудования для майнинга криптовалют. Измеряется хэшах (hash) в секунду.ICO (Initial Coin Offerings) — по аналогии с IPO (Initial Public Offering — первая публичная продажа акций компании) — это способ привлечения первичного капитала с использованием криптовалюты.

-

InstantSend — сервис для мгновенных транзакций.

-

Nonce («нонс») — числовой параметр, искомый в ходе майнинга (алгоритме PoW) и записываемый в заголовок блока. Собственно, целью майнинга, как соревновательного процесса за право добавить блок транзакций в блокчейн, и есть подбор такого Nonce, чтобы искомый хэш блока (Block Hash) был меньше некоторого заданного числа Target, что равнозначно получению хэша блока, начинающегося с определенного числа нулевых битов.

-

P2P (Peer to Peer) — одноранговая компьютерная сеть, в которой все участники (узлы) равноправны и могут взаимодействовать друг с другом, являсь клиентом и сервером одновременно.

-

PoI (Proof-of-Importance) — альтернативный PoW алгоритм достижения консенсуса при записи блока в блокчейн, при котором определение пользователя, который будет записывать следующий блок, происходит с учетом вклада каждого участника процесса в развитие и продвижение криптовалюты.

-

PoS (Proof-of-Stake) — подтверждение доли владения, — альтернативный PoW алгоритм достижения консенсуса при записи блока в блокчейн, при котором вероятность записи нового блока в блокчейн и получение соответствующего вознаграждения пропорциональна доле владения пользователя в системе:

-

Отдельно взятый держатель валюты, имеющий долю P от общего числа монет в обороте, создает новый блок с вероятностью P.

-

PoW (Proof-of-Work) — доказательство выполненной работы, — алгоритм, при помощи которого сеть майнинга биткоина приходит к консенусу, определяя какой из майнинговых узлов запишет сформированный блок в блокчейн. Суть PoW сводится к двум основным пунктам:

-
    -
  1. Необходимости выполнения определенной достаточно сложной и длительной вычислительной задачи.
  2. -
  3. Возможности быстро и легко проверить результат.
  4. -
-

Scrypt — крип­то­гра­фи­че­ский ал­го­рит­м хэширования, раз­ра­бо­тан­ный для ва­лю­ты лайт­ко­ин (LTC). По срав­не­нию с функцией SHA-256 вы­чис­ле­ния про­ис­хо­дят быст­рее и тре­бу­ют мень­шей вы­чис­ли­тель­ной мощ­но­сти.

-

Seed (семя, источник) — кодовая фраза (последовательность слов) при помощи которой пользователь получает доступ к приватному ключу (private key) от кошелька или биткоин-адреса.

-

SegWit (Segregated Witness — «отделенный свидетель») — софтфорк, предлагаемый командой разработчиков Bitcoin Core, целью которого является оптимизация размера блока. Подробнее

-

SHA-256 — криптографическая функция хэширования, лежащая в основе протокола доказательства выполнения работы Bitcoin, а также некоторых других криптовалют.

-

Solidity — язык про­грам­ми­ро­ва­ния на плат­фор­ме Ethereum для раз­ра­бот­ки умных кон­трак­тов.

-

SPV (Simplified Payment Verification) — упрощенная верификация платежей — особенность протокола Bitcoin, которая позволяет нодам заверять транзакцию без загрузки полной цепочки блоков. Вместо этого для верификации транзакции достаточно загрузки заголовков (Head) блоков, в которых содержатся хэши.Особенность протокола Bitcoin, которая позволяет нодам заверять платёж без загрузки полной цепочки блоков. Вместо этого для верификации достаточно загрузки заголовков блоков.

-

Target или Difficulty Target— целевая сложность — максимальное число, которое не должен превышать искомый при майнинге хэш блока (Block Hash). Фактически определяет количество нулевых битов в начале искомого хэша.Testnet — те­сто­вая це­поч­ка бло­ков тран­зак­ций. Ис­поль­зу­ет­ся раз­ра­бот­чи­ка­ми, чтобы не тра­тить день­ги в ос­нов­ной це­поч­ке.

-

Wire transfer (Безналичный или банковский перевод) — перевод денег от одного человека другому в электронном виде. Обычно используется для отправки и получения традиционной валюты в обменниках криптовалют.

-

X11 — система алгоритмов хеширования использующая цепочку из 11 хеш-функций. Используется для доказательства выполнения работы при майнинге криптовалюты DASH.

-

Zero Knowledge Proof — Доказательство с нулевым разглашением, — интерактивный криптографический протокол, позволяющий одной из взаимодействующих сторон («The verifier» — Проверяющей) убедиться в достоверности какого-либо утверждения (обычно математического), не имея при этом никакой другой информации от второй стороны («The prover» — Доказывающей).

-


-

Основные криптовалюты (сокращения):

- -


-
По материалам [статьи](https://golos.io/psk/@uanix/kriptovalyuty-terminy-i-sokrasheniya) -Автор [@uanix](https://golos.io/@uanix) -
diff --git a/1-introduction/otveti-komandi-golosio.md b/1-introduction/otveti-komandi-golosio.md deleted file mode 100644 index ce5e2258..00000000 --- a/1-introduction/otveti-komandi-golosio.md +++ /dev/null @@ -1,193 +0,0 @@ -## Ответы команды golos.io на вопросы новичков - -Авторы:[ @vp-liganovi4kov](https://golos.io/@vp-liganovi4kov "@vp-liganovi4kov") - -**1. Какие существуют дополнительные инструменты для большей эффективности в Голосе?** - -**Ответ:** -Для эффективного продвижения автора на golos.io необходимо активное участие в жизни платформы, которое может быть выражено в различных действиях: - -* постоянное комментирование материалов других авторов; - -* “перелинковка”, “гиперссылки” - упоминание постов пользователей в своем блоге; - -* увеличение базы подписчиков; - -* увеличение количества просмотров постов непосредственно на платформе; - -* шеринг материалов из Голоса на других платформы, с целью привлечения лояльных читателей; - -* участие в конкурсах, викторинах, эстафетах и т. д. \(Тема недели \(чат в телеграм [https://t.me/temanedeli](https://t.me/temanedeli), список конкурсов можно найти в “Афише” Лиги Авторов” [@liga.avtorov](https://golos.io/@liga.avtorov)\); - -* публикации текстов параллельно со страниц своего блога и со страниц тематических сообществ, с сохранением авторства\). - -**2. Как найти ботов-помощников для работы с голосом? Где их искать?** - -**Ответ:** -Инструменты для работы на Голое частично выложены на странице [https://golos.io/about](https://golos.io/about) и на сайте [http://chainstore.io](http://chainstore.io/), а также в аккаунте [@vik](https://golos.io/@vik) - -**3. Влияет ли время публикации поста на его популярность?** - -**Ответ:** -На этот вопрос нет точного ответа. Голос - платформа международная, и можно наблюдать активность разных регионов планеты в разное время. К примеру, ночью публикуются пользователи, живущие в Штатах, Канаде. Ранним утром - в Сибири и на Дальнем Востоке. Пользователями Golos.io проводятся исследования. Считается, что лучшее время для публикации, это утро \(9-12 часов по Мск\) и вечер \(20-22 часов по Мск\). Именно тогда большинство читателей готовы просмотреть свежие посты, с утра, или накопившиеся за день - вечером. Также популярны посты в середине дня, многие читают ленту в обед. - -**4. Я много голосовала и теперь у меня низкая Сила Голосования - 61.67% Voting Power. Это плохо? Как я могу это поправить? Я комментирую, но больше новичков, такую небольшую поддержку оказываю.** - -**Ответ:** -То, что ваш Voting Power уменьшается при частом голосовании, это нормально. Сила голоса каждого пользователя ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Скорость снижения зависит также от частоты голосования: чем чаще вы это делаете, тем быстрее она снижается. Если, к примеру, голосовать один раз в 20 минут \(примерно\), Сила голосования будет снижаться незначительно. Чтобы восстановить ее прежнее значение, вам нужно какое-то время не голосовать, полностью она восстанавливается за 24 - 48 часов. Если “посажена” сильно, то может восстанавливаться в течение недели. - -**5. Где можно посмотреть блоги китов и касаток, какие-нибудь ТОПы? -Стоит ли увеличить свою силу Голоса разовым “вливанием” суммы?** - -**Ответ:** -Дифференцированный поиск пользователей \(в нашем случае, по силе голоса\) на платформе пока не организован. Однако регулярно публикуются топы успешных авторов, популярных тем и т. д., [например](https://golos.io/ru--golos/@aleco/top-golosa-kto-imeet-samyi-bolshoi-ves-na-platforme-15-03-2018). - -Раздел “Популярное” также представляет собой топ наиболее высоко оцененных постов. - -Силу голоса можно увеличить различными способами, в том числе, приобретением токенов на бирже, как и когда вы считаете нужным. - -**6. Можно ли здесь продвинуться быстрее, имея готовые тексты \(стихи, проза\), опыт рерайтинга, корректирования.** - -**Ответ:** -Имея какое-то количество готовых материалов и опыт написания текстов у вас, конечно, есть некоторые преимущества на Golos.io. Поскольку регулярно обновляемый блог с качественным и уникальным контентом имеет больше шансов на успех. Также можно публиковать свои тексты, размещенные ранее на других площадках, верифицируясь в Культуре Голоса \(чат телеграм[https://t.me/kultura\_golosa](https://t.me/kultura_golosa)\), и оставляя ссылку на первоисточник под постом. - -**7. У меня пропала возможность писать комментарии и делать лайки, это что-то не то с сайтом?** - -**Ответ:** -Это могло произойти из-за того, что вы много голосовали \(ставили лайки\), в результате чего [уменьшилась ваша сила голоса.](https://wiki.golos.io/2-rewards/curation_rewards.html) Необходимо либо пополнить силу голоса, докупив или получив от других пользователей токены Golos и переведя их в силу голоса, либо какое-то время не производить на сайте никаких действий. Сила голосования полностью восстанавливается в течение 24 часов, иногда дольше. - -**8. Как увидеть посты того, кто мне интересен? Жму на профиль, там почты есть - жму туда, ничего не происходит... Почему как-то странно считаются посты в блоге, я всего 4 создал, а мне пишет, что у меня их 10?** - -**Ответ:** -При переходе в профиль интересного вам автора открывается страница блога с его публикациями в хронологическом порядке. Переходить в почту не нужно. - -Любой контент, написанный вами и опубликованный - пост или комментарий - в Голосе называется постом. Поэтому цифра в профиле блога зачастую гораздо больше, чем количество публикаций. - -**9. Почему возле некоторых постов появляется логотип голоса и надпись 100% к силе голоса? Как еще выставляются проценты?** - -**Ответ:** -Это означает, что при публикации этих постов вы установили распределение вознаграждения 100% в силу голоса. Есть еще вариант 50/50, он означает, что 50% вознаграждения пойдут в силу голоса, а 50% - в GBG. - -**10. Почему иногда пропадают комментарии и даже опубликованные статьи? Что делать в такой ситуации? Бывало так, что даже показываются на мгновение в ленте, перегружаешь - посты исчезают. Пару раз сталкивалась с тем, что комменты были - и нет их.** - -**Ответ:** -Скорее всего, ваша публикация произошла в неудачный момент “рассинхронизации” нод. Это технические сбои, с которыми мы боремся. Ваш материал просто “не дошел” до блокчейна. В этом случае нужно запостить еще раз. - -[Источник](https://golos.io/golosio/@vp-liganovi4kov/novaya-rubrika-obratnaya-svyaz-otvety-komandy-golos-io-na-voprosy-novichkov) - -### Часть 2. - -**1. Раньше было оптимальным получать награду в выплатах 50/50, как мне объяснили, 50% монетами, 50% в Силу Голоса. Какую позицию выбрать сейчас \(50/50 или 100% в Силу Голоса\), чтобы это было максимально эффективно?** - -**Ответ:** -Вознаграждение за посты теперь начисляется в токенах Голоса, часть из которых впоследствии идет в Силу Голоса. Для начала логично “прокачать” свой аккаунт, чтобы потом он работал на вас и способствовал получению большего вознаграждения. То есть, награду за какое-то количество первых постов лучше переводить в Силу Голоса, а далее уже распределять, как 50/50, для поддержания репутации и получения выплат. - -**2. Чтобы не потерять голоса от флагов, стоит ли их выводить в сейф?** - -**Ответ:** -Сейф предназначен для защиты накоплений в случае воровства аккаунта. -Флаги никак не могут повлиять на Голоса, которые уже хранятся в кошельке. Из-за флагов можно потерять голоса, которые пост получает в течение семидневного окна выплат. -Как только окно выплат закрывается, поставить флаг посту и уменьшить количество полученных голосов нельзя. - -**3. В голосе можно писать личные сообщения? Как и где это делать?** - -**Ответ:** -Система личных сообщений для сайта Golos.io в разработке. Скоро функционал можно будет увидеть на песочнице. -Однако, с реализацией данного сервиса есть некоторые сложности. -Оптимизация работы личных сообщений полностью зависит от реализации API по постраничной выдаче данных блокчейна. Задача не попала в список на текущий ХФ и была выставлена на баунти. - -Любой из разработчиков сообщества Голоса может реализовать данную задачу, награду можно обсудить с командой [@golosio](https://golos.io/@golosio), пишите на почту dev@golos.io или телеграмм [@NickShtefan](https://golos.io/@nickshtefan) - -**4. Я, конечно, давненько не заходил сюда, но с каких это пор голос ругается на изображения свыше 2 мб как "слишком большие" и не дает их загружать?!** - -**Ответ:** -Ограничение по загрузке в пост тяжелых изображений существует с начала функционирования платформы. Чтобы добавить в пост картинку размером свыше 2 Мб, нужно сначала загрузить ее на хостинг, а затем полученную ссылку вставить в пост. - -**5. Как работать с поиском. В нем можно искать по тегам, или по фразе, или по нику?** - -**Ответ:** -На данный момент в блог-платформу Golos.io интегрирован поисковик google. С его помощью можно искать по фразам, отдельным словам и по юзернейму. - -Поисковика непосредственно по сайту Golos.io пока нет, в будущем команда планирует разработку данного функционала. - -**6. Я новичок. Я случайно нажал кнопку "отблагодарить", и все токены, которые у меня были, перевелись автору статьи. Как работает эта кнопка?** - -**Ответ:** -С помощью кнопки “отблагодарить” можно перевести автору поста какое-то количество голосов. Она активна и когда окно выплат поста открыто, то есть он собирает апвоуты, и когда оно уже закрыто. Если вам понравился материал, но проголосовать за него уже нет возможности, то можно отблагодарить автора через эту кнопку. Для этого необходимо ввести в соответствующую строку количество голосов, которые вы готовы передать, написать заметку и подтвердить перевод активным ключом. - -Если у вас перевелись все токены, это означает, что вы не ввели вручную сумму перевода, а нажали на баланс, который в полном объеме отобразился в окне перевода, и подтвердили действие активным ключом. -Напоминаем, для публикации и комментирования используйте постинг ключ. - -**7. Как конвертировать голос в gbg?** - -**Ответ:** -Печать GBG в системе сейчас прекратилась ввиду того, что количество данной валюты набрало критическую массу. Спустя какое-то время GBG снова может начать печататься. Это произойдет, когда количество денежной массы в системе увеличится, и процент GBG относительно всего пула станет меньше. Делистинга в ближайшее время не предвидится, поэтому GBG можно покупать и продавать на биржах: Bittrex, Livecoin, Liqui, Kuna и внутреннем рынке. - -**8. Как лучше поступить с Голосами? Перевести их в Силу голоса? Или пусть так просто лежат в голосах пока?** - -**Ответ:** - -При переводе голосов в Силу Голоса вы усиливаете ее и вес своего апвоута, соответственно, тем самым в перспективе укрепляете свою позицию на платформе и извлекаете больше пользы. Также на голоса, переведенные в Силу Голоса, начисляется процент от эмиссии токенов. - -Однако, если возникнет необходимость перевести криптовалюту в фиатные деньги, с голосами сделать это будет проще, их можно продать на биржах. А вот Силу Голоса сначала нужно перевести в голоса, а этот переход занимает порядка 13 недель. - -Таким образом, переводить ли голоса в Силу Голоса и в каком количестве, зависит от целей конкретного пользователя. - -**9.Почему кошелек иногда отображается только за 2-3 дня, прокрутка не работает дальше, а иногда там можно посмотреть историю даже за неделю?** - -**Ответ:** -Это связано с вашей активностью. Если в последнее время переводов было сделано много, то лента кошелька сокращается до значения “за последние сутки” или “в течение недели”. Если переводов было не много, то она может отображать действия за несколько недель или за месяц. - -**10. Есть ли приложение для Android, работает ли оно корректно, можно ли его ставить, или лучше пользоваться на телефоне браузером?** - -**Ответ:** -Android приложение Golos.io существует, скачать его можно в Google play. - -В мобильных устройствах удобнее пользоваться приложением, нежели открывать сайт платформы через браузер. В приложении есть поиск по тегам, ночной режим, компактная лента, возможность подписаться на автора и многое другое. Оно постоянно обновляется, например, в числе последних апдейтов была добавлена “батарейка” - отображение мощности голоса в профиле пользователя, расширен выбор валют, добавлено отображение для пролистывания изображений в галерее, поиск по пользователям и произведен апдейт профиля пользователя. - -[Источник](https://golos.io/golosio/@vp-liganovi4kov/obratnaya-svyaz-otvety-komandy-golos-io-na-voprosy-novichkov) - -### Часть 3. -**1. Как связаться с пользователем, если у него в аккаунте нет ни одного поста? И в телеграм он не отвечает, видимо, незнакомым аккаунтам.** - -Ответ: Связаться с пользователем можно, отправив ему минимальный перевод, например, 0,001 gbg, через ваш кошелек, и в поле memo написать сообщение или интересующий вас вопрос. - -**2. Я не могу опубликовать пост. Выдает текст что-то типа "У вас не хватает Мощности Голоса", что делать в таком случае?** - -Ответ: Такая ситуация может возникнуть, если вы до этого слишком много голосовали, или опубликовали большое количество постов. Проверьте, стоит ли у вас галочка в окошке "проголосовать за свой пост", если да, попробуйте ее снять. Возможно, это поможет. Если нет, вам необходимо увеличить вашу Силу голоса, либо подождать, когда она повысится, либо увеличить ее посредством приобретения токенов Голос и перевода их в Силу Голоса. Подробнее можно почитать в Вики Голоса, или здесь - -**3. Не могу зарегистрироваться уже третий день. Не приходит ни код, ни смс.** - -Ответ: Если при регистрации не произошла верификация вашего номера, и поля формы, которые нужно заполнить, не стали активными, сделайте скрины процесса и напишите в чат технической поддержки https://t.me/golos_support. - -**4. Прочитал, что сайт golos.io снимает 10% за публикацию через себя. Но я совсем новичок, большинство моих текстов ничего не стоят. Каким образом будет осуществляться этот расчет с нулевых выплат по постам?** - -Ответ: Бенефициарная награда аккаунту @golosio поступает не в токенах Golos, а в Силе Голоса. 10% за публикацию, сделанную через сайт Golos.io, исчисляются из суммы, которую собрал пост. Если выплата за пост нулевая, то и отчисления нулевые. -Сейчас мы работаем над созданием механизма поощрения пользователей, которые публикуют свои материалы через Golos.io. - -**5. Обнаружил в кошельке во вкладке Разрешения уйму ключей. Какие из них мне нужно сохранять? Где почитать про эту страницу?** - -Ответ: Ключи - это ваш “паспорт” в системе блокчейн, пароль не только от аккаунта, где опубликованы посты, но и от кошелька, где могут быть токены. Поэтому относиться внимательно нужно ко всем ключам, и хранить их в нескольких местах, желательно не только в электронном виде, но и на бумаге. -Самый важный - это ключ владельца, он включает в себя функции всех остальных ключей, и необходим для обновления пароля, если есть подозрения, что пароль скомпрометирован. Но без крайней надобности его лучше не использовать. Для постинга и голосования применяйте постинг-ключ, для переводов - активный ключ. -Почитать подробнее о ключах можно в Вики Голоса. - -**6. Почему при моем голосовании выплата автору, которого я поддерживаю, не увеличивается?** - -Ответ: Вероятно, ваша Сила Голоса еще слишком мала, чтобы принести автору доход. Когда она повысится, вы увидите "стоимость" вашего апа, проголосовав за любого автора. - -**7. Вижу под постами интересные цифры - процент силы голосования разный у разных людей. Но у меня нет возможности проголосовать на 50% или 80%. Почему? Она появится когда-нибудь? Такая возможность?** - -Ответ: Ползунок, позволяющий изменять % апвоута, появится со временем, когда ваша Сила Голоса и репутация увеличатся. Сейчас, пока вы новичок, вы не можете регулировать % своего голоса, и в этом нет экономической выгоды, поскольку ваша сила голосования слишком мала. - -**8. Я могу регистрировать несколько аккаунтов? Или только один? Один аккаунт на один номер телефона?** - -Ответ: Да, вы можете иметь несколько аккаунтов. При регистрации через сайт Golos.io для каждого из них потребуется отдельный номер телефона, поскольку подтверждение регистрации происходит по смс. -Подробнее о способах регистрации - здесь. - -**9. Какие действия я могу совершать с минимальной Силой Голоса, той, которая полагается мне после регистрации? Я могу писать посты, комментировать, голосовать?** - -Ответ: Вы можете публиковать посты, комментировать и голосовать за другие материалы. Но не стоит сразу размещать много постов и часто голосовать. Помните, что на платформе есть лимиты: в сутки не более 4 постов и 40 апвоутов со 100% Силой Голоса. -Также обращайте внимание на расход вашей “мощности” голоса, она ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Скорость снижения зависит от частоты голосования: чем чаще, тем быстрее она снижается. Отображение этих действий можно увидеть на "батарейке" в шапке сайта. -Чтобы восстановить “мощность“ голоса, нужно какое-то время не голосовать. Полностью она восстанавливается за сутки-двое. Если “посажена” сильно, то может восстанавливаться в течение недели. - -Источник \ No newline at end of file diff --git a/1-introduction/posting.md b/1-introduction/posting.md deleted file mode 100644 index 3396ed58..00000000 --- a/1-introduction/posting.md +++ /dev/null @@ -1,252 +0,0 @@ -# Публикация в блоге - -Автор [@liga.avtorov](https://golos.io/@liga.avtorov) - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/jjq4b67df/image.jpg) - -Итак, вы нажали заветную кнопку **“Добавить пост”**. Перед вами открылась новая страница. На этой странице, кроме меню, которые [рассматривали в прошлой инструкции](https://wiki.golos.io/1-introduction/interfeis-golosio.html), появились поля для заполнения текстом. - -Рассмотрим их подробнее: - -1.Строка для вставки **заголовка** поста. - -2.Под строкой заголовка - кнопка **выбора языка** и кнопка выбора **режима публикации** поста \(в обычном визуальном редакторе, с использованием разметки markdown или языка html\). - -3.Поле для **ввода и форматирования текста**. - -4.В правом нижнем углу внутри поля - три диагональные полоски. Потяните за них вниз, если нужно **увеличить окно**. - -5.Строка для **вставки тегов**. Набирайте их без значка \#, маленькими буквами через запятую, следите за пробелами. Обратите особое внимание на первый тег - его невозможно будет изменить, текст будет находиться по нему в первую очередь. - -**Основные правила использования тегов на Голосе:** - -* [использование тегов](https://golos.io/ru--knigagolos/@katrin/kniga-pro-golos-ispolzovanie-tegov) от [@katrin](https://golos.io/@katrin) -* [теги и навигация](https://golos.io/ru--tegi/@lumia/10-shagov-k-uspeshnomu-blogu-shag-1-tegi-i-navigaciya) от [@lumia](https://golos.io/@lumia) - -6.**Кнопка “Пост”**. При незаполненных полях она светло голубого цвета. Когда все поля будут заполнены и это будет сделано правильно - нажимайте ее смело \) - -7.Справа от кнопки “Пост” есть поле, в котором вы можете выбрать способ **распределения вашего вознаграждения **за пост: 100% в Силу Голоса или 50% в СГ и 50% в GBG \(Золотые\) - -8.Под этим полем располагается маленькое квадратное поле, позволяющее вам автоматически **проголосовать сразу **после публикации - или не голосовать за пост. - -Теперь рассмотрим возможности режимов работы с текстом. - -# **ТРИ РЕЖИМА ПУБЛИКАЦИИ ТЕКСТА**: - -## **Режим разметки Markdown** - -Давайте разберемся, что такое Markdown. -**Markdown **\(маркдаун\) — облегчённый язык разметки, с помощью которого можно писать максимально удобочитаемые и лёгкие для правки тексты, а также преобразовывать их в языки HTML, Rich Text и др. - -**Плюсы Markdown:** - -* Подготавливая текст к публикации, вы точно знаете, как он будет выглядеть на странице. -* Уменьшение времени на последующую проверку и редактирование текста. -* Повышение читабельности текста. - -**Минусы Markdown** - -* Необходимо потратить время на его изучение. -* Нужно быть очень внимательным при наборе текста. Любая ошибка \(даже лишний пробел\) может проявиться в виде нечитаемого набора символов. - -Опыт показывает, что стоит освоить этот режим. Это увеличит возможности оформления и облегчит работу над текстом. -**Именно в режиме Markdown открывается окно при нажатии на кнопку "Добавить пост":** - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/im1bjc2c3/image.png) - -Пользователи Голоса написали множество постов об использовании этого языка разметки. От самых подробных, с указанием символов для самой сложной верстки, до простых, представляющих собой своего рода “шпаргалки” с упоминанием самых нужных команд. Пример "шпаргалок": - -![](https://imgp.golos.io/0x0/http://i.imgur.com/fCrk9Xs.jpg) - -[Самый полный курс по работе с Markdown](https://golos.io/ru--golos/@on0tole/osnovy-oformleniya-postov-na-golose-polnyi-kurs-po-rabote-s-markdown) - от [@on0tole](https://golos.io/@on0tole). - -И кроме того, над полем предварительного просмотра появляется ссылка на [”Руководство стилизации в Markdown”](https://guides.github.com/features/mastering-markdown)\ (на английском языке\) сразу, когда вы начинаете вводить текст в режиме Markdown. - -Комментарии пишутся только в режиме Markdown: - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/l4n0k0o2b/image.png) - -Из режима Markdown вы можете перейти в режим **Редактор**, кликнув над полем для ввода текста на слово Редактор. - -> **Важно!** Пока поле пустое, в режиме Редактора сохраняется возможность вернуться в режим Markdown. Но как только вы ввели текст, то редактор можно будет переключить лишь в режим Raw HTML. Стоит запомнить эту особенность! - -## **Режим визуального редактора** - -**Плюсы Редактора** - -* Интуитивно понятная работа над текстом -* Не нужно изучать специальные разметки -* Повышение читабельности текста - -**Минусы Редактора** - -* Неудобно пользоваться при публикации длинного текста - кнопки остаются вверху и недоступны -* Ограниченные возможности форматирования текста - -Верхние кнопки редактора позволяют вам сделать текст читабельным. Это классические кнопки, которые есть в любом редакторе. Однако и по ним возникают вопросы, поэтому мы распишем их назначение: - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/gchsmbis3/image.png) - -1. **B** - Bold - жирное начертание шрифта - -2. _I_- Italic - наклонное начертание шрифта - -3. ~~S~~ - перечеркнутое начертание шрифта - -4. { } - размещение текста на плашке, что позволяет визуально выделить его как отдельный фрагмент - -5. Три полоски с точками - маркированный список с точкой - -6. Три полоски с цифрами - нумерованный список - -7. **Пиктограмма кавычки ”** - оформляет абзац в виде цитаты - -8. **Пиктограмма цепочки** - позволяет вставить ссылку в появившемся окне - _Перед кликом на эту кнопку необходимо в тексте выделить слова, на которые будет закреплена ссылка_ - -9. **Пиктограмма разорванной цепочки** - позволяет снять ссылку с текста - _Для снятия ссылки, необходимо целиком выделить весь фрагмент текста под ссылкой_ -10. **Пиктограмма изображения** - позволяет вставить ссылку на изображение в открывшейся строке - -11. **Поле выбора различного стиля текста** - позволяет разметить заголовки и подзаголовки в тексте - -12. **Пиктограмма “стрелка назад”** - отменяет последнее действие - -13. **Пиктограмма “стрелка вперед”** - возвращает последнее отмененное действие -14. Переход в режим **Raw HTML**. Это нужно, например, чтобы вставить кнопки или отцентрировать картинки и заголовки. - -## **Режим языка Raw HTML** - -Проблема работы в режиме Raw HTML в том, что, переключаясь обратно в режим редактора или при редактировании поста после публикации, все сделанные в нем настройки исчезают. - -**Плюсы Raw HTML** - -* Подготавливая текст к публикации, вы точно знаете, как он будет выглядеть на странице -* Уменьшение времени на последующую проверку и редактирование текста. -* Повышение читабельности текста - -**Минусы Raw HTML** - -* Необходимо потратить время на его изучение -* Нужно быть очень внимательным при наборе текста. Любая ошибка \(даже лишний пробел\) может проявиться в виде нечитаемого набора символов -* Нельзя редактировать пост после публикации и переключаться в другой режим -* Может глючить - -![](https://imgp.golos.io/0x0/https://s19.postimg.org/lqgktv8ib/image.png) - -Язык HTML для большинства гораздо сложнее, чем освоение разметки Маркдаун. Кроме того, при оформлении поста работает ограниченное число тегов HTML. - -####**Самые популярные теги для форматирования текста** - -``- выделение текста **полужирным** -``то же самое - -``- получение курсивного текста -``- то же самое - -``- подчеркивание текста - -``- перечеркивание текста - -``- выделение подстрочного текста \(нижний индекс\) для записи формул. Код `H2O`, результат - **H2O**. - -``- верхний индекс \(аналогично предыдущему\). Код`(a+b)2`- результат **\(a+b\)2**. - -Теги можно вкладывать друг в друга. Код:`H2O`- это`формула воды.`, результат - **H2O** - это _**формула воды.**_ - -####**Абзацы** - -`

`- вставка одной пустой строки и размещение находящегося за ним видимого элемента html-страницы в следующей строке. Код`

Это первый абзац.

Это второй абзац.

`, результат: - -**Это первый абзац.** - -**Это второй абзац.** - -`

` - закрывающий тег. Его использование не обязательно, но желательно. - -####**Выравнивание текста** - -Возможно использование тегов для выравнивания текста: **center, left, right и justify**. Соответственно, они выравнивают текст по центру, по левому краю, по правому краю и одновременно по двум краям сразу. -Код`
Текст по центру
`, результат: - -
Текст по центру

- -Другие же способы выравнивания так же просто не сработают, как выравнивание по центру тегом`
`. И приходится прописывать команду подробно: -Код:`
Выравнивание текста по правому краю
`, -результат: - -**Выравнивание текста по правому краю** - -По умолчанию текст выравнивается по левому краю. - -####**Перенос строки и горизонтальная черта** - -`
`- переход на новую строку без вставки пустой строки. -Код:`1. Первая строка.
2. Вторая строка.`, результат - -**1. Первая строка. -2. Вторая строка.** -У`
`нет закрывающего тега. Для вставки нескольких пустых строк нужно записать тег`
`несколько раз подряд. - -`
`- делит части текста разделительной полосой. - ---- - -####**Заголовки** - -`

`- заголовок первого уровня -`

`- заголовок второго уровня -`

`- заголовок третьего уровня и так далее до цифры 6. -Самый крупный заголовок`

`, самый маленький`
`. Теги заголовков имеют атрибуты: **align** - выравнивание текста заголовка на странице. - -####**Списки** - -`
    `- упорядоченный \(нумерованный\) список -``- неупорядоченный \(маркированный\) список. -Каждый элемент списка выделяется тегом`
  1. `. - -Код -`
    1. Первый элемент.
    2. Второй элемент.
    3. Третий элемент.
    ` -результат - - -1. **Первый элемент.** -2. **Второй элемент.** -3. **Третий элемент.** - -Код -`` -результат - - -* **Первый элемент.** -* **Второй элемент.** -* **Третий элемент.** - -Как и остальные теги HTML, списки можно вкладывать друг в друга. - -####**Спецсимволы** - -Это символы, которых либо нет на клавиатуре, либо те, которые браузер принимает за управляющий символ и преобразует в код. Полный список этих символов здесь [Спецсимволы HTML](http://www.seoded.ru/beginner/pril/specsimvoli.html). - -####**Вставить иллюстрацию в HTML код** -Код:`` -Результат:![](https://imgp.golos.io/250x150/https://s19.postimg.org/f940iiuab/image.jpg) -Выравнивание картинки аналогично выравниванию текста. - -Вы также можете посмотреть видеоурок от [@serejandmyself](https://golos.io/@serejandmyself) о публикации постов в этом ролике: - - -
    -\(Основы работы языка Raw HTML подготовлены по урокам: -[http://www.seoded.ru/beginner/html/text.html\#2](http://www.seoded.ru/beginner/html/text.html#2)\) - -Мы разобрали три способа публикации постов. Однако существуют и альтернативные редакторы, позволяющие постить в Голос, не используя его веб-интерфейс. - ---- - -[![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) - -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/pervyi-shag-na-golose-interfeis-platformy-golos-io) \(автор [@liga.avtorov](https://golos.io/@liga.avtorov)\) - ---- - - - diff --git a/1-introduction/prosto-o-blokcheine.md b/1-introduction/prosto-o-blokcheine.md deleted file mode 100644 index f34e0528..00000000 --- a/1-introduction/prosto-o-blokcheine.md +++ /dev/null @@ -1,28 +0,0 @@ -# Просто о блокчейне - -Автор: @ropox - -Многие наверное знают, что блокчейн это последовательная цепочка связанных блоков. - -Каждый новый пост записывается в свой блок, каждый ваш лайк, перевод монет, добавление друзей, блокировка недругов. Все записывается последовательно. - -Последующий блок включает в себя эссенцию содержимого предыдущего блока. Так называемый хэш. В следующем блоке будет тоже включен хэш этого блока. И так далее. Таким образом, если кто нибудь захочет поменять содержимого блока где-то в середине цепочки, ему придется поменять хэши каждого последующего блока, а это получается совсем другая цепочка. Можно сказать другая последовательность событий. - -А теперь кто чуть-чуть постарше, вспомните ранешние компьютеры, игрушки в которых записывались на магнитофонной ленте. Чтобы запустить игру, надо было проиграть ленту с определенного момента. Компьютер считает байт за байтом с магнитной ленты в память компьютера. Посчитает все переменные и можно начинать играть. - -Так и с блокчейном. Что бы узнать, сколько у вас монеток на счету, надо пройти всю цепочку блоков, начиная с самого первого и последовательно до самого последнего. Если, например, в блоке 1014 переводили вам монетки, то прибавить к вашему балансу, если в блоке 1102 встретился перевод от вас кому-то, то надо отнять с вашего баланса монеток. В итоге мы знаем, сколько у вас на счету. Так же с вашими подписчиками или вашими подписками. Чтобы узнать, кто на вас подписался, надо просмотреть всю цепочку блоков. - -Сейчас (середина июня 2017 г.) уже в цепочке Голоса примерно 6800000 блоков. Каждые 3 секунды добавляется новый блок, в который записываются совершенные вами действия за последние три секунды. Такое количество блоков просматривать каждый раз было бы расточительно и очень медленно. Все таки это на данный момент уже около 2 гигабайт данных. Поэтому разработчики пристроили базу данных к блокчейну. Нода, - узел в сети блокчейна, - при запуске скачивает все блоки, один за другим и заполняет базу данных. Складывает в базу данных суммы, ваш баланс, последние версии постов. Многие называют это синхронизацией. Когда нода полностью синхронизируется с блокчейном, простым запросом в базе данных, обновляемой нодой, можно узнать сколько у вас монет на балансе, сколько у вас друзей или сколько у вас постов, сколько проголосовало за ваш пост пользователей блокчейна. - -Таким образом мы имеем полностью проверяемый набор данных, верность которых гарантируется технологией блокчейн и мы можем очень быстро опрашивать данные блокчейна, - -Golos.io обслуживают несколько нод, со своими базами данных. Это сделано для того, чтобы golos.io мог еще быстрее отвечать на ваши запросы и опять же, если с одной из нод что-то случится, свет отключат, компьютер выйдет из строя, - у нас останется в запасе еще несколько нод. Golos.io перед тем, как обслужить ваш клик на веб-странице, проверяет, какая нода в данный момент свободна и тогда отправляет ей свой запрос на перевод монет, проверку баланса и так далее. - -Ну и как многие уже догадались, если одна нода упадет или зависнет, то ей придется опять синхронизироваться и она некоторое время будет находиться в процессе синхронизации и может возвращать старые данные, по мере считывания блоков. Допустим месячной, недельной или данные, которые были несколько часов назад. Когда нибудь нода синхронизируется полностью и все станет нормально, но пока она не синхронизировалась, у нее будут все еще устаревшие данные. - -Таким образом golos.io по вашему запросу может попасть на такую вот ноду, со старыми данными. Чтобы избежать ошибок, golos.io проверяет какой у ноды последний блок и когда он был создан. Если он был создан больше 3 секунд назад, то что-то тут не так и поэтому мы видим ошибку `check_max_block_age(_max_block_age)`. - -Если увидели такую ошибку, перезагрузите страницу, скорее всего golos.io загрузит данные с полностью синхронизированной ноды. Если вы в этот момент пишите пост, то сохраните текст, и перезагрузите страницу. Можно писать текст в файле, в google docs и уже готовый отправлять на golos.io. - -
    По материалам [статьи](https://golos.io/ru--golos/@ropox/blokchein) (автор @ropox) -
    \ No newline at end of file diff --git a/1-introduction/registratsiya.md b/1-introduction/registratsiya.md deleted file mode 100644 index 46b82902..00000000 --- a/1-introduction/registratsiya.md +++ /dev/null @@ -1,24 +0,0 @@ -# Пошаговая инструкция регистрации на golos.io - -1. Перейдите на страницу https://golos.io/ - -2. Нажмите на кнопку “Регистрация”. - -3. Введите код страны и свой номер телефона без кода страны. - -4. Далее нажмите на кнопку “Получить код” и отправьте смс с кодом, указанным в голубом окошке, на номер, указанный там же. Ваш номер телефона пройдет верификацию и поля формы в регистрации станут активными. - -5. Введите свой e-mail адрес (адрес почтового ящика). - -6. Введите ваш логин, который будет является вашим псевдонимом на сайте golos.io - -7. Далее обязательно скопируйте пароль (он генерируется автоматически) и обязательно запишите и сохраните его везде, где только возможно. Golos.io не хранит ваш пароль, и восстановить его в случае утери будет невозможно!!! - -8. Далее вставьте скопированный пароль в поле “Введите сгенерированный пароль”. - -9. Поставьте галочки, что вы приняли к сведению правила хранения паролей, и ознакомились с условиями использования платформы - -10. Нажмите “Регистрация”. - -11. В поле “Пароль”, скопируйте тот пароль, который сохранили и нажмите “Войти”. - diff --git a/1-introduction/registratsiya/sposobi-registratsii.md b/1-introduction/registratsiya/sposobi-registratsii.md deleted file mode 100644 index 09af91ee..00000000 --- a/1-introduction/registratsiya/sposobi-registratsii.md +++ /dev/null @@ -1,51 +0,0 @@ -#Способы регистрации на блокчейне Голос - -Для получения полного доступа к медиаблокчейну Голос необходимо зарегистрироваться. Существует несколько точек доступа (сайтов или программ), которые предоставляют такую возможность. Полученные при регистрации логин и пароль можно использовать для входа в Голос через все другие точки доступа. - -- Надежно сохраните полученные логин, пароль и ключи. Утраченные данные, как правило, невозможно восстановить. - -- Не пользуйтесь для регистрации и входа непроверенными сайтами и сервисами. Используйте их на свой страх и риск. -Ответственность за использование ваших данных несете только вы и владельцы сайтов, используемых как точки входа в блокчейн Голос. - -- За помощью и в случае проблем при регистрации обращайтесь по контактам, указанным для каждого способа регистрации. - -####Бесплатные способы регистрации: -- #####Сайт [Golos.io](https://golos.io) / [Golos.blog](https://golos.blog) -Зайдите на [страницу создания аккаунта](https://golos.io/create_account) или [на "зеркало" сайта](https://golos.blog/create_account), введите номер своего телефона, затем отправьте смс с кодом на указанный номер, ваш номер телефона пройдет проверку и форма регистрации станет активной. - -_Контакты:_ разработчик [команда golos.io](https://golos.io/about#team),
    [чат поддержки](https://t.me/golos_support) в Telegram, почта support@golos.io - -- #####Сайт [GoldVoice.club](https://goldvoice.club) -Зайдите на [страницу регистрации](https://goldvoice.club/registration/), укажите желаемый логин и пароль, а также некоторые данные о себе (не обязательно). Отправка или получение смс не требуется. - -_Контакты:_ автор Анатолий Пискунов ([@on1x](https://golos.io/@on1x))
    [чат поддержки](https://t.me/goldvoice) в Telegram - -- #####Страница на [golos.cf](https://golos.cf/reg.html) -Зайдите на страницу [golos.cf/reg.html](https://golos.cf/reg.html), укажите логин и активный ключ регистратора, желаемые логин и пароль для нового аккаунта. Отправка или получение смс не требуется. - - Ограничения: - - Вы сможете создать новый аккаунт только при помощи своего существующего аккаунта. - - Вам необходимо иметь на счету (не в силе голоса) минимум 1 GOLOS. При создании аккаунта они будут переведены в силу голоса нового аккаунта. [Подробнее об этом способе](/3-guides/stati/registratsiya-akkauntov.md). - -_Контакты:_ автор [@vik](https://golos.io/@vik)
    [чат поддержки Robot](https://t.me/chain_cf) в Telegram или на странице [golos.cf](https://golos.cf). - -- #####Используя утилиту cli_wallet -Воспользуйтесь [инструкцией](/3-guides/stati/sozdanie-polzovatelya-ispolzuya-cliwallet.md) от пользователя [@ropox](https://golos.io/@ropox) - - Ограничения: - - Вы сможете создать новый аккаунт только при помощи своего существующего аккаунта. - - Вам необходимо иметь на счету (не в силе голоса) минимум 1 GOLOS. При создании аккаунта они будут переведены в силу голоса нового аккаунта. - - Требуются навыки работы с командной строкой в ОС Linux - -####Платные способы регистрации: -- ##### Сервис [Безликий Голос](https://anonym.golos.rocks/) -AnonymGOLOS — сервис позволяющий вам анонимно создавать аккаунты платформы ГОЛОС. -Стоимость регистрации в BTC (0.001) или LTC (0.05). - -_Контакты:_ автор [@someguy123](https://steemit.com/@someguy123)
    эл. почта [anongolos@someguy123.com](mailto:anongolos@someguy123.com) (англ.яз.) - -- ##### Пользователи Голоса -В чате Telegram [Robot](https://t.me/chain_cf) или на странице [golos.cf](https://golos.cf) вы можете обратиться за помощью к пользователям Голоса, предоставляющим услугу платной или бесплатной регистрации на блокчейне Голос без валидации по смс. - -Обращаем ваше внимание, что это наиболее рискованный способ регистрации, предполагающий ваше доверие к данному пользователю. Также следует иметь в виду, что восстановление вашего нового аккаунта в случае необходимости будет происходить при помощи аккаунта-регистратора. - \ No newline at end of file diff --git a/1-introduction/smailiki-na-golose.md b/1-introduction/smailiki-na-golose.md deleted file mode 100644 index 56542c3d..00000000 --- a/1-introduction/smailiki-na-golose.md +++ /dev/null @@ -1,364 +0,0 @@ -

    Смайлики в Голосе

    -

    Как вставить смайлик в название статьи, саму статью и комментарии?

    - -

    Так же Ваш смайл будет виден на странице предварительного просмотра.

    -
    -

    Эмоции

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    СмайлКодСмайлКодСмайлКод
    😁😁😂😂😃😃
    😄😄😅😅😆😆
    😇😇😈😈😉😉
    😊😊😋😋😌😌
    😍😍😎😎😏😏
    😐😐😑😑😒😒
    😓😓😔😔😕😕
    😖😖😗😗😘😘
    😙😙😚😚😛😛
    😜😜😝😝😞😞
    😟😟😠😠😡😡
    😢😢😣😣😤😤
    😥😥😦😦😧😧
    😨😨😩😩😪😪
    😫😫😬😬😭😭
    😮😮😯😯😰😰
    😱😱😲😲😳😳
    😴😴😵😵😶😶
    😷😷😸😸😹😹
    😺😺😻😻😼😼
    😽😽😾😾😿😿
    🙀🙀🙁🙁🙂🙂
    🙃🙃🙄🙄🙅🙅
    🙆🙆🙇🙇🙈🙈
    🙉🙉🙊🙊🙋🙋
    🙌🙌🙍🙍🙎🙎
    -
    -

    Подсказки

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    СмайлКодСмайлКодСмайлКод
    ✀✁✂
    ✃✄✅
    ✆✇✈
    ✉✊✋
    ✌✍✎
    ✏✐✑
    ✒✓✔
    ✕✖✗
    ✘✙✚
    ✛✜✝
    ✞✟✠
    ✡✢✣
    ✤✥✦
    ✧✨✩
    ✪✫✬
    ✭✮✯
    ✰✱✲
    ✳✴✵
    ✶✷✸
    ✹✺✻
    ✼✽✾
    ✿❀❁
    ❂❃❄
    ❅❆❇
    ❈❉❊
    ❋❌❍
    ❎❏❐
    ❑❒❓
    ❔❕❖
    ❗❘❙
    ❚❛❜
    ❝❞❟
    ❠❡❢
    ❣❤❥
    ❦❧❨
    ❩❪❫
    ❬❭❮
    ❯❰❱
    ❲❳❴
    ❵❶❷
    ❸❹❺
    ❻❼❽
    ❾❿➀
    ➁➂➃
    ➄➅➆
    ➇➈➉
    ➊➋➌
    ➍➎➏
    ➐➑➒
    ➓➔➕
    ➖➗➘
    ➙➚➛
    ➜➝➞
    ➟➠➡
    ➢➣➤
    ➥➦➧
    ➨➩➪
    ➫➬➭
    ➮➯➰
    ➱➲➳
    ➴➵➶
    ➷➸➹
    ➺➻➼
    ➽➾➿
    -
    -

    Транспорт

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    СмайлКодСмайлКодСмайлКод
    🚀🚀🚁🚁🚂🚂
    🚃🚃🚄🚄🚅🚅
    🚆🚆🚇🚇🚈🚈
    🚉🚉🚊🚊🚋🚋
    🚌🚌🚍🚍🚎🚎
    🚏🚏🚐🚐🚑🚑
    🚒🚒🚓🚓🚔🚔
    🚕🚕🚖🚖🚗🚗
    🚘🚘🚙🚙🚚🚚
    🚛🚛🚜🚜🚝🚝
    🚞🚞🚟🚟🚠🚠
    🚡🚡🚢🚢🚣🚣
    🚤🚤🚥🚥🚦🚦
    🚧🚧🚨🚨🚩🚩
    🚪🚪🚫🚫🚬🚬
    🚭🚭🚮🚮🚯🚯
    🚰🚰🚱🚱🚲🚲
    🚳🚳🚴🚴🚵🚵
    🚶🚶🚷🚷🚸🚸
    🚹🚹🚺🚺🚻🚻
    🚼🚼🚽🚽🚾🚾
    🚿🚿🛀🛀🛁🛁
    🛂🛂🛃🛃🛄🛄
    -
    -

    Разное

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    СмайлКодСмайлКодСмайлКод
    🌀🌀🌁🌁🌂🌂
    🌃🌃🌄🌄🌅🌅
    🌆🌆🌇🌇🌈🌈
    🌉🌉🌊🌊🌋🌋
    🌌🌌🌍🌍🌎🌎
    🌏🌏🌐🌐🌑🌑
    🌒🌒🌓🌓🌔🌔
    🌕🌕🌖🌖🌗🌗
    🌘🌘🌙🌙🌚🌚
    🌛🌛🌜🌜🌝🌝
    🌞🌞🌟🌟🌠🌠
    🌡🌡🌢🌢🌣🌣
    🌤🌤🌥🌥🌦🌦
    🌧🌧🌨🌨🌩🌩
    🌪🌪🌫🌫🌬🌬
    🌭🌭🌮🌮🌯🌯
    🌰🌰🌱🌱🌲🌲
    🌳🌳🌴🌴🌵🌵
    🌶🌶🌷🌷🌸🌸
    🌹🌹🌺🌺🌻🌻
    🌼🌼🌽🌽🌾🌾
    🌿🌿🍀🍀🍁🍁
    🍂🍂🍃🍃🍄🍄
    🍅🍅🍆🍆🍇🍇
    🍈🍈🍉🍉🍊🍊
    🍋🍋🍌🍌🍍🍍
    🍎🍎🍏🍏🍐🍐
    🍑🍑🍒🍒🍓🍓
    🍔🍔🍕🍕🍖🍖
    🍗🍗🍘🍘🍙🍙
    🍚🍚🍛🍛🍜🍜
    🍝🍝🍞🍞🍟🍟
    🍠🍠🍡🍡🍢🍢
    🍣🍣🍤🍤🍥🍥
    🍦🍦🍧🍧🍨🍨
    🍩🍩🍪🍪🍫🍫
    🍬🍬🍭🍭🍮🍮
    🍯🍯🍰🍰🍱🍱
    🍲🍲🍳🍳🍴🍴
    🍵🍵🍶🍶🍷🍷
    🍸🍸🍹🍹🍺🍺
    🍻🍻🍼🍼🍽🍽
    🍾🍾🍿🍿🎀🎀
    🎁🎁🎂🎂🎃🎃
    🎄🎄🎅🎅🎆🎆
    🎇🎇🎈🎈🎉🎉
    🎊🎊🎋🎋🎌🎌
    🎍🎍🎎🎎🎏🎏
    🎐🎐🎑🎑🎒🎒
    🎓🎓🎔🎔🎕🎕
    🎖🎖🎗🎗🎘🎘
    🎙🎙🎚🎚🎛🎛
    🎜🎜🎝🎝🎞🎞
    🎟🎟🎠🎠🎡🎡
    🎢🎢🎣🎣🎤🎤
    🎥🎥🎦🎦🎧🎧
    🎨🎨🎩🎩🎪🎪
    🎫🎫🎬🎬🎭🎭
    🎮🎮🎯🎯🎰🎰
    🎱🎱🎲🎲🎳🎳
    🎴🎴🎵🎵🎶🎶
    🎷🎷🎸🎸🎹🎹
    🎺🎺🎻🎻🎼🎼
    🎽🎽🎾🎾🎿🎿
    🏀🏀🏁🏁🏂🏂
    🏃🏃🏄🏄🏅🏅
    🏆🏆🏇🏇🏈🏈
    🏉🏉🏊🏊🏋🏋
    🏌🏌🏍🏍🏎🏎
    🏏🏏🏐🏐🏑🏑
    🏒🏒🏓🏓🏔🏔
    🏕🏕🏖🏖🏗🏗
    🏘🏘🏙🏙🏚🏚
    🏛🏛🏜🏜🏝🏝
    🏞🏞🏟🏟🏠🏠
    🏡🏡🏢🏢🏣🏣
    🏤🏤🏥🏥🏦🏦
    🏧🏧🏨🏨🏩🏩
    🏪🏪🏫🏫🏬🏬
    🏭🏭🏮🏮🏯🏯
    🏰🏰🏱🏱🏲🏲
    🏳🏳🏴🏴🏵🏵
    🏶🏶🏷🏷🏸🏸
    🏹🏹🏺🏺🏻🏻
    🏼🏼🏽🏽🏾🏾
    🏿🏿🐀🐀🐁🐁
    🐂🐂🐃🐃🐄🐄
    🐅🐅🐆🐆🐇🐇
    🐈🐈🐉🐉🐊🐊
    🐋🐋🐌🐌🐍🐍
    🐎🐎🐏🐏🐐🐐
    🐑🐑🐒🐒🐓🐓
    🐔🐔🐕🐕🐖🐖
    🐗🐗🐘🐘🐙🐙
    🐚🐚🐛🐛🐜🐜
    🐝🐝🐞🐞🐟🐟
    🐠🐠🐡🐡🐢🐢
    🐣🐣🐤🐤🐥🐥
    🐦🐦🐧🐧🐨🐨
    🐩🐩🐪🐪🐫🐫
    🐬🐬🐭🐭🐮🐮
    🐯🐯🐰🐰🐱🐱
    🐲🐲🐳🐳🐴🐴
    🐵🐵🐶🐶🐷🐷
    🐸🐸🐹🐹🐺🐺
    🐻🐻🐼🐼🐽🐽
    🐾🐾🐿🐿👀👀
    👁👁👂👂👃👃
    👄👄👅👅👆👆
    👇👇👈👈👉👉
    👊👊👋👋👌👌
    👍👍👎👎👏👏
    👐👐👑👑👒👒
    👓👓👔👔👕👕
    👖👖👗👗👘👘
    👙👙👚👚👛👛
    👜👜👝👝👞👞
    👟👟👠👠👡👡
    👢👢👣👣👤👤
    👥👥👦👦👧👧
    👨👨👩👩👪👪
    👫👫👬👬👭👭
    👮👮👯👯👰👰
    👱👱👲👲👳👳
    👴👴👵👵👶👶
    👷👷👸👸👹👹
    👺👺👻👻👼👼
    👽👽👾👾👿👿
    💀💀💁💁💂💂
    💃💃💄💄💅💅
    💆💆💇💇💈💈
    💉💉💊💊💋💋
    💌💌💍💍💎💎
    💏💏💐💐💑💑
    💒💒💓💓💔💔
    💕💕💖💖💗💗
    💘💘💙💙💚💚
    💛💛💜💜💝💝
    💞💞💟💟💠💠
    💡💡💢💢💣💣
    💤💤💥💥💦💦
    💧💧💨💨💩💩
    💪💪💫💫💬💬
    💭💭💮💮💯💯
    💰💰💱💱💲💲
    💳💳💴💴💵💵
    💶💶💷💷💸💸
    💹💹💺💺💻💻
    💼💼💽💽💾💾
    💿💿📀📀📁📁
    📂📂📃📃📄📄
    📅📅📆📆📇📇
    📈📈📉📉📊📊
    📋📋📌📌📍📍
    📎📎📏📏📐📐
    📑📑📒📒📓📓
    📔📔📕📕📖📖
    📗📗📘📘📙📙
    📚📚📛📛📜📜
    📝📝📞📞📟📟
    📠📠📡📡📢📢
    📣📣📤📤📥📥
    📦📦📧📧📨📨
    📩📩📪📪📫📫
    📬📬📭📭📮📮
    📯📯📰📰📱📱
    📲📲📳📳📴📴
    📵📵📶📶📷📷
    📸📸📹📹📺📺
    📻📻📼📼📽📽
    📾📾📿📿🔀🔀
    🔁🔁🔂🔂🔃🔃
    🔄🔄🔅🔅🔆🔆
    🔇🔇🔈🔈🔉🔉
    🔊🔊🔋🔋🔌🔌
    🔍🔍🔎🔎🔏🔏
    🔐🔐🔑🔑🔒🔒
    🔓🔓🔔🔔🔕🔕
    🔖🔖🔗🔗🔘🔘
    🔙🔙🔚🔚🔛🔛
    🔜🔜🔝🔝🔞🔞
    🔟🔟🔠🔠🔡🔡
    🔢🔢🔣🔣🔤🔤
    🔥🔥🔦🔦🔧🔧
    🔨🔨🔩🔩🔪🔪
    🔫🔫🔬🔬🔭🔭
    🔮🔮🔯🔯🔰🔰
    🔱🔱🔲🔲🔳🔳
    🔴🔴🔵🔵🔶🔶
    🔷🔷🔸🔸🔹🔹
    🔺🔺🔻🔻🔼🔼
    🕉🕉🕊🕊🕋🕋
    🕌🕌🕍🕍🕎🕎
    🕏🕏🕐🕐🕑🕑
    🕒🕒🕓🕓🕔🕔
    🕕🕕🕖🕖🕗🕗
    🕘🕘🕙🕙🕚🕚
    🕛🕛🕜🕜🕝🕝
    🕞🕞🕟🕟🕠🕠
    🕡🕡🕢🕢🕣🕣
    🕤🕤🕥🕥🕦🕦
    - - ---- - -По материалам [статьи](https://golos.io/ru--smaijliki/@lebekons/smailiki-na-golose-vsya-podborka-v-udobnoi-tablice) \(автор [@lebekons](https://golos.io/@lebekons)\) - diff --git a/1-introduction/steemulru.md b/1-introduction/steemulru.md deleted file mode 100644 index b16ee833..00000000 --- a/1-introduction/steemulru.md +++ /dev/null @@ -1,77 +0,0 @@ -# Дополнительные инструменты для голоса - steemul.ru - -Автор: [@**liga.avtorov**](https://golos.io/@liga.avtorov) / Редактирование и обновление статьи - @aleos. - -Рассмотрим портал [steemul.ru](http://steemul.ru), который создан и отдан в пользование пользователям Голоса делегатом [@xtar](https://golos.io/@xtar). - -![](https://imgp.golos.io/0x0/http://storage7.static.itmages.ru/i/17/0912/h_1505213814_8433615_bf580e3526.png) - -Для начала переходим по ссылке [steemul.ru](http://steemul.ru), попадаем на главную страницу сайта. Здесь мы видим немного вводной информации: - -![](https://imgp.golos.io/0x0/http://storage4.static.itmages.ru/i/17/0912/h_1505209703_4357588_b72ef41129.png) - -## Делегаты. - -Переходим на следующую вкладку под названием «**Делегаты**», на ней мы видим ТОП-100 наших многоуважаемых делегатов. - -![](https://imgp.golos.io/0x0/http://storage4.static.itmages.ru/i/17/0912/h_1505209703_7017874_7fc8836c3c.png) - -Нажимаем на имя делегата и переходим на страницу, посвящённую лично ему: - -![](https://imgp.golos.io/0x0/http://storage4.static.itmages.ru/i/17/0912/h_1505209703_7027324_97010ff720.png) - -Здесь мы найдём несколько полезных ссылок на страницу делегата на голосе, его делегатский пост и страницы на golosdb.com и golosd.com. Также здесь есть информация о всех пользователях Голоса, проголосовавших за выбранного делегата, и вес их голосов. - -## Топ. - -Идём далее, следующий пункт меню носит название «**Топ**», в нём можно найти рейтинги, составленные по различным параметрам. - -![](https://imgp.golos.io/0x0/http://storage5.static.itmages.ru/i/17/0912/h_1505209704_5916983_c854983013.png) - -Несколько вкладок покажут вам рейтинги, составленные по разным параметрам. Доступные параметры для сортировки: - -1. GP. / Количество силы голоса -2. GOLOS. / Количество токенов GOLOS -3. GBG. / Количество токенов GBG -4. Posts. / Количество постов с учётом комментариев -5. Followers. / Количество подписчиков блога -6. Rep. / Репутация -7. Post. Rewards. / Общее количество выплат за посты -8. Cur. Rewards. / Общее количество кураторских выплат -9. ICO, BTC. / Количество вложенных BTC при проведении ICO - -## Калькулятор. - -Следующий пункт — это «**Калькулятор**». В этой вкладке вы найдёте текущие курсы токенов GOLOS и GBG на различных биржах, курс Золота от ЦБ. -А также калькулятор для нескольких направлений обмена ваших GBG - к примеру, используя его, можно посчитать, какую сумму в рублях вы заработали на Голосе. -В самой нижней части страницы есть поле для объявлений об обмене внутренней валюты Голоса на фиатные деньги и наоборот. - -![](https://imgp.golos.io/0x0/http://storage5.static.itmages.ru/i/17/0912/h_1505209704_5255826_c64875842c.png) - -## Фид. - -Следующая вкладка называется «**Фид**» и на ней отображаются цены, взятые с нескольких бирж, а также объёмы торгов и цены в рублях. - -![](https://imgp.golos.io/0x0/http://storage5.static.itmages.ru/i/17/0912/h_1505209704_1077769_f55d4b3a26.png) - -## SMS. - -Сразу переходим далее, в пункт «**SMS**». Этот раздел будет полезен для делегатов Голоса, так как позволяет им получать уведомления о пропущенных ими блоках и обновлениях программного обеспечения. Также, если делегат по какой-либо причине перестал публиковать цены GOLOS относительно GBG - этот сервис его об этом проинформирует. - -![](https://imgp.golos.io/0x0/http://storage6.static.itmages.ru/i/17/0912/h_1505209705_3523989_d61fc490ab.png) - -## Голосования. - -Вкладка «**Голосования**» переехала с верхней части сайта на главную страничку [http://steemul.ru](http://steemul.ru), и на текущий момент \(май 2018 года\) сервис Голосования не работает. Вообще, это сервис на основе блокчейна Голоса, который создан для голосования. На этой странице можно ввести свой никнейм и приватный постинг ключ, после чего у вас появится возможность участвовать в голосованиях и создавать свои собственные. -Если вы не хотите делиться своими ключами со сторонними сервисами - вы можете голосовать внутри голоса, на этой странице описано, как это сделать. - -Вкладка **Гаранты** на текущий момент \(май 2018 года\) отсутствует. Возможно, в этой вкладке планировалось сделать сервис по заключению сделок при участии авторитетного пользователя, выступающего в качестве гаранта выполнения условий. - -![](https://imgp.golos.io/0x0/http://storage6.static.itmages.ru/i/17/0912/h_1505209705_8295789_b38d457a70.png) - -Также, на главной страничке [http://steemul.ru](http://steemul.ru) есть ещё несколько сервисов: - -[https://reviews.steemul.ru](https://reviews.steemul.ru/) - отзывы пользователей Голоса друг о друге. На текущий момент \(май 2018 года\) - не работает. - -[http://stream.steemul.ru](http://stream.steemul.ru/) - сервис слежения за активностью на Голосе в реальном времени. На текущий момент \(май 2018 года\) - не работает. - diff --git a/1-introduction/telegram-chati-golosa.md b/1-introduction/telegram-chati-golosa.md deleted file mode 100644 index 8c1905ea..00000000 --- a/1-introduction/telegram-chati-golosa.md +++ /dev/null @@ -1,26 +0,0 @@ -| Ссылка | Описание | -| --- | :---: | -| [Golos.io Техподдержка](https://t.me/golos_support) | Специально нанятые ДанКинескоп [@dankinescop](https://t.me/dankinescop) и Алеся [@chinpu](https://t.me/chinpu) отвечают на вопросы | -| [Golos\_Developers](https://t.me/GolosDev) | Чат для разработчиков приложений на блокчейне Голос | -| [ROBOT](https://t.me/chain_cf) | Чат [@vik](https://golos.io/@vik)'a с поддержкой его ботов. Адекватные люди и интересные обсуждения | -| [GoldVoice.club](https://t.me/goldvoice) | Чат поддержки альтернативного клиента [goldvoice.club](https://goldvoice.club) от @on1x | -| [Делегаты Голоса \(Публичная Группа, просьба не флудить!\)](https://t.me/golos_delegates) | Публичная группа обсуждения будущего Голоса с делегатами. Иногда заглядывают люди из [@golosfund](https://golos.io/@golosfund) и [@cyberfund](https://golos.io/@cyberfund) | -| [Golos•Core Techchat](https://t.me/goloscoretc) | Чат для технического взаимодействия с командой разработки ядра \(goloscore\) | -| [Upvote50\50](https://t.me/joinchat/AsAZwg2Dtj2BSOI_jBLLxQ) | Чат проекта "[апвот 50\50](https://golos.io/trending/ru--apvot50-50)" | -| [Голос.io \#Открытый-код](https://t.me/golosOtkrytyijKod) | Проект [@hipster](https://golos.io/@hipster) по поддержке развития инфраструктуры Голоса | -| [GolosTools](https://t.me/GolosTools) | Аналог "Открытого кода", только по тегу [\#golostools](https://golos.io/trending/golostools) | -| [GolosWikiGroup](https://t.me/goloswikigroup) | Чат рабочей группы редакторов wiki | -| [ГОЛОС: поддержка авторского контента](https://t.me/joinchat/AlKeQUQpN8-9oShtaTcY7Q) | Чат проекта "[Голосовалочка](https://golos.io/ru--golosovalochka/@chiliec/golosovalochka)" | -| [Vox Populi](https://t.me/Vox_Populi_Centre) | Чат проекта [\#vox-populi](https://golos.io/trending/vox-populi) | -| [ГОЛОС](https://t.me/golos_io) | Участники пытаются играть в "Мафию" и общаться с огромным количеством ботов, рекомендующих сигнальные чаты | -| [Жалобы и предложения](https://t.me/golosio_complaints) | Флудилка на разные темы. Осторожно: мат! | - - -## Заброшенные или давно неактивные группы. - -| Ссылка и краткое описание | Статус | -| :--- | :--- | -| [Голос ПИН](https://t.me/joinchat/GQu0jxDuMpHuS28p7yaFRQ) \(поддержка новичков\) | Группа заброшена и давно не активна | -| [НИИ Курирования на Голосе](https://t.me/pauk_unofficial) \(Обсуждение по курированию, методике, правилам и всякому прочему\) | Группа практически заброшена, давно не активна | -| [Школа крипто-трейдеров Голоса](https://t.me/joinchat/FxPyUURcpDc9k3HPc2Q3Jw) \(Чат для трейдеров - участников Голоса\) | Группа практически заброшена, давно не активна | -| [Кругосветка Голос](https://t.me/krugosvetka_golos) \(Чат [@ieshua](https://golos.io/@ieshua) для обсуждения его путешествий\) | Группа заброшена и давно не активна | diff --git a/1-introduction/terminologiya.md b/1-introduction/terminologiya.md deleted file mode 100644 index b3efe070..00000000 --- a/1-introduction/terminologiya.md +++ /dev/null @@ -1,89 +0,0 @@ -# 🔠 Терминология - -> Словарь основных терминов - -#### Апвоут - -Апвоут (upvote, от англ. up — “вверх”, “vote” — голосовать) - голосование за пост или комментарий, аналог "лайка" на Фейсбуке. Однако на Голосе есть значительные отличия от систем голосования в других социальных сетях - те, за кого проголосовали на Голосе, получают вознаграждение. - -Когда вы делаете апвоут чьего-то поста, с вашего счёта не взимаются никакие средства. Вместо этого своим участием в голосовании вы участвуете в распределении пула новых токенов. - -Новые токены создаются блокчейном Голоса постоянно. Объём сгенерированных за день токенов представляет собой ежедневный **пул вознаграждения**. Нажатием кнопки "апвоут" вы сообщаете блокчейну Голоса, "вот куда я хочу передать сумму Х из ежедневного пула вознаграждений". - -Часть вознаграждений за публикации и комментарии при выплате отправляется обратно тем людям, которые участием в голосовании помогли сгенерировать эту сумму. Проголосовав за пост или комментарий (этот процесс называется **курированием**), вы существенно помогаете им увеличить ценность и охват аудитории. И поэтому вознаграждаетесь за это курирование. - -Сумма, которую вы получите за апвоут публикации, зависит от ряда факторов: сколько в итоге заработал пост, в какой момент времени вы сделали апвоут, количества апвоутов до вашего голоса, силы голосующих, и т.д. и т.п. -Если не вдаваться в подробности, то рекомендованное правило для апвотов такое: -Чем раньше вы проголосуете за потенциально успешный и высоко оцененный пост, тем большее кураторское вознаграждение вы получите. - -#### Флаг - -Ставя флаг какому-либо посту или комментарию, Вы уменьшаете размер вознаграждения за него, а также отрицательно влияете на репутацию его автора. Сила Вашего влияния зависит от того, какая у вас Мощность Голоса (ее значение можно увидеть на golos.io справа вверху, рядом c вашей аватаркой). -Конечно, каждый пользователь сам для себя решает, когда и в каких ситуациях ставить или не ставить флаг. В любом сообществе формируются свои негласные нормы поведения. Голос не исключение. Начиная работать с платформой, полезно знать о существующих нормах поведения. - -Не стоит ставить флаг просто так. Флаг — это крайняя мера. Если Вы просто несогласны с мнением, высказанным в посте или комментарии, оставьте свой ответный комментарий. Поддержите дискуссию, предложите другим участникам сообщества высказать свое мнение. - -Рекомендации, за что приемлемо ставить флаг: -- за опубликованный аморальный контент -- за контент, который наносит личное оскорбление другому пользователю Голоса -- за плагиат -- за неоднократную публикацию скопированных из интернета текстов (так называемую копипасту), даже если на них стоит ссылка -- за публикацию спама -- если аккаунт заподозрен в воровстве личности (в случаях, когда пользователь, который публикует контент из интернета утверждая, что является автором, но при этом отказывается верифицироваться) -аккаунт занимается мошенничеством и/или троллингом - публикует провокационные сообщения -- если публикуется так называемый трэш: “что-либо невообразимо ужасное, чудовищное, вызывающее удивление и отвращение”. Например, в кино это “жанр, в котором использование жанровых штампов (насилия, крови, отвращения и т.п.) достигает гиперболических размеров, доходя до пародии”. -- за публикацию постов, содержащих мат и/или контент эротического характера, если при этом не указаны соответствующие теги. - -Чтобы не получить флаг, пользователю стоит указать соответствующие теги, например, #ню, #мат, #nsfw (аббревиатура английских слов Not safe/suitable for work, что означает Небезопасно/неподходяще для работы), а также указать в заголовке поста о соответствующем содержании, например добавить в заголовок “18+”. - -#### Форк - -Форк \(англ. fork — развилка, вилка\) или ответвление — использование кодовой базы программного проекта в качестве старта для другого. При этом основной проект может как продолжать существование, так и прекратить его. - -Важно упомянуть, что Голос - это форк Стима \(www.steemit.com\), социальной площадки в основном для англоязычных пользователей. - -Проще говоря, Голос это некая копия программного обеспечения Стима, которую уже нельзя вернуть вспять. То есть у Голоса есть своя собственная сеть \(об этом чуть позже\), со своими собственными "валютами" и своим информационным потоком. - -#### Децентрализация - -Простыми словами, децентрализация - это когда отсутствует центральный орган управления. То есть это нечто, что управляется не одним человеком / командой / органом, а сразу многими. Эти "многие" для управления добиваются консенсуса \(об этом ниже\). - -Простой пример - положив свои деньги в банк, Вы доверяете банку \(точнее руководству этого банка\) ими управлять. То есть эти деньги, по сути, контролирует центральный орган управления банка. Это централизованная площадка. - -Допустим, у Вас и еще у 100 человек есть свой колхоз \(в котором Вы все являетесь владельцами\). Прежде чем Вы, что-то выращиваете, Вы это обсуждаете с другими и принимаете 100% обоюдное решение о том, что выращивать, почём продавать, где продавать и тд. Это децентрализация. - -> Википедия: децентрализация это - "**процесс перераспределения, рассеивания функций, сил, власти, людей или вещей от центрального местоположения или управляющего органа**." - -#### Репутация - -Ваша репутация сообщает другим пользователям об уровне Вашей активности и некого социального статуса на платформе. - -Новые пользователи начинают с репутацией 25. Минимальное значение -25. При отрицательном значении репутации Ваши посты и комментарии будут скрывать из общей ленты. - -#### Курирование \(апвоуты, лайки\) - -Кураторы – это те люди, которые «апвоутят» \(лайкают\) контент других авторов. -В Голосе куратор получает до 25% от общего вознаграждения за пост или комментарий. - -#### Тэги \(теги, метки\) - -Тэги это ключевые слова, по которым другие пользователи смогут найти Ваш пост. Ставьте только те тэги, которые относятся к написанному Вами материалу. -Вы можете добавить до 5 тэгов в один пост. Первый тэг будет использован в адресе страницы с Вашим постом. - -#### Токены \(монеты, ассеты, "валюта", "деньги"\) - -В Голосе 3 вида "токенов" \(монет\): ГОЛОС, Сила Голоса и Золотой. - -**а\)** ГОЛОС \(или GOLOS\) - это основная монета. Она используется, чтобы обозначить размер вознаграждения пользователей платформы Голос в удобной для них валюте. - -**б\)** Сила Голоса \(или СГ\) - определяет "вес" Вашего голоса \(насколько много/мало будет стоить Ваш "апвоут", лайк\). Силу Голоса можно наращивать посредством перевода в неё токенов Голос. - -**в\)** Золотой \(или GBG\) - приравнивается к текущему курсу 1 мг золота на рынке драгоценных металлов, выраженному в токенах ГОЛОС. - -* GBG расшифровывается как **Gold backed by GOLOS** \(Золотой, обеспеченный ГОЛОСами\). - -#### Делегаты - -Делегаты - это группа людей, которые держат на своих компьютерах ноды с программным кодом блокчейна Голос. Именно благодаря делегатам работает весь проект Голос. Чем больше активных делегатов - тем лучше для сети и проекта в целом, но для стабильной работы блокчейна Голос необходимо как минимум 15 делегатов с работоспособными нодами. Делегаты подписывают блоки транзакций, некоторые из делегатов активно участвуют в жизни проекта и разрабатывают дополнительные сервисы к блокчейну. -Кроме того, делегаты принимают решение о принятии \(или отклонении\) обновления ПО всего блокчейна Голос \(так называемые софт-форк и хардфорки\). Для того, чтобы новый софтфорк или хардфорк начал полноценно работать на площадке Голос - его должны установить себе как минимум 15 делегатов из ТОПа. - diff --git a/1-introduction/uchastie-v-viki-golosa.md b/1-introduction/uchastie-v-viki-golosa.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-introduction/video.md b/1-introduction/video.md deleted file mode 100644 index 59a6336f..00000000 --- a/1-introduction/video.md +++ /dev/null @@ -1,43 +0,0 @@ -# 👁 Видео-материалы - -##### Что такое Голос? - -https://www.youtube.com/watch?v=8a0TPACOu2k - - - -##### Что такое блокчейн? - -https://www.youtube.com/watch?v=TRtHhXOte0o - - - -##### Трансляция ГолосФест -https://www.youtube.com/watch?v=sAT2HwAjUsI - - - -https://www.youtube.com/c/GolosIoru/live - -2-дневная встреча сообщества блогеров GOLOS.io в Москве (29-30 июля 2017 г.), для погружения в мир блокчейна, блоггинга, криптовалют, а также - знакомства, общения и обмена опытом. - -Дополнительные материалы: [#яИдуНаГОЛОСфест](https://golos.io/trending/ru--yaidunagolosfest) - -##### Mediametrics Live 2 -https://www.youtube.com/watch?v=hghErLkX5m0 - - - -Mediametrics Live 2 -Какие выгоды и возможности предоставляет медиаблокчейн Golos для бизнеса -Ведущий: Олег Иванов -В гостях: Сергей Симановский, ex CEO Golos Fund - - - - - - - - - diff --git a/1-introduction/vnutrennii-rinok.md b/1-introduction/vnutrennii-rinok.md deleted file mode 100644 index f5ae3ee9..00000000 --- a/1-introduction/vnutrennii-rinok.md +++ /dev/null @@ -1,60 +0,0 @@ -# Первый шаг на Голосе: дополнительные инструменты - Внутренний рынок - -Автор: [@liga.avtorov](https://golos.io/@liga.avtorov) - -Сегодня мы рассмотрим важный сервис на площадке Голос - **внутренний рынок**. -![](https://imgp.golos.io/0x0/https://s19.postimg.org/gshdgl1zn/image.jpg) - -О нём не все знают и редко пользуются, а зря. -Да, при сегодняшней внешней цене на **Золотой \(GBG\)**, конечно, выгоднее его менять на **Bitcoin **внешних биржах, к примеру, на том же **Bittrex**. Но если нужно поменять токены “сейчас и срочно”, то лучше это сделать на внутренней бирже. - -Если же посмотреть на динамику роста Голоса, то имеет смысл подержать и Голоса. GBG - он всё-таки валюта обеспеченная, а вот Голос - свободен и волатилен. Так что пользоваться им как торговым активом может быть куда выгоднее. - -Чтобы попасть на внутренний рынок платформы, кликните на пиктограмму выпадающего меню в правом верхнем углу: -![](https://imgp.golos.io/0x0/https://s5.postimg.org/61l6dksjb/меню1.jpg) - -Выберите вкладку**“внутренний рынок”** - -![](https://imgp.golos.io/0x0/https://s5.postimg.org/pxh5t49kn/меню2.jpg) - -И так вы попали на мини-биржу с двумя активами: Голос и Золотой: - -![](https://imgp.golos.io/0x0/https://s5.postimg.org/6jgbtfi47/общий_план.jpg) - -Слева вы видите графики, а справа - последние сводки на торговлю: последняя цена, объём, покупка, продажа и разница. - -* **Последняя цена** - * стоимость последней сделки -* **Объём** - * суммарный объём всех сделок за последние 24 часа -* **Покупка** - * последняя цена на покупку GBG -* **Продажа** - * последняя цена на продажу GBG -* **Разница** - * разница между покупкой и продажей, выраженная в процентах - -Далее две таблицы: **КУПИТЬ ГОЛОС **и **ПРОДАТЬ ГОЛОС**. - -* В таблице “КУПИТЬ ГОЛОС” можно приобрести голос за имеющиеся в вашем кошельке Золотые. Гиперссылка “доступно” автоматически вобьёт в графу GBG ваше количество золотых, а гиперссылка “лучшая цена продажи” выберет самую актуальную цену на данный момент. Затем останется только нажать кнопку “купить голос”. - -* В таблице “продать голос” всё тоже самое, только наоборот. - -Ниже можно увидеть ещё две таблицы: **ЗАКАЗЫ НА ПОКУПКУ **и **ЗАКАЗЫ НА ПРОДАЖУ.** - -![](https://imgp.golos.io/0x0/https://s5.postimg.org/c6coqwkmv/заказы.jpg) - -* В первой - наиболее актуальные ордера на покупку Голоса за GBG -* Во второй - наиболее актуальные ордера на продажу Голоса за GBG - - Вы также можете выставить свой ордер и ожидать его исполнения с той ценой, которая, по вашему мнению/расчёту, может быть в ближайшее время или поставить ордер на долгий срок. - -### Ещё ниже большая таблица: **ИСТОРИЯ СДЕЛОК.** - -![](https://imgp.golos.io/0x0/https://s5.postimg.org/rdsob9chj/история.jpg) - -В ней можно увидеть список последних сделок на внутреннем рынке, а в табличке ещё ниже \(она обычно пустая\), могут быть Ваши ордера на покупку/продажу, если, конечно, вы выставляли ордера со своей ценой, а не предлагаемой рынком. Нужно отметить здесь, что при выставления цены рынка ордер срабатывает почти мгновенно, а при выставлении своей цены нужно ожидать.[ -![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://www.gitbook.com/book/cyberfund/golos/edit#) - -По материалам [статьи](https://www.gitbook.com/book/cyberfund/golos/edit#) \(автор [@liga.avtorov](https://www.gitbook.com/book/cyberfund/golos/edit#)\) - diff --git a/1-introduction/welcome.md b/1-introduction/welcome.md deleted file mode 100644 index 303b0890..00000000 --- a/1-introduction/welcome.md +++ /dev/null @@ -1,123 +0,0 @@ -# ➊ Начни отсюда - Что нужно знать в первую очередь - - - -### Добро пожаловать на платформу Голос! -Небольшое, но информативное руководство поможет Вам разобраться в платформе Голос. - -#### Что я найду в этом разделе? -Это информация для тех, кто делает здесь первые шаги. -Вы уже попадали в [раздел "Добро пожаловать"](https://golos.io/welcome) после регистрации, но скорее всего не успели его прочитать целиком. Настоятельно рекомендуем это сделать, прежде чем пользоваться платформой. - -#### Когда можно приступить к делу? -Заходим на сайт https://golos.io, регистрируемся (обязательно ЗАПИСЫВАЕМ и надежно сохраняем свой пароль!), и начинаем пользоваться! Начинать можно уже сейчас. - -#### Не теряйте свой пароль! -Регистрируясь на сайте, вы ознакомились с предупреждением хранить свой пароль в безопасности. -Пожалуйста, следуйте этому правилу. - -#### Какие главные секреты этой "кухни"? -Самый главный "секрет", это не гнаться за наградой. Публиковать только качественный и оригинальный контент. Не унывать, если что-то не нравится другим пользователям. Пробовать писать другой контент! - -Второй "секрет" - это общение. В разделе [Контакты](//kontakti.html) вы найдете всю информацию о том, как найти возможности для этого на медиаблокчейне Голос. - -#### Как относиться к плагиату? -Плагиат - это воровство чужого контента, такого как текст, фото, видео, музыка, рисунки, стихи и т.д. -Сообщество Голос высоко ценит оригинальный контент, поэтому используя чужой материал, Вы рискуете получить от сообщества негативную реакцию (и [флаги](#флаги-дизлайки)). -Мы не рекомендуем использовать чужой материал для публикации на Голосе. -При использовании чужих картинок мы рекомендуем всегда оставлять ссылку на источник картинки (также удостоверьтесь, что использованный Вами материал разрешен для публикации). - -#### Возьмут ли с меня деньги за пользование платформой Голос? -Нет! Публикация, чтение, комментирование и апвоуты (лайки) совершенно бесплатны. Более того, Голос помогает получить за них вознаграждение. - -#### Сколько я смогу тут заработать? -Мы не рекомендуем гнаться за прибылью. Помните, что это социальная площадка для общения с другими участниками и для публикации Вашего материала. Поэтому не ставьте перед собой цель заработать. Наслаждайтесь временем своего участия на платформе Голос. - -Подробнее: [Способы заработка](/1-introduction/zarabotok.md) - -### Что можно делать на платформе Голос? -#### Написание постов -Для того чтобы создать пост, нажмите на кнопку «Добавить пост» в верхнем правом углу экрана. Обратите внимание, что пост должен содержать: название, тэги (ключевые слова) и текст (который может включать в себя изображения, видео и другие медиаматериалы). - -Подробнее: [Публикация в блоге](//1-introduction/posting.md). - -#### Комментирование -Чтобы освоиться на платформе Голос, мы рекомендуем всем участникам комментировать как можно чаще. Высказывайтесь, делитесь своим мнением и находите интересных собеседников. - -Для создания комментария нажмите кнопку «Ответить» после текста поста или комментария. - -#### Апвоуты (лайки) -Чтобы «апнуть» (лайкнуть), чей-то пост или комментарий, нажмите на кнопку в виде стрелочки в кружочке: ![](/assets/upvote.jpg) . Она расположена под текстом поста или комментария. - -Своим апвоутом (лайком) Вы даете автору знать, что его контент Вам понравился, а система начисляет вознаграждение вам и автору поста / комментария. - -#### Флаги (дизлайки) -Флаг - это выражение отрицательного отношения другого пользователя к опубликованному Вами материалу или комментарию. - -Ставя флаг другому участнику платформы, Вы можете повлиять на потенциальное вознаграждение автора материала. Также флаг может уменьшить Вашу репутацию, если он поставлен участником с более высокой репутацией. - -#### Поделиться (реблог, репост) -Если Вы хотите поделиться чьим-то постом с Вашими подписчиками, нажмите на кнопку «Поделиться» в виде стрелки назад: ![](/assets/reblog.jpg). Она расположена под текстом поста. - -Этот пост появится в вашем блоге с обозначением "Поделился такой-то". - -#### Подписки / лента -Для того, чтобы подписаться на автора, нажмите на ник автора и в выпадающем окошке нажмите на кнопку «Подписаться». Также можно перейти на страницу его профиля и нажать кнопку «Подписаться» в правом верхнем углу. - -Материал авторов, на которых Вы подписались, появится у Вас в Ленте (там появляется только тот материал, который автор опубликовал уже после того, как Вы на него подписались). - -Со временем у Вас тоже появятся свои подписчики, если Вы будете принимать активное участие в жизни сообщества Голос. - -Подробнее: [Интерфейс блога](/1-introduction/interfeis-lichnogo-bloga.md) - -#### Какие монеты есть на Голосе? -В Голосе 3 вида "токенов" (монет): ГОЛОС, Сила Голоса и Золотой. - -а) ГОЛОС (или GOLOS) - это основная монета. Она используется, чтобы обозначить размер вознаграждения пользователей платформы Голос в удобной для них валюте. - -б) Сила Голоса (или СГ) - определяет "вес" Вашего голоса (как много / мало будет стоить Ваш "апвоут", лайк). - -с) Золотой (или GBG) - приравнивается к текущему курсу 1 мг золота на рынке драгоценных металлов, выраженному в токенах ГОЛОС. Именно это и есть Ваша награда за контент и за кураторство. -* GBG расшифровывается как Gold backed by GOLOS (Золотой, обеспеченный ГОЛОСами). - -#### Выплаты вознаграждения -Начиная с 4 апреля 2018 года (когда был принят хардфорк 0.17) - выплаты за посты/комменты происходят ровно через 7 дней после публикации. Раньше было два окна выплат: первое "окно" было плавающее - в течение 24 - 48 часов после публикации поста/коммента. И второе - через 30 дней. - -Автор делится с кураторами вознаграждением в соотношении примерно 75%/25%. - -Автору поста/коммента вознаграждение выплачивается 50%/50% в СГ (Силе Голоса) и Золотых (GBG). Куратору - полностью в СГ. -Автор также может отказаться от вознаграждения, выбрав соответствующую опцию при написании поста. -Также автор может выбрать опцию получить вознаграждение 100% в СГ (по умолчанию стоит 50%/50%). - -Подробнее: [Кошелек, ключи, выплаты](/1-introduction/koshelek-klyuchi-viplati.md). - -#### Ввод и вывод токенов -Заработанные токены ГОЛОС (GOLOS) и Золотой (GBG) Вы можете вывести на биржи: [Bittrex](https://bittrex.com/), [Livecoin](https://www.livecoin.net), [Kuna](https://kuna.io/), [OpenLedger](https://openledger.io/welcome). Доступен и обратный процесс получения токенов с Ваших аккаунтов на этих биржах. - -Также возможен обмен токенов ГОЛОС (GOLOS) на токены Золотой (GBG) и обратно [на внутреннем рынке](https://golos.io/market). - -### Навигация по сайту Golos.io - -#### Верхнее меню «Лента» -_Лента_ – Материал тех авторов, на которых вы подписаны - -_Новое_ – Новые посты, отсортированы по дате, от нового к старому - -_Актуальное_ – Актуальные посты на данный момент - -_Популярное_ – Самые популярные посты (за сегодня и за месяц) - -_Промо_ - Посты, продвигаемые за Золотые (GBG). - -#### Раздел «Профиль» -_Блог_ – Все ваши посты и реблоги - -_Комментарии_ – Все Ваши комментарии - -_Ответы_ – Ответы на Ваши комментарии - -_Кошелек_ – Ваши балансы токенов (Голос, Сила Голоса и Золотой). - - -Подробнее: [Интерфейс golos.io](/1-introduction/interfeis-golosio.md) \ No newline at end of file diff --git a/1-introduction/ya_zdes_vpervie.md b/1-introduction/ya_zdes_vpervie.md deleted file mode 100644 index f338716f..00000000 --- a/1-introduction/ya_zdes_vpervie.md +++ /dev/null @@ -1,155 +0,0 @@ -# Основы Голоса - - -### Голос -#### Что такое Голос? -Говоря простыми словами, Голос - это социальная платформа. То есть место для общения пользователей. -В Голосе Вы можете опубликовать свою статью о том, что Вы любите, можете поделиться своими фотографиями, а можете просто вести свой блог. - -Другими словами, Голос чем-то похож на смесь обычной социальной сети наподобие Фейсбука и более комплексной платформы для блогеров, наподобие Живого Журнала. - -В Голосе нет приоритета для тех или иных материалов, но чем лучше материал (далее - контент), который Вы публикуете тем больше шансов у Вас заработать... да-да, именно заработать! - -Вы можете посмотреть следующее короткое видео, но у Вас наверняка останутся вопросы, поэтому после просмотра, советую почитать дальше! -
    - -\{\%youtube\%\}8a0TPACOu2k\{\%endyoutube\%\} - -#### Что такое "форк"? -Перед тем как начнем двигаться дальше, важно упомянуть, что Голос - это форк Стима... ЧТО ЭТО?! -Ок, давайте по порядку. Стим или Стимит (www.steemit.com) - это социальная площадка (такая же, как Голос) для англоязычных пользователей. Голос же является её "форком"... - -Форк возник - не от "столовой вилки", а скорее от вилки шахматной (ну помните, когда в шахматах ход конем (или другой фигурой) атакует сразу две фигуры?). Проще говоря, Голос это некая копия Стима которую уже нельзя вернуть вспять. - -То есть у Голоса есть своя собственная сеть (об этом чуть позже), со своими собственными "валютами" и своим информационным потоком. Тем не менее, свои истоки он берет именно от стима. - -Советую проводить аналогию со словом "франшиза" - все инструменты одинаковые, а бизнес разный... - -#### Чем отличается Голос от других социальных площадок? -Итак, Вы, наверное, поняли, что Голос - это платформа (и еще это не столовый прибор) для размещения своего контента. - -В чем же отличие от других площадок? Первое отличие - это то, что, размещая свой контент на Голосе, Вы будете получать за него вознаграждение в виде... денег! Так же вы сможете вознаграждать других путем того что будете поддерживать их контент (лайкать его). Ну и третье основное отличие (хотя их еще много), это то что, размещая свой контен на Голосе, вы размещаете его на просторах интернета навсегда! Да, полностью удалить контент не сможет никто и никогда... - -#### Что такое децентрализация? -Теперь углубимся! Голос - это не просто социальная медиа платформа, она децентрализованная! Что это такое? - -Простыми словами, децентрализация - это когда отсутствует центральный орган управления. То есть это нечто, что управляется не одним человеком / командой / органом, а сразу многими. Эти "многие" не управляют «от балды», между ними есть консенсус (об этом ниже). - -Простой пример - положив свои деньги в банк, Вы доверяете банку (точнее руководству этого банка) ими управлять. То есть эти деньги, по сути, контролирует центральный орган управления банка. Это централизованная площадка. - -Допустим у Вас и еще у 100 человек есть свой колхоз (в котором Вы все явлеетесь владельцами). Прежде чем Вы, что то выращиваете, Вы это обсуждаете и принимаете 100% обоюдное решение о том что выращивать, почем продавать, где продавать и тд. Это децентрализация. - -Словами Википедии децентрализация это - "процесс перераспределения, рассеивания функций, сил, власти, людей или вещей от центрального местоположения или управляющего органа." - -#### Это легально? -Совершено! Так как процесс децентрализации площадки относится только к её управлению, а не к тому, что происходит в реальном мире, то право выбора управления остается за её владельцами (в случае децентрализации - всеми её пользователями, так как каждый является владельцем). - -Если Вам интересно почитать еще о философии децентрализации советую [вот эту статью](http://bankspravka.ru/bankovskiy-slovar/detsentralizatsiya.html) - -#### Кто придумал Голос? -За идеей проекта Голос стоит команда [Кибер Фонда](https://cyber.fund/) - это команда русскоязычных разработчиков управляющих несколькими крипто (об этом позже) фондами. - -#### Кто придумал Стим? -Стим придуман компанией Steem-ink, у руля которой стоит основатель Даниэль Лаример, также основатель проекта битшэрс (тоже криптовалюта, об этом ниже). - -#### Откуда берутся деньги? -Итак, переходим к самому интересному... Я уже упомянул, что в Голосе Вы можете получить вознаграждение за свой контент. Как это происходит? - -Сама сеть Голос (то, что вы видите это только "оболочка" сложной математической программы), "вырабатывается" и управляется путем решения сложных зашифрованных математических задач... (это несложно, прочитайте еще раз!) То есть, существует сеть компьютеров (серверов) которые, решая эти задачи, и вырабатывают так называемые "блоки" (об этом ниже). Эти блоки и есть награда, которая уже потом переводится на всеобщий доступный язык знакомых нам валют. - -Так вот... 66.66% от общей суммы наград за добытые блоки отдаются пользователем "оболочки" - то есть авторам контента и тем, кто его "лайкает" (далее - курирует). - -В свою очередь эти % распределяются между авторами и кураторами согласно тому, какой контент более популярен. - -Другими словами, одна статья, которая получила больше голосов (лайков / кураторства) других пользователей, становится более популярной и получит больше награды. - -Вознаграждение за контент делится 75/25, где 75% получает автор контента, а 25% делится между кураторами (теми, кто лайкал), согласно их СГ (Сила Голоса - об этом ниже). - -Стоит заметить что общая сумма вознаграждения всегда равна 66.66% от добытых "блоков" и независимо от того, кто за кого голосует, будет распределена между теми кто в этот день писал / курировал контент. - -#### Откуда у "блоков" ценность? -Ответ изумительно прост. Есть спрос и предложение... То есть участники рынка определяют, что у этих "блоков" (монет / токенов) стоимость равна Х, а у других У. - -#### Кто такие "майнеры" и "делегаты"? -Кто же стоит за сетью и делает так, чтобы она работала? За сетью стоит команда делегатов или еще проще - заверителей, которая избирается путем голосования на сайте Голоса (или в самой сети) всеми её участниками (кстати, этот децентрализованный метод управления называется ДПОС, он считается гораздо лучше, безопасней и быстрее, чем метод без делегатов). - -Заверители просто напросто заверяют (подтверждают) блоки в сети, путем решения математического кода (точнее это делает за них компьютер, иначе Вы бы долго ждали свою награду). И эти блоки составляют единую цепь (уже почти о блоках...). - -Шахтеры (от Английского "miner") которых не следует так называть (лучше майнеры), это копатели / «добыватели» тех же блоков, тем же решением того же кода. В других децентрализованных формах управления они и добывают основную часть награды. Тут же основная часть приходится на делегатов (заверителей блоков). - -#### Что такое "цепочка блоков"? -Ну, вот, наконец, и о блоках! - -Что же все это значит? Сеть? Цепь? Блоки? Код? Все это называется технологией цепочки блоков (blockchain). Очень простыми словами, это, блоки (каждый состоит из кода и кодом связан с другими блоками), которые формируют единую цепочку. - -Каждый блок (звено цепочки) подходит только к предыдущему (кроме первого, у которого нет начала). Другими словами в каждом блоке есть очень (ну прям очень) сложное уравнение и чтобы его решить нужно обязательно решить предыдущее уравнение, тем самым совершив привязку этих уравнений (ну или звеньев цепочки). - -Не бывает такого, чтобы к одному блоку подходило два разных блока, что и гарантирует единую неприкасаемую цепочку. А точнее, "заверители" блоков (делегаты), как раз и занимаются тем, что гарантируют то, чтобы никто не подменил код в этих уравнениях, тем самым гарантируя правильную цепочку для всех, и отсутсвие различных ветвей у цепочек. - -Думаю теперь вы уже готовы к этому видео (5 минут): -
    - -\{\%youtube\%\}TRtHhXOte0o\{\%endyoutube\%\} - -#### Что такое криптовалюта? -Криптовалюта - это валюта, которая эмитируется технологией блокчейн (описано выше) и является децентрализованной. - -Обычно такие валюты торгуются на биржах в интернете или напрямую p2p (то есть без посредников) по соотношению к другим таким валютам или к тем, к которым мы все привыкли ("фиатным" валютам: доллар, рубль, евро и тд). Обычно все криптовалюты ориентируются на цену биткоина (можно провести аналогию с ценой на золото). - -В Голосе криптовалютой является «токен» (монета) которая называется... Голос (не ожидали, так ведь?). Именно её цена определяет размер ежедневного "банка наград" (помните про 66.66%, которые выделяет сеть на выплаты за контент?) по отношению к привычной Вам валюте (чуть ниже подробнее). - -#### Деньги настоящие? -При условии, что для Вас настоящие деньги это (допустим) доллар США, то после простого обмена вашей награды за контент или курирование на биткоин и далее на доллары США (на бирже), вы станете счастливым обладателем "настоящих" денег, которые можно использовать в повседневной жизни. - -#### Кто оплачивает "банкет"? -Можно сказать, что делегаты / заверители (смотрите выше), так как именно благодаря работе их компьютеров (серверов) и получается награда, из которой 66.66% выделяется на оплату "банкета" - -#### Что за цифры под статьей? -Это та сумма (в той валюте, в которой Вы выбрали, чтобы отображалась информация на сайте) которую Вы потенциально можете получить после истечения первых 24 часов с момента написания статьи. - -Стоит заметить, что, когда Ваша статья нравится кому-то другому в то время, когда уже подходит выплата, время может быть продлено. - -(За свой контент автор получает выплату два раза: первый (основной) раз после 24 часов. И второй раз, (в случае если по истечении 24 часов контент будет "лайкнут" другими кураторами) по истечении 30 дней. - -Также выплата является потенциальной по двум причинам: -а) человеку может разонравиться Ваша статья -б) курс Голоса по отношению к биткоину может измениться - -#### Как получить мои деньги? -Получить свои "кровные" довольно просто. - -После того, как вам будет начислена награда, Вы можете это сделать, зайдя во вкладку "кошелек", где увидите свои балансы трех «токенов» (об этом ниже). Вам нужен "токен" Золотой. Нажимаем на стрелку справа от суммы и кнопку "передать". Далее заполняем графу "кому" (биржа получатель), "количество" (с каким не жалко расстаться), "заметка" (часто биржи требуют специальную заметку, берется с биржи) и нажимаем передать. Вводим свой пароль. - -На бирже Вы обмениваете монеты на биткоин, и далее на удобную для Вас валюту. После чего биржа предложит несколько способов вывода. Выбираем тот, который Вам удобнее всего и "вуаля" - денежки Ваши. - -#### Как "голосовать"? -Голосовать за контент Вы можете путем нажатия на стрелочку в круге, справа от суммы (может быть 0) внизу статьи. - -В случае когда у Вас более Х кол-ва СГ (Сила Голоса) Вам будет доступна опция "ползунок" или "шкала" - вы сможете регулировать Ваш Голос в размере от 1% - 100%. Помните что в день можно голосовать, сколько угодно, но с каждым голосом Сила Голоса будет становиться меньше (соответственно, Ваш "лайк" будет стоить меньше). Но не волнуйтесь, Сила Голоса так же постоянно восстанавливается. - -#### Что такое Сила Голоса и другие «токены»? -В Голосе 3 вида "токенов" (монет). Голос, Сила Голоса и Золотой. - -а) Голос - это, как уже упоминалось выше, основная монета. Она используется, чтобы определить стоимость Золотого и размер Вашей награды в удобной для Вас валюте. - -б) Сила Голоса - определяет "вес" Вашего голоса (как много / мало будет стоить Ваш "лайк") - -с) Золотой - на сайте выражен в удобной для Вас валюте (можно её выбрать во вкладке "кошелек" в настройках). Приравнивается к курсу 1мг золота на рынке (правда не на овощном, а на рынке драгоценных металлов по текущему курсу). Именно это и есть Ваша награда за контент и за кураторство. - -#### Когда можно приступить к делу? -Заходим на сайт www.golos.io , регистрируемся (ЗАПИСЫВАЕМ свой 32-значный пароль!), и начинаем пользоваться! Начинать можно уже сейчас. - -#### Какие главные секреты этой "кухни"? -Самый главный "секрет", это не гнаться за наградой! Публиковать только качественный и оригинальный контент. Не унывать если что-то не нравится другим пользователям. Пробовать писать другой контент! - -Второй "секрет" - это общение! Заходите в чат - https://chat.golos.io , регистрируйтесь в группах [Фейсбук](https://www.facebook.com/rgolos), [Вконтакте](https://vk.com/rgolos), [Телеграм](https://telegram.me/golos_io) и т.д. - -#### Что еще мне надо знать? -"Токены" Силы Голоса можно обменять на "токен" Голос, делается это из Вашего кошелька, путем нажатия клавиши "Уменьшить силу Голоса" - далее сумма вашей Силы Голоса будет начисляться Вам в кошелек в виде "токена" Голос 1(1) раз в неделю в 20 равных частях. То есть Вы будете получать её 20 недель. - -Уменьшать свою Силу Голоса крайне не рекомендуется, так как её стоимость защищена от рыночных спекуляций (читайте подробней про экономику Голоса в [ЧАВО](/1-introduction/faq.html) и в других частях Вики). - -"Токен" Голос, так же можно вывести на биржу и обменять на биткоин и / или другие валюты. - -#### У меня остались вопросы, как с Вами связаться? -Вы всегда можете найти нас в рокет чате - https://chat.golos.io diff --git a/1-introduction/zapolnenie-profilya.md b/1-introduction/zapolnenie-profilya.md deleted file mode 100644 index 5057dbf3..00000000 --- a/1-introduction/zapolnenie-profilya.md +++ /dev/null @@ -1,76 +0,0 @@ -

    Заполнение профиля

    - -Автор: @liga.avtorov / редактирование и обновление статьи - @aleos. - -

    Для эффективной работы на платформе Голос необходимо понимание хотя бы сути основ ее устройства. Стоит вникнуть в основные моменты, отличающие Голос от других социальных сетей.

    -

    -

    Итак, Голос - это социальная децентрализованная медиаплатформа. Что значит “децентрализованная”? Это платформа, управляемая и поддерживаемая не одним человеком/командой/органом, а сразу многими. То есть, отсутствует центральный орган управления. Соответственно, ни один человек не сможет закрыть вам доступ к вашему аккаунту ни по какой причине.

    -

    Социальная платформа - место для публикации контента пользователей, их общения и обмена мнениями.

    -

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

    -

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

    -

    Уважаемые авторы, помните - размещая свой контент на платформе Голос, вы размещаете его в блокчейне навсегда! Поэтому относитесь ответственно к своим публикациям.

    -

    Итак, начнем с самого простого и очень важного.

    -

    РЕГИСТРАЦИЯ

    -

    Вы зарегистрировались на платформе. Пожалуйста, отнеситесь внимательно к хранению ключей. Их очень сложно восстановить. Были случаи, когда людям приходилось заводить второй аккаунт. Вот полезная статья от @phenom на тему восстановления пароля и всех сложностях этой процедуры.

    -


    -
      -
    1. НАСТРОЙКА - ЗАПОЛНЕНИЕ ПРОФИЛЯ
    2. -
    -

    Внимательно и подробно заполните свои персональные данные. К своему профилю перейдите со страницы вашего персонального блога, нажав самую правую, последнюю вкладку “Настройки”.

    -

    -

    Многие пользователи заполняют профиль быстро, почти не задумываясь, а зря. Это ваша визитная карточка. Конечно, в будущем вы сможете её поменять, но все же лучше подойти к делу с самого начала обстоятельно. Здесь есть несколько нюансов.

    -

    Ссылку для Аватара можно получить на любом фотохостинге, например загрузить фото на сервис https://postimage.io и вставить URL-адрес в поле. Или можно взять ссылку на фото в уже имеющихся социальных сетях.

    -

    Принципы выбора аватарки:

    - -

    - -

    - -


    -Ниже выбора аватарки есть поле и для выбора обложки: "Вставьте ссылку на изображение или загрузите его". Изображение для обложки должно быть широкое, примерно таких размеров - 1400х150 pix. -
    -

    При заполнении строк “Отображаемое имя” тоже есть варианты:

    - -

    - -

    -


    -Строка "Пол" - тут всё понятно: по умолчанию стоит "Неизвестен", но можно выбрать "Мужской" или "Женский". -

    В строке “Информация о вашем блоге” разместите самую суть вашей будущей деятельности на платформе - ёмко, броско, индивидуально. Это представление вашего блога, по этому тексту с вами будут знакомиться - и оценивать, стоит подписываться или нет.

    - -
    Совет: Просмотрите описания блогов других пользователей. Вы наверняка увидите повторяющиеся “рассказы о путешествиях, о жизни”, “размышления о смысле жизни”, “философские размышления о жизни” и подобное. Постарайтесь найти свои уникальные слова для отражения своей тематики или мысли.
    -


    -

    -

    С позицией “Местоположение” сложностей не возникает.
    -Эта позиция поможет найти вас землякам-единомышленникам и завести новых оффлайн друзей. Не пренебрегайте этим пунктом.

    -

    Если блог анонимный или вы не хотите рассказывать людям, где живете, можете написать там что угодно - хоть Альфа Центавра. Только учтите, что и читатели могут начать относиться к вам, как к пришельцу. Может быть, это вам и нужно? :)

    -

    Строка “Веб-сайт” предполагает размещение ссылки на ваш личный ресурс или группу в соцсетях. Выбирайте наиболее значимую для себя группу (по вашим критериям значимости), перейдя в которую читатели смогут получить дополнительную информацию о вас. Если такой странички нет, оставляйте это поле пустым.

    -

    Самая нижняя строка “Настройки отображения приватных постов” (Контент для взрослых) предлагает вам на выбор три позиции:

    - -Скриншот: -![priv.png](https://images.golos.io/DQmekbQ74n9jduZN4m7RNqxHNpbUNnQcA7GBM5HqjC7MAhz/priv.png) -
    -Резюме -
    Итак, мы закончили с профилем. Сделали немного, но качественно. И это хорошо. Уважаемые новички! Если вы заполнили свой профиль до того, как прочитали эту статью, пожалуйста, не пожалейте времени, вернитесь в настройки и еще раз подумайте о том, как ваша “визитная карточка” работает на ваш образ и, в целом, на ваш блог. Желаем вам уникальных решений!
    - -
    [![](https://imgp.golos.io/120x120/https://s19.postimg.org/f940iiuab/image.jpg)](https://golos.io/@liga.avtorov) -По материалам [статьи](https://golos.io/ru--golos/@liga.avtorov/pervyi-shag-na-golose-znakomstvo-i-nastroika-profilya) (автор [@liga.avtorov](https://golos.io/@liga.avtorov)) -
    diff --git a/1-introduction/zarabotok.md b/1-introduction/zarabotok.md deleted file mode 100644 index 1940454e..00000000 --- a/1-introduction/zarabotok.md +++ /dev/null @@ -1,145 +0,0 @@ -

    💰 Способы заработка на криптовалютах

    -
    По материалам [статьи](https://golos.io/ru--kriptovalyuty/@muxacr/kak-zarabotat-na-kriptovalyutakh-obzor-aktualnykh-sposobov-pervye-shagi-dlya-nachinayushikh) @muxacr. -Отражает авторскую точку зрения. Не является рекомендацией.
    -

    На рынке криптовалют можно выделить 5 основных видов заработка:

    -
      -
    1. Трейдинг
    2. -
    3. ICO
    4. -
    5. Майнинг
    6. -
    7. Долевое участие
    8. -
    9. Разработка своего проекта на блокчейн
    10. -
    -

    1. Трейдинг

    -

    Порог входа: 100$ (рекомендуется 500$)
    -Доходность: не ограничена
    -Риск: высокий

    -

    Трейдинг криптовалютами на биржах - самый распространенный способ начать зарабатывать. Относительно невысокий порог входа и быстрый старт может обеспечить стабильный доход. Можно начать торговать хоть с 1$, но следует понимать, что чем больше суммой вы играете на бирже - тем больше маржа. Поэтому рекомендую начать хотя бы со 100$.

    -

    В трейдинге выделяют 2 главные стратегии:
    -а) активный трейдинг (или дневной трейдинг) - это непосредственно ежедневная торговля на биржах: быстро купил - быстро продал, прибыль в карман. Торговля на короткие позиции с надеждой на быстрый рост криптовалюты в моменте.

    -

    Плюсы активного трейдинга:

    - -

    Минусы:

    - -

    б) пассивный трейдинг (или инвест трейдинг) - это покупка криптовалюты надолго, 1-3 месяца и ожидание роста. Вы выбираете проект, изучаете как можно больше информации и инвестируете. Если проект стоящий, то цена на его токены за 3 месяца может дать рост выше 300%. Риск в этом случае намного меньше, чем при активном трейдинге.

    -

    Плюсы:

    - -

    Минусы:

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

    Поэтому в первую очередь следует определиться с самым главным вопросом "В какую криптовалюту вкладываться, чтобы заработать?"
    -Что ж, однозначного ответа ни у кого нет, но все сходятся в одном: для первого раза инвестируйте в надёжные криптовалюты. На данный момент наиболее надёжными считаются Биткоин и Эфириум.

    -

    Таким образом, для старта я рекомендую определиться с суммой денег, которые вы готовы инвестировать, и купить на них Биткоин и Эфириум в пропорциях 50/50. Этот шаг снизит ваши риски, разделив их между 2 криптовалютами.

    -

    ------------------------------------

    -

    5 шагов для начинающих для старта заработка на трейдинге криптовалютой:

    -
      -
    1. Зарегистрируйте аккаунт на одной из бирж (список бирж можно посмотреть здесь)
    2. -
    3. Пополните счёт на бирже (проще всего купить биткоины и отправить их на свой биткоин-счёт на бирже)
    4. -
    5. Поменяйте половину биткоинов на эфириум, остальные оставьте в биткоинах
    6. -
    7. Изучайте рынок, ищите информацию об интересных вам проектах, общайтесь с разработчиками
    8. -
    9. Расширяйте свой портфель - вкладывайтесь только в проверенные лично вами проекты!
    10. -
    -

    ------------------------------------

    -

    2. ICO

    -

    Порог входа: любой
    -Доходность: не ограничена
    -Риск: невысокий

    -

    ICO (Initial Coin Offering) - новый вид краудфандинга (по другому еще называют краудсейл), который появился на свет вместе с развитием рынка криптовалют. Принцип простой - вы вкладываете средства в проект, а взамен получаете криптовалюту этого проекта по самой минимальной цене.

    -

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

    -

    Участвовать в ICO может любой желающий - для этого требуется всего лишь зарегистрироваться в панели краудсейл и отправить средства в удобной криптовалюте. После прохождения краудсейла вы получите свои новые токены.

    -

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

    -

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

    -

    Доходность в 1000% (рост в 10 раз) после ICO - это уже обычное явление в криптомире. Некоторые инвесторы даже начинают "расстраиваться", что рост составил 5x, а не 10x, как они рассчитывали.
    -При участии в ICO вы получаете токены по "себестоимости", а после их запуска на биржу - цена просто уходит в космос.

    -

    Сервис ICO Alert помогает быть в курсе прошедших, текущих и будущих ICO. Выбирайте проект, изучайте и участвуйте!

    -

    Плюсы:

    - -

    Минусы:

    - -

    ----------------------------------------

    -

    3. Майнинг

    -

    Порог входа: 50 000 руб.
    -Доходность: 30-40% в месяц
    -Риск: невысокий

    -

    Майнинг - это предоставление вычислительных мощностей за вознаграждение. Грубо говоря, вы подключаетесь к сети и ваш компьютер обрабатывает данные для этой сети, получая взамен криптовалюту этой сети в качестве вознаграждения.
    -Этот вид криптодобычи используется криптовалютами с технологией PoW (Proof of Work - доказательство работы)

    -

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

    -

    Майнинг бывает 3-х видов:

    -

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

    -

    2) GPU майнинг - это использование графического процессора для обработки данных. Это самый распространенный вид майнига. Для этого собирается целая "ферма" (системный блок или просто каркас) с несколькими видеокартами. Как правило, используют 4 и более видеокарты на 1 ферме.
    -В среднем с одной фермы из 4-х хороших видеокарт заработок получается в районе 1000 руб. в день.

    -

    Для более точных данных для расчёта производительности майнинга воспользуйтесь калькулятором от Nicehash.

    -

    3) HDD майнинг - это использование дискового пространства для обработки данных. Некоторые криптовалюты устроены по такому принципу, что для поддержания их работоспособности требуется не вычислительная мощность, а дисковое пространство. Примеры таких криптовалют - Burst, Storj. Это интересная альтернатива GPU майнингу, так как не требуется мощного железа, нужно больше терабайтов. Например, при предоставлении 60TB - доход составит 12$ в день (или порядка 600 руб./день).

    -

    Для расчёта прибыли HDD майнинга воспользуйтесь калькулятором от Burst

    -

    Плюсы:

    - -

    Минусы:

    - -

    --------------------------------------------------------------

    -

    4. Долевое участие (или голосование)

    -

    Порог входа: от 100$
    -Доходность: 10-20% в месяц
    -Риск: невысокий

    -

    Голосование (или Proof of Stake - доказательство ставкой) - это такой вид участия в сети блокчейн, где вы "ставите" в залог свои средства, а взамен получаете некоторую долю от работы системы.

    -Дополнительной разновидностью является голосование за делегатов системы (Delegated Proof of Stake). На таком принципе Proof of Stake построен блокчейн Голоса в том числе, а также проекты Bitshares, Lisk и другие.

    -

    Если не вникать глубоко в подробности, то суть голосования для PoS в том, что вы даёте системе определенную сумму своих средств, которые используются как ставка для подтверждения блоков в блокчейне. И если вы навредите системе, то вы лишаетесь ставки. А за использование ваших средств как залог - сеть вам начисляет вознаграждение. Если сравнить с майнингом, то в случае с PoS вы получаете вознаграждение за "честность".

    -

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

    -

    Пусть этот вариант и кажется несколько мудрёным, но у него есть очень важные плюсы

    -

    Плюсы:

    - -

    Минусы:

    - -

    -------------------------------------------

    -

    5. Разработка своего блокчейн-проекта и выпуск криптовалюты

    -

    Порог входа: от 10000$
    -Доходность: аццкая доходность
    -Риск: высокий

    -

    Самым прибыльным вариантом заработка на криптовалюте - это создать свою криптовалюту. Для этого требуются немалые ресурсы: штат сотрудников, бюджет.

    -

    Разработать свой проект и запустить ICO - это то, что сейчас и происходит по всему миру.
    -Конечно этот вариант требует очень больших инвестиций и ресурсов, но и результат того стоит.

    -

    Основная сложность - это найти команду разработчиков. Затем найти первоначальные инвестиции. А дальше ещё и организовать работу, чтобы процесс разработки завершился успехом.

    -

    Плюсы:

    - -

    Минусы:

    - -

    ----------------------------

    -

    Итак, в качестве итога:

    -
    Для новичков - рекомендую начать с пассивного трейдинга. И плотно погрузиться в изучение материала про криптовалюты и знакомство с различными проектами перед тем как вложить куда то свои деньги.
    -

    НЕ ВКЛАДЫВАЙТЕ БОЛЬШЕ, ЧЕМ ГОТОВЫ ПОТЕРЯТЬ!!!

    -

    Инвестиции в криптовалюту по-прежнему считаются высокорискованным предприятием.

    -

    Выбирайте вариант, который подойдет вам больше всего. Можно конечно в дальнейшем совмещать все 5 способов, никто не мешает. Но как говорится - за двумя зайцами погонишься....

    - -
    По материалам [статьи](https://golos.io/ru--kriptovalyuty/@muxacr/kak-zarabotat-na-kriptovalyutakh-obzor-aktualnykh-sposobov-pervye-shagi-dlya-nachinayushikh) @muxacr.
    diff --git a/2-rewards/commitment_rewards.md b/2-rewards/commitment_rewards.md deleted file mode 100644 index ac7e5b35..00000000 --- a/2-rewards/commitment_rewards.md +++ /dev/null @@ -1,21 +0,0 @@ -# Инвестирование -#### Вознаграждение за долгосрочное инвестирование -_Голос вознаграждает тех, кто остается с ним надолго_ - -ГОЛОС – это токен социальной сети, который является базовой единицей расчета в системе. Пользователям необходимо иметь ГОЛОСа, чтобы осуществлять транзакции в сети и голосовать за посты. Пользователи, которые пользуются Голосом в течение года или нескольких лет, получают проценты на сохраненные в сети средства и не размывают свой капитал. - -#### Сообщество Голоса -Мотивированное сообщество является основой стабильной валюты платформы. Голос представляет собой систему, в которой экономически поощряется заморозка Силы ГОЛОСа. - -Пользователи обязаны иметь Силу ГОЛОСа для того, чтобы проводить транзакции и голосовать. - -#### Начисление процентов -В любой момент, когда менее, чем 26.66% ГОЛОСов являются отложенными, в системе осуществляется перевод ликвидных ГОЛОСов в отложенные ГОЛОСа (в Силу ГОЛОСа) за счет процентных выплат. При прочих равных условиях любое отклонение от целевого значения в 26.66% замороженных ГОЛОСов будет скорректировано примерно на 50% в течение года за счет процентных платежей. Проценты выплачиваются за счет эмиссии новых ГОЛОСов. Соответственно, у держателей учетных записей, у которых есть ликвидные ГОЛОСа, балансы не уменьшаются. - -#### Отсутствие размывания -В дополнение к тому, что на Силу ГОЛОСа начисляются проценты, отложенные ГОЛОСа также защищены от размывания в любой момент, когда менее 26.66% ГОЛОСов заморожено. В то время как количество ГОЛОСов может постоянно увеличиваться, процент ГОЛОСов, находящихся у держателей Силы ГОЛОСа, остается неизменным или увеличивается. - -Таким образом, с учетом растущей рыночной капитализации, сумма на счетах пользователей – держателей Силы ГОЛОСа будет увеличиваться до тех пор, пока более 26.66% всех ГОЛОСов не отложены. - -**Примечание**: 1 Сила ГОЛОСа = 1 млн отложенных ГОЛОСов. При переводе в Силу ГОЛОСа более 26.66% ГОЛОСов, процентная ставка по Силе ГОЛОСа является отрицательной, скорректированной на уровень инфляции. - diff --git a/2-rewards/curation_rewards.md b/2-rewards/curation_rewards.md deleted file mode 100644 index 35d8dfd2..00000000 --- a/2-rewards/curation_rewards.md +++ /dev/null @@ -1,61 +0,0 @@ - -# Курирование -```Голосование за и против публикаций и комментариев``` - - - -## Как голосовать -#### Руководство по голосованию -_Цель Голоса - стать платформой для обсуждения качественного контента._ - -Пользователи, которые голосуют в соответствии с этим руководством, смогут максимизировать ценность платформы и своих ГОЛОСов. - -Нижеприведенное определение качественного контента заимствовано у `hubski.com`. - -Лучшие ответы – это ответы, которые порождают вдумчивую цивилизованную беседу. Вы не должны соглашаться с другими, но требуется уважать чужое мнение. Качественные ответы не те, что отражают общее мнение, а те, которые хорошо аргументированы. - -Если вы что-то утверждаете, постарайтесь подкреплять утверждение фактами и приводить аргументы. - -В дополнение к определению того, какой контент является желательным, хорошо дать определение нежелательного контента. Любые материалы, которые соответствуют одному или нескольким из следующих критериев (заимствовано с reddit.com), должны **минусоваться**: - -- содержание, небезопасное для работы -- призывы или подстрекательство к насилию -- угрозы, оскорбления или подстрекательство к таковым -- распространение о ком-то лживой информации -- спам -- ссылки на вирусы и вредоносные программы -- комментарии, неправильно классифицированные или не имеющие отношения к теме. - -Общим правилом должно быть голосование пользователей за контент, который привносит что-то в дискуссию. -Иногда это означает голосование за высказывания, с которыми вы лично несогласны. Сообщество, которое попадает в западню под названием мнение большинства, теряет свою ценность. Соответственно, в интересах каждого голосовать исходя из целей поддержания качественной дискуссии. - -#### Вознаграждение за кураторство -Получай ГОЛОСа, будучи среди первых, кто голосует за популярный контент - -Пользователи могут проголосовать за каждый пост, размещенный на Голосе. Голосование помогает другим определить качественный контент, на который стоит обратить внимание и который может представлять ценность для платформы. Мы понимаем, что прочтение нового размещенного материала – это работа, которая заслуживает вознаграждения. - -#### Кураторство на Голосе. Как это работает? -От чего зависит кураторское вознаграждение: - -1. От количества имеющейся у вас Силы Голоса. -2. От времени голосования за пост. -3. От количества уже проголосовавших, а, главное, от количества уже набранного вознаграждения за пост (это незначительно действует, если вы кит Голоса). - -Материал взят [отсюда](https://golos.io/ru--golos/@haster100/kuratorstvo-na-golose-kak-eto-rabotaet-sait-golos-steemstats-com) -`Сервис golos.steemstats.com после 17 хардфорка блокчейна Голос не функционирует.` - -#### Голосование за посты -Пользователи с Силой Голоса имеют возможность голосовать за посты. Сила голоса каждого пользователя ограничена по частоте использования и уменьшается с каждым отданным голосом на величину до 5%. Ваша способность влиять на вознаграждение зависит от количества Силы Голоса, которое есть у аккаунта. - -#### Механика процесса -Каждый раз, когда пост получает вознаграждение, до 25% вознаграждения направляется тем, кто внёс наибольший вклад в увеличение общей суммы вознаграждения. Для максимизации собственного вознаграждения рекомендуется следовать следующим правилам: - -- Голосовать как можно раньше после публикации -- Не голосовать за контент, который уже пользуется популярностью -- Стремиться приобрести как можно больше Силы ГОЛОСА. Чем меньше Силы ГОЛОСА у вас имеется, тем важнее для вас сосредоточится на поддержке нескольких важных и интересных для вас постов, вместо голосования за множество постов. В частности, пользователям с небольшими количествами (отложенного) ГОЛОСА рекомендуется голосовать за контент, за который еще не голосовали - -#### Проблемы с вознаграждением за голосование -Выражение – «получаешь то, за что голосуешь» - никогда не было так актуально как в случае с ГОЛОСОМ. В случае с ГОЛОСОМ надо внимательно относиться к тому, за что вы голосуете. - -Если бы ГОЛОС просто вознаграждал голосование, то технически подкованные пользователи сразу бы стали голосовать за все подряд для максимизации своего результата. Такое поведение отрицательно отразилось бы на развитии платформы, так как повлияло бы отрицательно на качество контента. Алгоритм вознаграждения должен обеспечивать распределение вознаграждения за размещение, прочтение и обсуждение качественной информации, препятствуя автоматизации процесса голосования. - diff --git a/2-rewards/delegatstvo.md b/2-rewards/delegatstvo.md deleted file mode 100644 index 510e58c2..00000000 --- a/2-rewards/delegatstvo.md +++ /dev/null @@ -1,28 +0,0 @@ -# Делегатство - -#### Делегаты и их роль на платформе Голос - -Термин Делегат \(который применяется в Голосе\) более полноценно отражает суть данной должности, так как сообщество делегирует некоторым его членам определенные права. - -Алгоритм DPOS \(делегированное доказательство доли\) был предложен Даниэлем Ларимером и впервые был применен в Bitshares. - -В его основе лежит голосование, наделяющее пользователей имеющих определенный уровень репутации в сообществе и получивших определенное количество \(вес\) голосов, некоторыми правами \(а если быть точным, то скорее обязанностями\). Данные пользователи \(Делегаты\) используя своё \(арендованное\) оборудование обеспечивают функционирование узлов \(нод\) сети, создают и подписывают новые блоки, обеспечивая безопасность сети. - -В Голосе как и в Стиме используется смешанный консенсус DPOS \(Delegated Proof of Stake\) + POW. - -За один раунд создается 21 блок, с интервалом около 3 секунд. **Топ 19** делегатов из общего списка \(набравшие в сумме наибольший вес голосов за свои кандидатуры\) производят блок в каждом раунде, еще один блок производит делегат, не попавший в топ 19, причем вероятность того, что он произведет блок пропорциональна весу голосов отданных за него \(и соответственно его позиции в листинге\), в сравнении с другими делегатами, не вошедшими в топ. И последний \(21-й\) блок в раунде производит POW - майнер в соответствии с очередью. - -Однако в Голосе задача делегатов не ограничивается одним лишь подписанием блоков. Одной из важнейших задач делегатов является публикация ценовых фидов \(price feed\) \(курс токенов GOLOS в Золотых \(GBG\)\). При этом они напрямую заинтересованы в выставлении корректной стоимости, \(которая в свою очередь регулируется рынком\), ведь получая вознаграждение в виде Силы Голоса они будут нести потери при публикации недостоверных цен. С учетом того, что ценовые фиды устанавливаются делегатами, которые были избраны сообществом, текущая цена, используемая для конверсии является медианным значением выборки ценовых фидов. Из этого следует, что делегаты, имеющие существенное отклонение от медианного значения имеют в свою очередь минимальное влияние на цену конверсии, однако могут терять свою репутацию в сообществе. Кроме того, делегаты устанавливают минимальную комиссию в GP \(Сила Голоса\) за создание аккаунта, и процентную ставку доходности Золотого \(GBG\), а также принимают/либо отклоняют новые релизы сети. - -Делегаты получают за свою работу награду _примерно_ 0.14 GP \(Сила Голоса\) с каждого произведенного блока, что мотивирует их поддерживать и развивать сеть в долгосрочной перспективе. \(Следует иметь в виду, что 0.14 GP - это примерная цифра, которая корректна на момент написания этой статьи - конец августа 2017 г. - и с ростом денежной массы эта цифра падает\). Также делегаты могут использовать часть полученной награды для развития сети и поддержания важных инициатив и сервисов, что позволяет им получить еще большее доверие от сообщества. Таким образом, у делегатов имеются серьёзные стимулы не только обеспечивать стабильное функционирование сети, но и обеспечивать развитие сети и ее сообщества. Благодаря данному консенсусу делегаты могут выполнять ряд важных обязанностей, для выполнения которых обычным кампаниям пришлось бы нанимать персонал. - -Одним из важных преимуществ данной системы – является то, что с её помощью все держатели Силы Голоса являются одновременно акционерами платформы, и могут через доверенных лиц \(делегатов\) принимать участие в принятии различных важных для платформы решений. Активное развитие платформ Стима, а теперь и Голоса подтверждают, что данный алгоритм определенно имеет большое будущее, в том числе для развития децентрализованных платформ. - -Для безопасности и устойчивой работы сети они должны держать свои ноды в рабочем состоянии 24 часа в сутки, 7 дней в неделю, 365 дней в году, как минимум 50 лет =\)\), а после завещать внукам. - -Хотя в принципе, даже если делегат пропускает блок, ничего страшного для сети не произойдет, блок следующего делегата будет содержать пропущенную транзакцию, а время подтверждения составит 6 секунд вместо трех. Вместе с тем, поскольку вся работа делегатов \(в том числе подписание блоков\) публична, их пассивность либо значительное количество пропущенных блоков может быть причиной для их замены на более активных делегатов путем голосования сообщества. Причём, кроме должности делегата пользователь рискует потерять так же свою репутацию в сообществе. В любом случае существенно навредить сети даже будучи плохим делегатом вряд ли получится. - -Система голосования встроена в Веб-клиент Голоса, и каждый держатель доли \*GESTS выраженной в виде Силы Голоса имеет 30 голосов, с помощью которых он может голосовать за делегатов \(при необходимости голос всегда можно снять\). - -Информация взята [отсюда](https://golos.io/ru--golos/@on0tole/delegaty-i-ikh-rol-na-platforme-golos) - diff --git a/2-rewards/mining_rewards.md b/2-rewards/mining_rewards.md deleted file mode 100644 index 0e996cb6..00000000 --- a/2-rewards/mining_rewards.md +++ /dev/null @@ -1,81 +0,0 @@ -# Майнинг - -#### Вознаграждение за майнинг - -_Получай токены Голоса, присоединившись к пиринговой сети и подтверждая транзакции._ - -Каждый, у кого есть высокоскоростной доступ в Интернет и некоторые навыки по настройке серверов, может зарабатывать, обеспечивая производство блоков сети. Голос использует такой алгоритм майнинга, который исключает вознаграждение майнинга на полных нодах \(узлах\) с низкой задержкой подключения к остальной части сети. - -#### Ежегодное вознаграждение майнерам составляет 1% от рыночной капитализации - -_Голос выплачивает майнерам ежегодно 1% от своей рыночной капитализации._ - -В системе 6.66% от вознаграждения, предназначенного майнерам, равномерно распределяется между лучшими 19 майнинговыми пулами путем голосования через механизм «доказательства работы» \(proof of work\). При этом в сети гарантируется, что каждому пулу предоставляется только один слот для производства блока в каждом раунде. При этом каждый раунд состоит из 21 блока производимых равномерно каждые 3 секунды. Если ни один из майнеров не пропускает своего слота, то каждый из 21 блоков будет произведен уникальным майнером. - -Вознаграждение за майнинг выплачивается в виде Силы Голоса, которая может быть преобразована в токены Голоса еженедельно в течение 13 недель равномерными частями. - -#### Доказательство работы \(proof of work\) - -Сеть выигрывает от использования механизма «доказательство работы», то есть майнинга, но не страдает от недостатков последнего, таких как непредсказуемое время на производство блока, укрупнение и централизация майнинговых пулов, вероятность того, что последние произведенные блоки будут кинуты. - -#### Основные преимущества ДР \(POW\): - -* Высокая цена подделки -* Экономическая заинтересованность в оптимизации необходимых компьютерных алгоритмов -* Модель распределения, которая привлекает технически подкованных пользователей -* Создание надежной сети с малой временной задержкой -* В отличие от традиционного майнинга, временн\`ые интервалы на производство блока и выполнение доказательства работой разнесены. Когда решение, которое соответствует заданной трудности в сети, найдено, транзакция попадает в сеть и включается в текущий блок на производство. Для включения в блок ДР \(POW\) должно быть получено с использованием данных заголовка текущего блока. Далее транзакция добавляется в очередь на включение в следующий раунд производства блока. Заданная трудность \(d\) становится функцией длины очереди \(q\). - -`d = 2 q / 4 + 4` - -При заданном времени производства блока \(3 секунды\) майнер ДР \(POW\) должен работать на ноде \(узле\) с минимальной задержкой, чтобы получать заголовок блока как можно оперативнее и транслировать результат вычислений в сеть с временным запасом, достаточным для получения этих данных следующим производителем блока. Использование майнинговых пулов значительно увеличивает временную задержку и соответственно существенно сокращает время доступное на вычисление \(ДР\). - -Производители блоков получают дополнительное вознаграждение при включении в блок ДР-транзакций \(POW-транзакций\). - -#### Алгоритм майнинга - -Несмотря на то, что использоваться может любой алгоритм майнинга, представленный ниже алгоритм имеет несколько полезных свойств. При этом данный алгоритм требует подтверждение майнером факта владения приватным ключом от учетной записи, с которой в конечном счете будет произведен блок и куда будет зачислено вознаграждение. - -Алгоритм также требует от пользователя произвести верификацию подписи с помощью эллиптической кривой, оптимизация которой положительно скажется на проверке \(валидация\) всех транзакций и снизит расходы на эксплуатацию сети в долгосрочной перспективе. - -Пусть H = заголовок блока ID -Пусть Н2 = SHA256 \(H + нонсе\) -Пусть PRI = приватный ключ производителя -Пусть ПАБ = публичный ключ производителя -Пусть S = SIGN \(PRI, SHA256 \(H\)\) -Пусть K = RECOVER\_PUBLIC\_KEY \(H2, S\) -Пусть POW = SHA256 \(K\) - -Для того, чтобы быть действительным POW должно быть меньше заданной трудности и RECOVER\_PUBLIC\_KEY \(H2, S\) должно равняться PUB. Случайность задается майнером либо путём случайного выбора нонс, либо при генерации подписи методом эллиптической кривой. Это в сочетании с выбором приватного ключа должно обеспечить, что каждый майнер работает над своим вычислением. - -Начиная и заканчивая POW с криптографически защищенной хэш-функцией мы можем гарантировать, что любые уязвимости или вычислительные сокращения, которые могут существовать в алгоритме RECOVER\_PUBLIC\_KEY или алгоритме SIGN, в конечном счете вернут алгоритм POW к простому POW, основанному на хэш-функции. - -#### Доказательство готовности совершать вычисления является доказательством работы - -При рассуждении о преимуществах доказательства работой полезно дать определение работы. В физике работа определяется как произведение мощности на время. - -`W = P * t` - -В целом работой можно считать деятельность, за которую люди получают вознаграждение. Если оплаты нет, то работы не проделано. Механизм доказательства работой в системе биткоина удовлетворяет обоим определениям. Никто не будет тратить деньги, устанавливать специализированное оборудование, расходовать электроэнергию и совершать вычисления без вознаграждения. Таким образом, сложность вычисления хеш-функции блока биткоина является математическим доказательством того, что определённая работа, оценённая в 12,5 BTC, выполнена. При установлении фиксированной суммы вознаграждения за определённые действия на конкурентном рынке, конкуренция со стороны многих игроков будет уравнивать стоимость работы с суммой вознаграждения. - -Можно рассматривать работу в сети биткоина как сложность или как сложность хеш-функции \(hash power\), умноженная на 10 минут. - -`W = D = H * P * 10` - -Хотелось бы обратить внимание на то, что готовность держать токен в течение определенного периода времени в будущем также является работой. Никто не предоставляет ликвидность или замораживает средства, если не ожидает процентного вознаграждения. Соответственно, сумма процентов, уплачиваемых за проделанную работу, пропорциональна проделанной работе. В то же время стоимость вознаграждения за майнинг биткоина пропорциональна требуемой работе. - -Подавляющее большинство Силы Голоса распределено среди держателей, которые в среднем готовы хранить ГОЛОС в течение одного года. Эти люди заинтересованы в выборе майнеров, которые будут совершать транзакции в сети. Это очень напоминает схему, при которой покупается оборудование для майнинга, которое оплачивается заработанными биткоинами \(с процентами\). Владельцы майнингового оборудования решают, к какому майнинговому пулу они хотят присоединиться. Аналогичным образом держатели Силы Голоса выбирают пул\(ы\), которые производят блоки от их имени. - -Пользователи Голоса, которые откладывают свои ГОЛОСа, вознаграждаются следующим образом: - -* Пропускная способность сети -* Дополнительные ГОЛОСа -* Влияние при кураторстве -* Влияние при производстве блоков - -_Пользователи могут конвертировать токены Голоса в Силу ГОЛОСа \(токены Силы ГОЛОСа\)_ - -#### Доказательство владения не используется - -Доказательство владения \(proof of stake\) является алгоритмом консенсуса, в котором производители блоков выбираются текущими пользователями \(владельцами блокчейна\). Существующие алгоритмы доказательства владения опираются на использование информации о владении токенами либо в прошлом, либо в настоящем. Экономически затраты на токены могут считаться невозвратными издержками, и, следовательно, не являются работой. - diff --git a/2-rewards/posting_rewards.md b/2-rewards/posting_rewards.md deleted file mode 100644 index 3d4c2436..00000000 --- a/2-rewards/posting_rewards.md +++ /dev/null @@ -1,66 +0,0 @@ -# Постинг (написание статей) - - -### Написание статей на Голосе -#### Вознаграждение за посты -За каждый пост, размещенный на Голосе, могут проголосовать пользователи, заинтересованные в долгосрочном развитии Голоса. Чем больше голосов отдано за пост, тем больше средств получает автор. Вознаграждение также начисляется при голосовании за комментарии. - -#### Как мне написать первый пост? -Публикация постов происходит через кнопку «Добавить пост», которая располагается в шапке сайта, рядом с вашим аватаром. - -#### Вознаграждение за обсуждения -Одна из основных задач Голоса - поощрение качественных дискуссий на разные темы. Каждый год 66.66% от рыночной капитализации Голоса распределяется между пользователями, которые размещают, голосуют и комментируют посты. - -#### Распределение вознаграждения -Фактическое распределение зависит от того, как голосуют пользователи, но с высокой вероятностью, существенные суммы вознаграждения будут приходится на самый популярный контент. В Голосе распределение вознаграждения происходит пропорционально количеству голосов, отданных за пост. - -Смысл такой системы распределения в поощрении качественного и популярного контента при одновременном вознаграждении всех пользователей, регулярно размещающих материалы на сайте. - -#### Вознаграждение обсуждаемых постов -Качественное обсуждение подразумевает наличие множества комментариев. Стимулирование качественных дискуссий поощряется. - -Стоит помнить что _**размещение иррелевантных комментариев с высокой вероятностью повлечет за собой минусовое голосование.**_ - -#### Вознаграждение -Есть два вида получения вознаграждения за пост: - -- 100% в отложенных Голосах (Силе Голоса); - -- 50% / 50% - то есть 50% в Голосах (Golos), либо в Золотых (GBG) (при условии, что общая масса GBG в системе не более 5%) и 50% в отложенных Голосах (Силе Голоса) - -Еще существует режим «отказа от выплат». В этом случае вознаграждение, которое соберет пост, остается в пуле наград. - -Сила Голоса повышает «вес» голоса пользователя, в то время как Голос и Золотой представляют собой непосредственную и немедленно получаемую выгоду. К тому же, на Золотой, и на Силу голоса начисляются проценты при сохранении их на аккаунте. - -#### Минусование постов (флаги) -В отличие от плюсования минусование невыгодно минусующему. По сути, минусовое голосование представляет собой упущенную выгоду от голосования за себя. -Обсуждение того, в каких случаях уместно ставить флаг, можно прочитать здесь. - -#### Алгоритм голосования -Когда пользователь постит на Голосе, другие участники могут проголосовать за (или против) – плюсануть (апвоутить, лайкнуть) или минусануть (флаговать). Голоса пользователей соотносятся с тем весом (объемом) Силы ГОЛОСА, который имеют пользователи. - -Цель алгоритма – вознаграждать посты, имеющие наибольший консенсус или сетевой эффект. Вознаграждение распределяется пропорционально весу голоса пользователя. - -#### Ограничение частоты голосования -Каждая учетная запись имеет ограничение по частоте голосования. Это сделано для того, чтобы не допустить (усложнить) использование скриптов для автоматического голосования вместо личного голосования. - -#### Поощрение распределенного голосования -Каждая учетная запись имеет лимит на вес голоса. Голосовать со 100% силой, можно до 40 раз в течении 24 часов. При каждом отданном голосе, вес Силы Голоса снижается. - -#### Семидневный период для постов -Начиная с хардфорк 0.17 срок "жизни" постов и комментариев ограничен семью днями, в течение которых за посты/комментарии можно голосовать, отвечать на них и редактировать свои посты/комментарии. -Текущая сумма вознаграждения используется для выявления трендовых публикаций. Эти посты отражаются на первой странице и вкладке "Популярное", где они наиболее часто просматриваются. - -Возможно, в следующих хардфорках срок жизни постов и комментариев будет увеличен, этот вопрос обсуждается. - -#### История с ведром крабов -Человек шел по берегу и увидел рыбака, увлеченного рыбалкой, рядом с которым стояло ведро с добычей. Когда он подошел ближе, то заметил, что ведро не имело крышки, а внутри были крабы. - -"Почему вы не закрыли ведро, чтобы крабы не могли сбежать?", - спросил прохожий. - -"Вы не понимаете", - ответил рыбак, -"Если бы в ведре был только один краб, то он бы выбрался из ведра очень быстро. Но так как в ведре много крабов, то каждый раз, когда один из них пытается выбраться наружу, находится какой-то краб, который тащит его назад, чтобы потенциальный беглец мог разделить ту же судьбу, что и большинство». - -Также и с людьми. Если кто-то пытается сделать что-то уникальное - заняться саморазвитием, сменить окружение, или отваживается мечтать о чем-то значительном, окружающие будут вольно или невольно оказывать этому сопротивление, предпочитая, чтобы он разделил их судьбу. - -Можно и по-другому интерпретировать историю с ведром крабов. Люди не любят, когда другие получают то, что они не могут получить. Любой, кто пытается заработать больше, голосуя за самого себя, будет встречать активное сопротивление, выражаемое в минусовании. Некоторые «крабы» сбегут, прихватив нечестно заработанные Голоса, но подавляющее большинство будет толкаться в ведре, и это все, что имеет значение. - diff --git a/2-rewards/savings_rewards.md b/2-rewards/savings_rewards.md deleted file mode 100644 index 74ec18d4..00000000 --- a/2-rewards/savings_rewards.md +++ /dev/null @@ -1,46 +0,0 @@ -# Сбережения -#### Вознаграждения за сбережения -_Сбережения в ГОЛОСе приносят стабильность_ - -Сбережения в токенах ГОЛОС – это новый подход к созданию надежной, не зависящей от контрагентов, привязанной к золоту валюты. Держателям сбережений в Силе Голоса (отложенных голосах) и в Золотом (GBG) выплачиваются проценты. -Золотой, обеспеченный ГОЛОСОМ (GBG) всегда конвертируется в 1,00 миллиграмм золота в ГОЛОСах, по средней цене за неделю в системе. - -#### Предыстория -Криптовалюты уникальны тем, что они являются цифровым активом, не являясь при этом чьим бы то ни было обязательством. Они являются активом, который можно обменивать, который децентрализован, и имеет ценность соотносимую с ценностью сети пользователей, которые им пользуются. Исторически криптовалюты имеют высокую волатильность и покупаются/продаются в спекулятивных целях. - -В Голосе используется принцип конвертируемых долговых обязательств. Конвертируемые долговые обязательства структурируются по-разному, но основная идея заключается в том, что их стоимость равняется 1,00 акций по оценке в будущем. Золотой, обеспеченный ГОЛОСом (GBG) конвертируется в криптовалюту, а не в акции компании. Цена, по которой происходит конвертация Золотого, обеспеченного ГОЛОСом в ГОЛОС, берется из надежного децентрализованного потока цен. - -#### Процентная ставка держателей Силы Голоса -Держатели Силы ГОЛОСа получают 15% годовую ставку на замороженные токены, которая сохраняет размыв вложенных средств в замороженных токенах. - -#### Как заработать проценты на сбережения? -Тем, кто хранит Золотые, обеспеченные ГОЛОСом, выплачиваются проценты. Процентная ставка обеспечивает целесообразность хранения GBG. Фактическая процентная ставка может быть изменена на основе консенсуса активных делегатов. Таким образом обеспечивается гибкость регулирования процентной ставки в зависимости от рыночных условий. - -#### Откуда берутся проценты? -Голос создает новые GBG, чтобы обеспечивать выплату процентов по существующим GBG. Это обуславливает рост соотношения долга к капиталу для ГОЛОСа. Таким образом создаются финансовые стимулы для того, чтобы отложить по меньшей мере на год конвертацию 26.66% всех ГОЛОСов. - -Полный объем ГОЛОСов - это количество ГОЛОСов, которые бы существовали, если бы все GBG были преобразованы в ГОЛОСа по текущей цене. Выпуск новых GBG для обеспечения процентных выплат осуществляется для увеличение общего объема ГОЛОСов и снижения процента отложенных ГОЛОСов (или Силы ГОЛОСА). По мере того как процент отложенных ГОЛОСов сокращается, норма доходности по СГ автоматически увеличивается, что позволяет привлечь новый долгосрочный капитал. - -Общими словами экономический эффект от выплаты процентов на GBG заключается в перераспределении доходов от держателей ГОЛОСов держателям GBG. Это перераспределение благоприятно сказывается как на держателях ГОЛОСов, так и держателях GBG, поскольку держатели GBG фактически предоставляют кредит Голосу. Этот кредит служит рычагом, который позволяет держателям ГОЛОСов зарабатывать больше при росте цены ГОЛОСа и терять больше при падении цены ГОЛОСа. - -#### Децентрализованный поток цен -Данные в децентрализованный поток цен поступают от 21 активного делегата. Раз в блок регистрируется медиана потока цен, поступающих от делегатов. Медиана всех зарегистрированных за прошедшую неделю ценовых потоков используется для определения цены, по которой происходит конвертация GBG в ГОЛОС. - -Для компрометирования такой системы сговорившимся делегатам (51% всех активных делегатов) потребуется 3 с половиной дня. Поскольку делегаты отбираются путем голосования держателями ГОЛОСа, то можно утверждать, что заинтересованные в росте стоимости ГОЛОСа держатели ГОЛОСа будут выбирать надежных делегатов для поставки информации в ценовые потоки. - -#### Обработка запросов на конвертацию -Запрос на конвертацию GBG в ГОЛОС происходит спустя 3.5 дня после поступления по обменному курсу, установленному на тот момент по медиане цен. Это гарантирует, что никто не может использовать задержку в обновлении данных в ценовом потоке в свою пользу. - -Предполагается, что запросы на конвертацию в первую очередь будут исходить от спекулянтов, которые захотят приобрести большие объемы ГОЛОСов без влияния на рынок. - -#### Ликвидность на встроенной бирже -Большинство пользователей предпочтут использовать встроенную биржу для выполнения мгновенных обменов между ГОЛОСом и GBG. На встроенной бирже цена ГОЛОСа будет отслеживаться в режиме реального времени гораздо более надежно, поскольку профессиональные трейдеры захотят воспользоваться возможностями арбитража. - -#### Риск неплатежа -Ни одна система не является абсолютно защищенной от дефолта. Гиперинфляция может привести к ситуации, при которой все GBG будут конвертироваться в ГОЛОСа по курсу меньше, чем стоимость 1,00 миллиграмма золота. - -Голос минимизирует вероятность того, что это произойдет, путем экономического стимулирования замораживания 26.66% всех ГОЛОСов по крайней мере на 1 год. Благодаря этому соотношение долга к капиталу сети Голос должно быть меньше 10%. Это означает, что даже 50%-ное падение стоимости Голоса приведет к увеличению данного коэффициента лишь до 20%, что является консервативным показателем для любой компании. - -Голос будет автоматически увеличивать стимулы для долгосрочных инвестиций в ГОЛОС по мере того, как соотношение долга к капиталу будет увеличиваться. - -Голос представляет собой децентрализованную сеть, построенную на принципах блокчейн. Компания cyber•Fund, оператор Голоса, не может и не гарантирует стоимость ГОЛОСа и GBG. В случае, если пользователь сети выбирает использование ГОЛОСа и GBG, он / она делают это на свой страх и риск. Вполне допустимо падение стоимости ГОЛОСа и Золотого, обеспеченного ГОЛОСом. diff --git a/2-rewards/zapusk-golos-nodi-v-konteinere-docker.md b/2-rewards/zapusk-golos-nodi-v-konteinere-docker.md deleted file mode 100644 index e69de29b..00000000 diff --git a/3-guides/aktualnoe.md b/3-guides/aktualnoe.md deleted file mode 100644 index 4e84786e..00000000 --- a/3-guides/aktualnoe.md +++ /dev/null @@ -1,6 +0,0 @@ -##✔ Объявления - ->Актуальная оперативная информация - -- [💡 Зеркала golos.io](0-aktualnoe/vnimanie-alternativnie-tochki-vhoda.md) -- [💔 Вакансии Команд Голоса](0-aktualnoe/vakansii-komandi.md) \ No newline at end of file diff --git a/3-guides/mine_golos.md b/3-guides/mine_golos.md deleted file mode 100644 index d29c1618..00000000 --- a/3-guides/mine_golos.md +++ /dev/null @@ -1,72 +0,0 @@ -#### Как майнить ГОЛОС -В этой инстукции предполагается наличие развернутой функционирующей сети. О запуске тестовой сети можно ознакомиться в файле «Как запустить тестовую сеть». - -Майнинг требует эксплуатации полной ноды (узла) и наличия ПО для разработки Голоса. Для установки ПО следует ознакомиться с файлом «Как разрабатывать Голос». - -#### Настройка ноды делегата (майнера) -Нода делегата – это любой полный узел, который обрабатывает и проверяет блоки. Он в реальном времени следит за тем, как строится блокчейн. Это необходимое условие для производства блоков. Вначале требуется произвести синхронизацию с существующей сетью и разрешить на ноде свидетеля создание папки datadir, которая содержит файл конфигурации: - -```bash -cd programs/witness_node -./witness_node -d datadir -``` - -Измените файл `datadir/config.ini` и обновите следующие строки для настройки ноды делегата на производство блоков: - -``` -# Количество потоков, используемых для доказательства работы -mining-threads = 4 - -# Имя ноды делегата, контролируемой этим узлом (например, initwitness) -miner = ["your-account-name", ""] -witness = "your-account-name" -``` - -Производство блока требует наличия приватного ключа, связанного с видом управления «активный участник». Учетные записи майнинга могут иметь только один набор ключей, соотвествуюший «активному участнику». - -#### Запуск ноды делегата -После настройки своей ноды делегата, запустите ее, и она подключится к сети. Если это тестовая сеть, то вам, возможно, потребуется указать узел сида. - -```bash -./witness_node -d datadir -``` -При удачном запуске майнинга, появится данное сообщение: - -```bash -405992ms th_a database.cpp:863 update_witness_sched ] scheduling miner -``` - -Оно означает, что сеть включила ваше майнинговое утройство в очередь на майнинг на ближайшее время. Убедитесь, что ваша нода делегата работает все это время, иначе генерация блока будет невозвожно. При успешном производстве блока вы увидите следующее сообщение: - -```bash -Generated block #645 with timestamp 2016-03-18T14:08:40 at time 2016-03-18T14:08:40 by -``` - -#### Максимизация эффективности майнинга -Для достижения наилучших результатов майнинга критичным является низким уровнем задержки при подключении к сети. У ноды делегата имеется менее 3 секунд для того, чтобы проделать работу и передать результат следующему в очереди узлу для включения в блок. Чем раньше ваш узел получает блок, тем выше вероятность того, что проделанная вами работа будет получена следующим узлом. - -#### Производство блоков -После того, как ваше доказательство работы акцептируется сетью крайне важно, чтобы ваша нода оставалась подключенной, чтобы было возможно производство блока в запланированное для вас время. В каждом раунде (21 блок) один майнер получает право на производство блока. Раунд может занять по меньшей мере 63 секунды, если каждый майнер производит блок. Длина очереди из майнеров пропорциональна сложности. Уровень сложности удваивается каждый раз при добавлении 4 новых майнеров в очередь. Это означает, что с момента когда вы представите доказательство работы до момента, когда получите право произвести блок, пройдет чуть меньше нескольких часов. - -Если ваш узел не производит блок в назначенное время, то вы не получаете вознаграждение. - -#### Ключ безопасности -По активному ключу (например, ключу майнинга) возможен доступ к средствам на учетной записи и, соответственно, кража такого ключа приведет к потере средств. Примите во внимание данный риск и обеспечьте регулярное перемещение средств с активной на другую более безопасную учетную запись. - -#### Сохраняйте ключ владельца офлайн -Доходы от майнинга зачисляются на ваш счет в виде отложенных ГОЛОСОВ. Перевод отложенных ГОЛОСОВ в ГОЛОСА занимает 20 недель. Если ваш ключ владельца хранится офлайн, то вы получите 1 недельное уведомление о взломе вашего активного ключа, до того момента, когда 5% ваших отложенных ГОЛОСОВ будут переведены в ГОЛОСА и сняты со счета. Если вы обнаружили несанкционированные действия, то вы можете использовать свой ключ владельца, чтобы изменить активный ключ до момента перевода средств. - -#### Конфигурация прав доступа к файлам -Майнинг требует доступа к ключу «активного участника». Для больше безопасности файл конфигурации для ноды делегата должен быть настроен таким образом, чтобы только учетная запись, привязанная к майнингу, имела доступ к config.ini. В UNIX-подобных системах права доступа должны быть 600 (-rw------). Несмотря на то, что приватный ключ можно передать в командной строке, эта информация будет доступна любому пользователю системы. - -#### Майнинг с нескольких компьютеров -При наличии более, чем одного компьютера для майнинга, очень важно настроить как ноду делегата только один из них. Для настройки steemd процесса в качестве ноды делегата (а не майнера) вам потребуются следующие параметры конфигурации: - -``` -# WIF Private Key of a witness, starts with a 5... -witness = "your-account-name" -private-key = -``` - -Вы не должны заводить ноду делегата с той же учетной записью, `your-account-name`, на более чем одну систему golosd. Если это произойдет, то обе системы golosd произведут блок одновременно. Другие узлы сети увидят это двойное подписание и представят доказательство в сеть, что позволит им претендовать на остаток средств на вашей учетной записи. - diff --git a/3-guides/stati/anonimnie-transaktsii.md b/3-guides/stati/anonimnie-transaktsii.md deleted file mode 100644 index 387ea452..00000000 --- a/3-guides/stati/anonimnie-transaktsii.md +++ /dev/null @@ -1,71 +0,0 @@ -

    Анонимные трансакции на блокчейне Graphene

    - -Автор: @vik - -

    По своей природе блокчейны и анонимность - несовместимые понятия.

    -

    Да, вам нет необходимости верифицировать свою личность, показывать какие-либо личные данные и т.д. Но фактически все ваши транзакции записываются в публичную цепочку и отследить взаимосвязь переводов и точек выхода на фиат может любой желающий.
    -Многие альткойны получают просто колоссальную популярность только по причине того, что предоставляют желанный функционал анонимности. Например - Monero и его кольцевые подписи, z адреса в z.cash, darksend в dash и другие. Кроме этого растет бесчисленное количество частных сервисов "микшеров" которые предлагают замешать ваши монеты в множестве операций, якобы очищая ваши цифровые деньги, но на самом деле вы получаете с миксера еще более "грязную" криптовалюту с черного рынка или вовсе остаетесь ни с чем если попались на уловки мошенников.

    -

    Я не буду оригинален, если предположу, что не всем пользователям Bitshares/Steem/Golos по душе то, что вся их история сделок не просто открыта, а еще и удобно представлена - ведь в Graphene адреса кошельков это не просто набор произвольных чисел, а классические никнеймы пользователей.

    -
    Но вы удивитесь узнав, что в Graphene (основа Golos/Steem/Bitshares) есть возможность анонимных транзакций не первый год. -И с марта 2016 года существует открытый GUI клиент для таких переводов.
    -
    -

    Bitshares сочетает в себе столько возможностей, что порой наблюдая очередной помпезный выход какой-то новой криптовалюты c "революционным" функционалом хочется пожать плечами со словами - "Так это давно есть на графен..."

    -
    -

    Как использовать Blind Transfers в Bitshares/RuDEX

    -

    Для начала скачаем официальный stealth клиент https://github.com/cryptonomex/graphene-ui/releases/
    -Он без русского языка, но интуитивно все понятно. К тому же думаю @blockchained c командой RuDEX сделают локализацию для BitRUBLE

    -

    Скачиваем десктоп клиент .exe если у вас windows
    -

    -

    Запускаем скачанный файл и устанавливаем

    -

    -

    Файрволл windows попросит вас подтвердить действие кровавой подписью, так как воспринимает все связанное с криптой болезненно.

    -

    После установки ярлыки не создаются, поэтому самостоятельно идем в папку /Program Files (x86)
    -И запускаем клиент
    -

    -

    Нам будет предложено создать новый кошелек, для этого нужно ввести дважды ПРИДУМАННЫЙ пароль

    -

    -

    Пароль надежно сохраните! Дополнительно скачайте так же бэкап-файл

    -

    -

    Придуманный пароль и данный файл - это две составляющие для входа в ваш кошелек или переноса аккаунта на другой компьютер или веб-клиент типа RuDEX

    -

    Теперь вам нужно создать аккаунты в кошельке, они же счета:

    -

    -

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

    -
      -
    • Создайте публичный (классический) аккаунт Add public account
    • -
    • Затем создайте private account
      -Приватный аккаунт начинается с символа ~ и доступен только в вашем аккаунте, можете назвать его как угодно.
      -
    • -
    -

    В примере я создал публичный аккаунт vik-golos и приватный ~private (Следует понимать, что приватный аккаунт в данном случае принадлежит публичному)

    -

    Далее я пополнил аккаунт vik-golos

    -

    -

    Теперь переходим в раздел SEND и в аккаунте отправителя пишем публичный аккаунт, а в поле получателя вписываем наш приватный аккаунт обязательно начиная с символа ~
    -В поле комиссии вы увидите стандартную для переводов комиссию, однако это не верно! Комиссия на стеллс переводы чуть больше 20 BTS (75 руб по текущему курсу) возможно это кажется дорого, но следует понимать, что во-первых эта комиссия фиксированная, т.е. отправляя миллион - комиссия все равно останется такой. А во-вторых - это просто несоизмеримо дешевле микшеров транзакций, и в сравнении с микшером - моментально. Вам не нужно будет ждать несколько суток как в биткойн миксерах и платить за это большой %.

    -

    Делаем перевод на приватный аккаунт с учетом, что он будет стоить 20+ BTS
    -

    -

    Комиссия
    -

    -

    Успешный трансфер в "слепой" Blind Account
    -

    -

    Теперь самое интересное! На той же странице SEND мы переведем с моего слепого аккаунта ~private на другой аккаунт в RuDEX.

    -

    Если описать операции сначала, то я сделал следующее:

    -
      -
    • Установил клиент
    • -
    • Создал в нем публичный аккаунт vik-golos и пополнил его извне.
    • -
    • Создал в нем приватный аккаунт ~private
    • -
    • Далее я перевел с vik-golos монеты на невидимый аккаунт ~private
    • -
    -

    А теперь я хочу анонимно перевести со своего кошелька монеты кому-то еще. Для примера я взял свой другой, не связанный никак с вышеупомянутыми учетными записями, аккаунт vik-x и перевел на него монеты с невидимого аккаунта:
    -

    -

    Увы, здесь нас снова поджидает комиссия 15+15 BTS

    -

    -

    Но это того стоило!

    -

    Я получил BTS анонимно! Вот так это отображено в истории

    -

    -

    Отправил BTS я так же анонимно:

    -

    -

    Естественно можно попробовать искать в блокчейне похожие вводы и выводы по времени что бы определить источники анонимных транзакций, но я вам показал самый примитивный способ "обрыва цепочки". Можно использовать схемы, когда вы переводите монеты между несколькими своими приватными аккаунтами в разное время, взаимодействуя с приватными аккаунтами других пользователей, а так же использовать другие интересные механики стелс переводов! Как я упомянул ранее - порой кажется, что в bitshares предусмотрели буквально все. :)

    - -
    По материалам статьи. -Автор @vik -
    diff --git a/4-documentation/about.md b/4-documentation/about.md deleted file mode 100644 index d5f1cea2..00000000 --- a/4-documentation/about.md +++ /dev/null @@ -1,10 +0,0 @@ -Что о нас пишут? - -* [Cryptocoinnews](https://www.cryptocoinsnews.com/new-blockchain-social-media-platform-speaks-with-a-russian-voice/) -* [Forklog](http://forklog.com/detsentralizovannaya-sotsialnaya-set-steemit-poluchit-otdelnyj-russkoyazychnyj-proekt/) -* [Econotimes](http://www.econotimes.com/CyberFund-launches-first-blockchain-based-Russian-social-network-Voice-332085) -* [Coinfox](http://www.coinfox.ru/novosti/6457-kiber-fond-sozdast-russkoyazychnuyu-sotsset-na-blokchejne-steem) -* [OSP](http://www.osp.ru/cw/2016/13/13050329/) - - - diff --git a/4-documentation/belaya-bumaga-golosfonda.md b/4-documentation/belaya-bumaga-golosfonda.md deleted file mode 100644 index 1d4cc8e9..00000000 --- a/4-documentation/belaya-bumaga-golosfonda.md +++ /dev/null @@ -1,203 +0,0 @@ -

    Golos•Fund: Эволюция Экосистемы Блокчейна Голос

    -

    @hipster @serejandmyself @cyberfund

    -

    Абстракт

    -

    Текущая оценка фонда развития блокчейна Голос из Биткоинов и Голосов около $2 млн. Оба ресурса являются исключительной собственностью cyber•Fund и контролируются его советом директоров. На данный момент средства используются по 0-профит схеме, что является субоптимальным для всей экосистемы. С момента краудсейла было потрачено около 5% резерва (или 30 Биткоинов) Биткоинов на разработку блокчейна, референтного приложения Golos.io, а также проведение мероприятий направленных на популяризацию экосистемы. Такими темпами через 2 года данный резерв иссякнет.

    -

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

    -

    Введение

    -

    Мы приняли решение разделить существующие активы предназначенные на развитие 3 организации, каждой из которых специфична своя экономическая модель:

    -
      -
    1. Golos•Fund (Голос•Фонд) зарабатывает на венчурных инвестициях в приложения и команды экосистемы Graphene. Приобретая малые доли в талантливых командах на раннем этапе по модели yCombinator, за счет своих исключительных компетенций он помогает в течение 1 - 2 лет капитализировать открытый код либо через продажу (1) на ICO, либо (2) стратегическому инвестору. Golos•Fund нацелен на 7-ми кратную целевую доходность в течение 12 месяцев.
    2. -
    3. Golos Сore зарабатывает на разработке и внедрении умных контрактов блокчейна Голос. Регулярно доставляя обновления публичного ядра с возможностью разворачивания приватных цепочек Golos Core наращивает техническую компетенцию в области высокопроизводительных блокчейн решений. Как результат Golos Core монетизирует разработки (1) через продажу консультаций для внедрения приватных решений, (2) через продажу типовых или коробочных внедрений поверх публичного блокчейна, а также через (3) вознаграждения сообществом за доставленные релизы.
    4. -
    5. Golosio зарабатывает как типичное приложение блокчейна Голос доставляя лучшее решение для блоггинга. Источники дохода включают (1) часть доходов от вознаграждения авторов, (2) премия полученная с регистраций новых пользователей, (3) релизы с открытым кодом, а также (4) прочие возможности для монетизации (публикации, премиальные фичи и т.д.).
    6. -
    -

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

    -
      -
    • Покрытие экосистемой Голоса, всех известных социально значимых приложений
    • -
    • Трансформация в полноценную платформу для умных контрактов
    • -
    • Разработка и внедрение более эффективного гибридного консенсус алгоритма
    • -
    • Рост капитализации сети до $1 млрд.
    • -
    • Дальнейшая децентрализация процессинговой сети до 300 хорошо мотивированных нод
    • -
    • Доступность блокчейн платформы Голос для приватных установок.
    • -
    • Увеличение независимых команд разрабатывающих приложения до 50
    • -
    • 300-500 доменов в экосистеме Голоса.
    • -
    -

    Golos•Fund

    -

    кибер•Фонд (Golos: @cyberfund, Bitshares: cyberfund) учреждает Голос•Фонд (Golos: @golos, Bitshares: golos) путем выпуска 100,000 токенов GFUND в блокчейне BitShares (с дальнейшем перенесением активов в блокчейн создания фонда). В уставный капитал Golos•Fund вносится:

    - -

    Ключевая задача Golos•Fund: венчурные инвестиции в перспективные команды занимающиеся разработкой приложений в экосистеме Graphene: Golos, Steem, Bitshares и Eos.

    -

    Golos•Fund не ставит цель получение контроля над независимыми командами разработки. Вместо этого Golos•Fund предоставляет умные деньги, а именно:

    -
      -
    • Помощь командам в выборе эффективных технологических стеков
    • -
    • Помощь командам в подборе и оптимизации экономической модели
    • -
    • Передача менторства инвесторам специализирующихся на масштабировании технологических компаний с фокусом на конкретные индустрии
    • -
    • Успешный вывод на ICO
    • -
    -

    CEO Golos•Fund назначается @serejandmyself (Bitshares: serejand-myself и на Golos.io: @serejandmyself.
    -Его ключевые задачи:

    -
      -
    • Прогнозирование деятельности и формирование отчетности Golos•Fund по следующей форме
    • -
    • Поиск объектов инвестиций и подготовка решений
    • -
    • Участие в инвестиционной деятельности портфельных компаний и контроль их KPI
    • -
    • Координация подготовки ICO по объектам инвестиций
    • -
    • Поиск стратегических инвесторов для выхода из проектов
    • -
    • Развитие экономики блокчейна Голос и стимуляция предпринимательской активности
    • -
    • Рост экосистемы приложений и формирование сообщества разработчиков
    • -
    • Координация маркетинга блокчейна Голос
    • -
    -

    Опционы выплачиваются по истечении 2 летнего периода (возможна годовая выплата опционов), согласно следующей структуре:

    -

    Golos•Fund - вкладка Options
    -Golos Core - вкладка Options
    -Golosio - вкладка Options

    -

    Таким образом Golos•Fund сможет наращивать инвестиционный потенциал постоянно, открывая дорогу новым разработкам. На 2017 года цель Golos•Fund проинвестировать в 6-10 команд. Объем инвестирования при этом составит: от $10 тыс. до $100 тыс. на команду.

    -

    Все решения по инвестициям Golos•Fund, принимаются после их согласования и утверждения советом директоров cyber•Fund.

    -

    Требования к командам и приложениям для инвестиций Golos•Fund

    -

    Абстрактно Golos•Fund выделяет следующие цели для приложений:

    -
      -
    • Производство контента
    • -
    • Курирование контента
    • -
    • Синдикация контента
    • -
    • Конкурентоспособные приложения (приложения которые конкурируют с успешными социальными сетями на рынке)
    • -
    • Использование умных контрактов
    • -
    • Работающие на “профит” основе
    • -
    -

    Ниже описанный свод требований, не является финальным. Golos•Fund вправе, как требовать дополнительные возможности от команд, так и рассматривать более мягкие условия. В любом случае, финальное решение об инвестициях будет приниматься совет директоров cyber•Fund и CEO Golos•Fund

    -

    Решения для инвестиций в команды будет основываться на следующих требованиях:

    -
      -
    • Команда работает на условиях 100% открытого кода, используя технологию Graphene
    • -
    • Количество разработчиков в команде в диапазоне от 2 до 6 человек.
    • -
    • Целевой размер долей: 5% - 49%
    • -
    • Команда готова на схему опционов привязанной к двум KPI (1) доля в сети по выплатам из инфляции и (2) капитализация токенов приложения
    • -
    • Команда должна быть готова к передачи Голоc•Фонду более крупной доли (до 90% акций), в случае если проект не успешен (фактические KPI в 8 раз ниже целевых) (10% в том, что работает лучше чем 90% в том чего вообще нет). При согласии на такое условие у Golos•Fund будет возможность реанимировать проект
    • -
    • Команда готова следовать типовой модели монетизации основанной на доли в пуле наград (при этом Golos•Fund открыт к предложениям по улучшению данной модели)
    • -
    • Команды являются независимыми и готовы сами принимать решения о своем развитии
    • -
    • Лидеры команд готовы принимать участие в еженедельных встречах разработчиков онлайн
    • -
    • Команды готовы адаптировать автоматизированную отчетность перед фондом, инвесторами и сообществом
    • -
    • Команды готовы соблюдать типовую форму бюджета пример Golosio и вести её публично
    • -
    -

    Golos•Core

    -

    Golos•Fund учреждает Golos Core путем выпуска 100,000 токенов GCORE в блокчейне Bitshares(с дальнейшим перемещением активов в блокчейн создания фонда). В уставный капитал Golos Core вносится:

    -
      -
    • 35 Биткоинов
    • -
    • 1,000,000 токенов Голос на счета Golos Core. При этом, Golos Core, обязуется не использовать данные средства на протяжении 3 летнего периода, с момента их получения, в случае достаточного количества денежных средств на своих счетах для оплаты ежемесячного функционирования
    • -
    • Права на лицензию блокчейна Golos в Golos Core(bitshares account: golos-core) и домен goloscore.org
    • -
    • 20% токенов GCORE с целью оплаты опционов
    • -
    -

    Временным исполняющим обязанности CEO компании GCORE назначается @serejandmyself

    -

    Объем задач команды, включает в себя:

    -
      -
    • Разработку ядра и координацию хардфорков
    • -
    • Разработка приватных цепочек на базе Golos Core
    • -
    • Продажа типовых внедрений для сообществ и порталов на базе существующих умных контрактов (и не только)
    • -
    • Разработка новых умных контрактов
    • -
    -

    У команды блокчейн разработки не предусмотрено встроенной монетизации. Вместо этого им будет необходимо найти собственную модель монетизации.

    -

    В блокчейн индустрии есть уже как минимум 2 успешных кейса, когда команды разработки ядра публичного блокчейна получают умные инвестиции: BlockStream и Ethcore. Фактически эти разработчики финансируются инвесторами под перспективу получения денежных потоков от Enterprise решений. Недавний анонс Ent Eth ярко свидетельствует о том, что подобное направление очень перспективно. Таким образом Golos Core может зарабатывать на приватных цепочках, отличным образом продолжая развивать публичную инфраструктуру, т.к. в итоге успешность публичной инфраструктуры определяет спрос на приватную инфраструктуру.

    -

    Стоит особо отметить, что Golos Core не единственная команда в сфере разработки ядра, в которую Golos•Fund может проинвестировать. Если на рынке появятся команды, которые будут готовы предложить альтернативные имплементации, Golos•Fund видит в этом плюс для глобального развития всей экосистемы проектов.

    -

    Голос•Фонд оставляет за собой право принимать участие в решении модели управления и роли развития Golos Core, как основной акционер.

    -

    Бюджетирование Golos Core

    -

    Дорожная карта блокчейна Голос

    -

    Предложенная дорожная основана на уникальных разработках Golos Core и не включает разработки Steemit. Разработки Steemit также будут включаться в кодовую базу Голоса в случае целесообразности.

    -

    Хардфорк 2. Капля

    -
      -
    • Токены выпускаемые пользователями
    • -
    • Смарткоины (торгуемый контракт на разницу цен) для национальных валют (стоит отметить что данный функционал будет использован на блокчейне впервые, без транзакционных комиссий)
    • -
    • Иерархическая динамическая пороговая мульти-подпись (предложения транзакций в общем виде)
    • -
    • Отдельный пул выплат для комментариев
    • -
    • Параметризация блокчейна (экономические и финансовые параметры, а также, параметры влияющие на работоспособность сети)
    • -
    -

    Хардфорк 3. Бассейн

    -
      -
    • Golos•Rank: Ранжирование данных с учетом платного продвижения
    • -
    • Разделение делегатов на 2 роли: Валидаторы (пользователи с рабочим клиентом блокчейна Голос, для подписи блоков сети) и делегаты (пользователи сети, избранные голосованием, имеющие право на параметризацию сети)
    • -
    • Разрешения для приложений на уровне блокчейна (Регистрация клиентов к блокчейну с помощью транзакции в сеть)
    • -
    • Валидаторы получают право обеспечивать запись транзакций внесением залога в размере 300,000 Голосов в Силе
    • -
    • Делегаты избираются держателями Силы Голоса и определяют структуру распределения инфляции
    • -
    • Динамический размер раунда
    • -
    • Восстановление аккаунтов через друзей
    • -
    -

    Хардфорк 4. Ручей

    -
      -
    • Трансляторы: обеспечивают децентрализованные доступ к чтению блокчейна Голос для сторонних приложений (То есть мотивированные сид-ноды) . Необходим залог в размере 6,000 Голосов в Силе
    • -
    • Роутинг платежей. ICO + Дивиденды
    • -
    -

    Хардфорк 5. Озеро

    -
      -
    • Умные контракты
    • -
    • Месседжинг
    • -
    • Абстракция. Начало реализации совместимости контрактов ядра с EOS-like actor-моделью
    • -
    -

    Хардфорк 6. Река

    -
      -
    • Мотивированное хранение данных
    • -
    • Абстракция. Активная работа над реализацией совместимости контрактов ядра с EOS-like actor-моделью
    • -
    -

    Хардфорк 7. Море

    -
      -
    • Абстракция. Окончание реализации совместимости контрактов ядра с EOS-like actor-моделью
    • -
    • Множественные пулы вознаграждений
    • -
    -

    Golosio

    -

    Голос•Фонд учреждает Golosio путем выпуска 10,000,000,000 токенов GOLOSIO в блокчейне Bitshares (с дальнейшем перенесением активов в блокчейн создания фонда). В уставный капитал Golosio вносится:

    -
      -
    • 35 Биткоинов
    • -
    • 100,000 токенов Голос в качестве резерва на регистрации
    • -
    • 300,000 токенов Голос на будущую ноду валидатора
    • -
    • 20% токенов Golosio с целью оплаты опционов.
    • -
    • Права на лицензию Tolstoy и домен golos.io, аккаунты для регистрации жж и т.д.
    • -
    -

    Временным исполняющим обязанности CEO Golosio назначается @serejandmyself

    -

    После принятия 2 хардфорка появятся мощные рыночные механизмы для запуска возможных вариантов монетизации, в том числе и для Golosio.

    -

    Задача Golosio как и других команд:

    -
      -
    • Перейти на коммерческую модель
    • -
    • Определить ЦА для развития платформы
    • -
    • Продвигать проект
    • -
    • Доставлять новые решения, фичи и решать текущие баги
    • -
    -

    Исходя из уже имеющейся информации и статистики, Golos•Fund рекомендует развивать Golosio в направлении ЖЖ / Medium стайл блог платформы но с экономикой, параллельно создавая “gateway” который бы служил входом в блокчейн Голос. И входом в мир Русскоязычного блокчейна.

    -

    Golosio станет независимым приложением которое не имеет преимуществ перед другими разработчиками. Это создаст благодатную почву для развития экосистемы приложений блокчейна Голос.

    -

    Golos•Fund оставляет за собой право принимать участие в решении модели управления и роли развития Golosio, как основной акционер.

    -

    Бюджетирование:
    -Golosio - вкладка Goloio

    -

    Маркетинг

    -

    Обобщенная маркетинговая стратегия всех 3 структур сводится к единой цели: общего увеличения размера чистых активов Golos•Fund. В свою очередь это даст возможность увеличить стоимость каждого пользователя в системе, и соответственно увеличить количество денежных средств на одного пользователя. Повышение уровня и качества жизни - конечная цель блокчейна Голос.

    -

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

    -

    Маркетинговая структура проинвестированных компаний, описывается и документируется по аналогичному принципу.

    -

    При этом следует выделить следующие дополнительные направления маркетингового развития:

    -
      -
    • Golos•Fund: максимальный охват существующих решений в сфере социальных сетей; общее увеличение притока и ценности пользователей в системе
    • -
    • Golosio: развитие платформы, максимальное увеличение WAU, прирост капитализации
    • -
    • Golos Core: конкурентоспособные решения на рынке блокчейн, перевод новых платформ на блокчейн Голос
    • -
    • Другие команды: развитие платформы, максимальное увеличение WAU, прирост капитализации
    • - -

      Заключение

      -

      На данный момент блокчейн Голос является самым динамично развивающимся блокчейном с показателем CMGR 35% (на момент написания бумаги). Данной бумагой мы предложили экономическую и технологическую платформу развития блокчейна Голос которая обеспечит скорость экономического развития (CMGR) в период младенчества на уровне до 50% ежемесячно.

      -

      Ссылки

      -
        -
      • Бумага Голоса
      • -
      • Бумага Steem на Русском
      • -
      • Сайт cyber•Fund
      • -
      • Эксплорер блокчейн Голос
      • -
      • Вики проекта Голос
      • -
      • Сайт Golos•Fund
      • -
      • Coinmarketcap
      • -
      • Старый бюджет Голоса
      • -
      • Бюджет Golos•Fund
      • -
      • Бюджет Golos•Core
      • -
      • Бюджет GolosIo
      • -
      • Сайт проекта Golosio
      • -
      • Github проекта Голос
      • -
      • Github проекта Steem
      • - -
        - -ИСТОЧНИК: https://golos.io/golofund/@golosfund/belaya-bumaga-golos-fonda-golos-fund-white-paper-in-russian \ No newline at end of file diff --git a/4-documentation/belaya-bumaga-po-dpos.md b/4-documentation/belaya-bumaga-po-dpos.md deleted file mode 100644 index 121f4a23..00000000 --- a/4-documentation/belaya-bumaga-po-dpos.md +++ /dev/null @@ -1,50 +0,0 @@ -

        📝 Алгоритм консенсуса делегированного доказательства долей (DPOS) - недостающая белая бумага (перевод статьи @dantheman)

        -Автор: Dan Larimer @dantheman -

        Перед вами недостающая белая бумага и анализ алгоритма делегированного доказательства долей (DPOS). Цель этой бумаги - предоставить анализ работы DPOS и того, что делает его столь надежным. Давнее описание DPOS можно найти на bitshares.org; тем не менее, то описание включает в себя множество аспектов, на самом деле не являющихся частью процесса достижения консенсуса.

        -

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

        -

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

        -

        Кратко об алгоритме DPOS

        -

        Алгоритм DPOS делится на две части: избрание группы производителей блоков и составление графика производства. Процесс избрания позволяет убедиться, что держатели долей контролируют процесс, ибо именно они теряют больше всего, когда сеть перестает работать как надо. То, как люди избираются, не особенно влияет на то, как из минуты в минуту достигается консенсус. Поэтому данный документ будет сфокусирован на том, как достигается консенсус после избрания производителей блоков.

        -

        Чтобы упростить объяснение работы этого алгоритма, я предлагаю взять трех производителей блоков: A, B и C. Так как для разрешения всех ситуаций консенсус требует согласия 2⁄3 + 1, в этой упрощенной модели мы будем считать, что производитель C является нарушителем порядка. В реальном мире обычно есть 21 или более производителей блоков.

        -

        Нормальное функционирование

        -

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

        -

        -

        Форк меньшинства

        -

        Вплоть до 1⁄3 всех нод могут быть вредоносными или неисправными и создать форк меньшинства. В таком случае форк меньшинства будет производить только один блок каждые 9 секунд, тогда как форк большинства будет производить 2 блока каждые 9 секунд. И опять же, честные 2⁄3 большинства всегда будут создавать более длинную цепь, нежели меньшинство.

        -

        -

        Двойное производство изолированным меньшинством

        -

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

        -

        -

        Фрагментация сети

        -

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

        -

        -

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

        -

        Двойное производство присоединенным меньшинством

        -

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

        -

        -

        Последний необратимый блок

        -

        Существует возможность, что в случае фрагментации сети несколько форков продолжат расти в течение длительного периода времени. В перспективе самая длинная цепь выиграет, но наблюдателям нужен способ узнать наверняка, когда блок точно является частью самой быстрорастущей цепи. Это можно определить, увидев подтверждение от 2⁄3+1 производителя блоков.

        -

        На рисунке ниже блок B был подтвержден C и A, что представляет собой подтверждение от 2⁄3+1, а значит, мы можем заключить, что никакие другие цепи не могут быть длиннее, если эти 2⁄3 производителей честны.

        -

        -

        Заметьте, что это “правило” схоже с 6-блочным “правилом” подтверждения в Биткойне. Некоторые смышленые индивиды могут создать такую последовательность событий, когда две ноды могут оказаться на разных последних необратимых блоках. Этот пограничный случай требует от атакующего обладанием тотальным контролем над задержкой в коммуникации и способностью воспользоваться этим контролем не единожды, а дважды и с разрывом в несколько минут. Если бы такое случилось, долгосрочное правило самой длинной цепи всё равно осталось бы применимо. Мы считаем, что вероятность такой атаки стремится к нулю, а ее экономические последствия столь незначительны, что не стоит и беспокоиться.

        -

        Отсутствие кворума производителей

        -

        В том маловероятном случае, когда в блокчейне отсутствует четко определенный кворум производителей, меньшинство всё равно может продолжить производить блоки. В эти блоки держатели долей смогут включать транзакции, которые меняют их голоса. Затем эти голоса могут избрать новый набор производителей и восстановить уровень участия в производстве блоков до 100%. Как только это произойдет, цепь меньшинства в итоге обгонит все другие цепи, работающие с уровнем участия менее 100%.

        -

        На протяжении этого процесса все наблюдатели будут знать, что состояние сети нестабильно до тех пор, пока не появится цепь с 67%-ным участием. Те, кто решил совершить транзакцию при таких условиях, рискуют в той же степени, что и те, кто решил принимать менее 6-ти подтверждений. Они делают это, зная о существовании малой вероятности того, что консенсус установится на другом форке. На практике эта ситуация намного безопаснее, чем принятие блока с менее чем 3-мя Биткойн подтверждениями.

        -

        Коррумпированность большинства производителей

        -

        Если большинство производителей станут коррумпированы, то они смогут произвести неограниченное число форков, каждый из которых будет продвигаться вперед с подтверждением от 2⁄3 большинства. В таком случае алгоритм последнего необратимого блока меняется на алгоритм самой длинной цепи. Самой длинной цепью будет та, которая подтверждена самым многочисленным большинством, которое будет определяться меньшинством оставшихся честных нод. Такое поведение не продлится долго, так как держатели долей будут голосовать за замену этих производителей.

        -

        -

        Транзакции как доказательство долей (Transactions as Proof of Stake - TaPoS)

        -

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

        -

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

        -

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

        -

        Детерминированная перетасовка производителей

        -

        Во всех примерах мы продемонстрировали круговое планирование производителей блоков. В реальности же набор производителей блоков перетасовывается каждые N блоков, где N - число производителей. Такая рандомизация гарантирует, что производитель блоков B не сможет всё время игнорировать производителя A, и что каждый раз, когда возникает несколько форков с одними и теми же производителями, то коллизии со временем разрешаются.

        -

        Заключение

        -

        Делегированное доказательство долей остается надежным при любых возможных естественных сетевых сбоях и даже защищено перед лицом коррупции самого многочисленного меньшинства производителей. В отличие от других конкурирующих алгоритмов, DPOS способен продолжать работать, даже когда большинство производителей вышли из строя. Во время этого процесса сообщество может голосовать за замену неработающих производителей вплоть до тех пор, пока не достигнет 100% уровня участия. Я не знаю ни одного другого алгоритма консенсуса, который был бы столь устойчив при таких разнообразных условиях отказа.

        -

        В итоге DPOS достигает значительного уровня безопасности за счет алгоритмов выбора производителей блоков и проверки высокого качества нод и индивидуальности их владельца. Задействуя процесс утверждения, голосование обеспечивает, что даже некто с 50% активной силы голоса не сможет выбрать в одиночку хоть одного производителя.

        -

        DPOS разработан для оптимизации производительности номинального состояния 100% участия честных нод с надежным сетевым соединением. Это дает DPOS силу подтверждать транзакции с точностью в 99.9% в среднем за 1.5 секунды, которая при этом падает размеренным и просчитываемым образом, из которого легко восстановиться.

        -

        Другие алгоритмы консенсуса разработаны для номинального состояния нечестных нод с плохим соединением. Конечный результат такого альтернативного строения — медленная сеть с низкой производительностью, большой задержкой, сильной перегруженностью коммуникаций и полной остановкой работы в случае отказа 33% нод.

        -

        Спустя 3 года успешной работы BitShares и одного года Steem мы испытали всяческие состояния сети и баги программного обеспечения. DPOS успешно прошел эти испытания и продемонстрировал способность поддерживать консенсус, обрабатывая при этом больше транзакций, чем любой другой блокчейн.

        -

        Переведено @rusteemitblog

        -

        Оригинал поста: ЗДЕСЬ

        -
        ИСТОЧНИК: https://golos.io/ru--blokcheijn/@rusteemitblog/algoritm-konsensusa-delegirovannogo-dokazatelstva-dolei-dpos-nedostayushaya-belaya-bumaga-perevod-stati-dantheman
        \ No newline at end of file diff --git a/4-documentation/blue-paper-steem-na-russkom.md b/4-documentation/blue-paper-steem-na-russkom.md deleted file mode 100644 index 1946f3aa..00000000 --- a/4-documentation/blue-paper-steem-na-russkom.md +++ /dev/null @@ -1,209 +0,0 @@ -![](https://bookchain.gitbooks.io/steem-bluepaper/content/headerimage.png) - -## Введение {#введение} - -Steem предлагает вашему вниманию масштабируемый блокчейн-протокол[1](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_1)для размещения неизменяемого и общедоступного контента, а также быстрый в использовании цифровой токен без комиссии \(под названием STEEM\)[2](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_2), позволяющий людям использовать собственную голову для заработка денег \(что можно назвать "доказательством разума"\). Обе составляющие этого протокола – и блокчейн, и токен – зависят от безопасности, неизменяемости и долгосрочности друг друга, поэтому являются неотъемлемыми частями одного целого. Steem успешно работает уже более года и к настоящему времени обошёл Bitcoin и Ethereum по количеству совершённых транзакций.[3](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_3) - -В отличие от других блокчейнов, Steem является первой базой данных с публичным доступом для хранения неизменяемого контента в виде простого текста. Также он обладает встроенным механизмом мотивации. Это делает Steem публичной платформой для публикаций, способной обмениваться информацией c любым интернет-приложением и вознаграждать тех, кто размещает наиболее ценный контент. - -Уникальные свойства криптовалютного токена STEEM делают его "умным" и "социальным" в сравнении с другими, например, Bitcoin и Ether. Причина тому – две новых особенности монеты. Первая – это пул токенов, предназначенный для побуждения пользователей к созданию контента и его курированию \(так называемый "пул вознаграждений"\). Вторая – это система голосования, использующая коллективный разум для оценки значимости контента и распределения монет согласно ей. Комбинация этих двух уникальных свойств называется Доказательством Разума, что является прямой отсылкой к Доказательству Работы[4](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_4)и подчёркивает особое значение человеческой работы в деле распространения токенов среди участников сообщества. Доказательство Разума превращает STEEM в инструмент создания постоянно растущих сообществ, который при помощи встроенной структуры вознаграждений поощряет участников вносить свой вклад в увеличение ценности сообщества. - -Помимо этих достижений в технологии блокчейна и токенов, система Steem также обладает продвинутыми функциями для улучшения пользовательского опыта, среди которых Восстановление Украденного Аккаунта[5](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_5), услуги по депонированию, продвигаемый пользователями контент, репутационная система и сберегательные счета. При всём этом время подтверждения любого действия в блокчейне составляет 3 секунды, а комиссии за все транзакции равны нулю. Всё это работает на благо миссии по обеспечению умной социальной валютой издателей контента и создателей сообществ по всему интернету. - -## Доказательство Разума: умные социальные токены {#доказательство-разума-умные-социальные-токены} - -Системы токенов, вознаграждающие пользователей за их вклад в основанное на токенах сообщество, нуждаются в механизмах формирования и оценки социальной значимости контента: мы зовём это Доказательством Мозга. - -### Пул вознаграждений \("Откуда берутся токены?"\) {#пул-вознаграждений-откуда-берутся-токены} - -Одним из наиболее новаторских \(и наиболее недопонятых\) аспектов блокчейна Steem является Пул вознаграждений – место, откуда токены распределяются среди создателей ценного контента. Чтобы понять, что такое Пул Вознаграждений, сперва необходимо уяснить тот факт, что в DPoS блокчейнах и в PoW блокчейнах токены производятся разными способами. В традиционных PoW блокчейнах токены производятся регулярно, но распределяются случайным образом среди людей, на чьих машинах производится работа \("майнеров"\). - -В отличие от криптовалют, выработанных только при помощи PoW, токены Steem генерируются с фиксированной скоростью – 1 блок каждые 3 секунды. Они распространяются среди разных действующих лиц в системе, основанной на заданных блокчейном правилах. Такими действующими лицами являются создатели контента, заверители и кураторы, которые определённым способом соревнуются между собой ради получения токенов. В отличие от привычных для PoW средств распределения, когда майнеры конкурируют грубой вычислительной силой, действующие лица в сети Steem финансово заинтересованы в конкуренции, которая выполняет задачу увеличения ценности сети. - -Заданный в декабре 2016 года объём генерирования новых токенов составлял 9,5% в год, он уменьшается на 0,01% каждые 250,000 блоков, что равно примерно 0,05% в год. Инфляция продолжит снижаться с этой скоростью, пока не достигнет 0.95%, спустя примерно 20,5 лет. - -Пул вознаграждений формируется из 75% новых токенов, создаваемых блокчейном Steem за год, откуда далее они распределяются в виде выплат создателям и кураторам контента. 15% распределяются между инвестировавшими \(на 13 недель\) владельцами токенов, и 10% делятся среди Заверителей – производителей блоков, которые сотрудничают внутри консенсус-протокола DPoS. - -#### Вознаграждения для Создателей контента и Кураторов {#вознаграждения-для-создателей-контента-и-кураторов} - -Производящие контент пользователи увеличивают стоимость всей сети путём создания материала, который привлекает на платформу новых людей, а также занимает и развлекает существующих пользователей. Это способствует распространению валюты среди всё более широкого круга пользователей и увеличивает сетевой эффект. Пользователи, которые тратят своё время на оценку контента и голосование, играют важную роль в процессе распределения валюты среди наиболее ценных пользователей. Блокчейн вознаграждает обе эти активности в соответствии с их значимостью, которая в свою очередь определяется коллективным разумом при помощи системы голосования, основанной на размере долей. - -#### Голосование долей токенов для установления распределения вознаграждений {#голосование-долей-токенов-для-установления-распределения-вознаграждений} - -Steem функционирует по принципу "один STEEM – один голос". В такой модели индивиды, наиболее значительным образом увеличившие ценность платформы, что измеряется балансом их аккаунта, оказывают наибольшее влияние на процесс начисления вознаграждений. Долю можно купить или заработать. Пользователи не могут получить дополнительное влияние путём заведения нескольких аккаунтов, поскольку один единственный аккаунт с определённым размером доли будет иметь влияние равнозначное двум аккаунтам, в совокупности владеющим долей того же размера. Единственным способом увеличения своего влияния на платформе является увеличение собственной доли. - -Помимо этого Steem позволяет использовать токены STEEM для голосования только тогда, когда они переведены на инвестиционный счет с 13-недельным графиком под названием Steem Power. Таким образом участники получают финансовый стимул голосовать так, чтобы максимизировать ценность своих STEEM в долгосрочной перспективе. - -## Скорость и масштаб в блокчейне Steem {#скорость-и-масштаб-в-блокчейне-steem} - -Блокчейн Steem проектировался как один из самых быстрых и эффективных блокчейнов из ныне существующих, способный поддерживать трафик, объём которого равен трафику социальной медиа-платформы вроде Reddit, или даже превышающий его. Steem уже обогнал Bitcoin по количеству транзакций и способен масштабироваться для поддержки 10,000 и более транзакций в секунду. - -### Делегированное Доказательство Долей \(DPoS\) {#делегированное-доказательство-долей-dpos} - -Нередко испытывая затруднения в связи с ограничениями алгоритма Доказательства Работы \(Proof-of-Work, PoW\)[6](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_6), многие блокчейны оказываются неспособны выйти за пределы трёх транзакций в секунду, что является каплей в море мирового финансового трафика. Steem требуется куда больший масштаб и скорость, чем способен предложить PoW. Поэтому за основу блокчейна взят алгоритм под названием Делегированное Доказательство Долей \(Delegated Proof of Stake, DPoS\)[7](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_7), который хоть и не столь популярен, но, тем не менее, пригоден для эксплуатации миллиардами пользователей. - -Благодаря DPoS блокчейн Steem способен генерировать новый блок каждые 3 секунды с минимальной вычислительной нагрузкой. Это означает, что блокчейн может обрабатывать больше транзакций и содержать больше информации, в том числе контента. - -Согласно правилам процедуры хардфорка, избранные в рамках DPoS заверители могут быстро и эффективно решить, следует ли проводить предложенный хардфорк или нет, что позволяет протоколу блокчейна Steem развиваться быстрее большинства других. Блокчейн Steem уже был благополучно форкнут 18 раз[8](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_8), и после каждого хардфорка только одна цепочка продолжала существование. - -### ChainBase {#chainbase} - -ChainBase[9](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_9)— это база данных стека блокчейна, которая заменила Graphene[10](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_10)в 2016 году. ChainBase обладает ускоренной загрузкой и выводом данных, поддерживает параллельный доступ к базе данных и более устойчива к сбоям, чем ее предшественник. Также она менее подвержена повторяемым нарушениям базы данных, позволяет делать мгновенные "снимки" её состояния, а также способна обрабатывать больше запросов удалённого вызова процедур из той же памяти. - -### AppBase {#appbase} - -AppBase – это первый шаг в создании мульти-чейн структуры. AppBase позволяет множеству компонентов блокчейна Steem стать модульными при помощи создания дополнительных неконсесусных блокчейнов в качестве выделенных плагинов. Эти плагины обновляются быстрее обычного, поскольку не требуют воспроизведения всего блокчейна. Это позволяет steemd[11](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_11)быть гораздо более эффективным, масштабируемым и простым в обслуживании. - -С практической точки зрения AppBase позволяет задействовать разные ядра или даже разные компьютеры для поддержания работы разных частей блокчейна Steem. Это более эффективно, чем требовать от каждого ядра и каждого компьютера в сети поддержки всего блокчейна целиком. Модульная организация блокчейна позволяет ему в полной мере использовать модульную природу компьютеров. Это одна важная ступень в долгом процессе создания полностью параллельного и целиком оптимизированного блокчейна. - -## Возможности платформы Steem {#возможности-платформы-steem} - -Блокчейн Steem имеет два основных предназначения: он является системой обработки цифровых токенов, а также мейнстримовой социальной медиа-платформой. Возможности блокчейна используются для выполнения этих двух задач, которые предоставляют пользователям опыт высшего уровня. - -### Базисные элементы, предназначенные для контентных приложений {#базисные-элементы-предназначенные-для-контентных-приложений} - -Неизменяемый реестр блокчейна Steem предлагает пользователям уникальную возможность непосредственно публиковать и перманентно хранить различные виды контента в виде обычного текста. Попав в блокчейн, данные становятся публично доступны разработчикам для использования. Разработчики могут напрямую взаимодействовать с контентом в блокчейне при помощи доступных API. Разработчики могут использовать для своих проектов такие базисные элементы, как Имена аккаунтов, Публикации, Комментарии, Голоса и Баланс аккаунтов. - -### Система собственных имен {#система-собственных-имен} - -Адреса кошельков, используемые многими блокчейн-технологиями вроде Bitcoin и Ethereum, исторически состоят из длинных строк случайных букв и цифр, что затрудняет сделки с другими пользователями в привычном онлайн социально-медийном контексте, поскольку пользователи просто не способны запомнить такие длинные адреса. Блокчейн Steem использует имя пользователя в качестве адреса кошелька, тем самым улучшая пользовательский опыт для пересылающих токены участников, поскольку они могут проверять адреса при помощи собственной памяти. - -### Доллары блокчейна Steem \(Steem Blockchain Dollars, SBD\) {#доллары-блокчейна-steem-steem-blockchain-dollars-sbd} - -Многие пользователи, даже знакомые с криптовалютами, испытывают трудности в понимании того, как "волшебные интернет-токены", которые предоставляет платформа, на самом деле обретают ценность в реальном мире. Для того, чтобы заполнить пробел между привычными фиатными денежными системами, которые используют все мейнстримовые пользователи, и криптовалютными токенами, которыми платформа вознаграждает своих участников, была создана новая валюта под названием Steem Blockchain Dollars \(SBD\). - -В токены SBD встроен механизм близкой привязки к стоимости одного доллара, поэтому получающие их пользователи имеют возможность примерно оценивать стоимость токенов в реальном долларовом эквиваленте. Также токены SBD играют роль сравнительно стабильной валюты для хранения теми, кто хочет сохранить ценность своего аккаунта по отношению к американскому доллару. Более подробные технические объяснения вы можете найти в технической белой бумаге Steem.[12](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_12) - -### Децентрализованная биржа {#децентрализованная-биржа} - -Блокчейн Steem предлагает услуги децентрализованной биржи токенов, схожей с биржей Bitshares.[13](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_13)Она позволяет пользователям торговать своими токенами STEEM и SBD на публичном децентрализованном одноранговом рынке. Пользователи могут размещать заявки на покупку и продажу, а сверка ордеров автоматически выполнятся блокчейном. Также существует публично доступный биржевой стакан и история сделок, которые пользователи могут применять для анализа рынка. Пользователи имеют возможность взаимодействовать с биржей напрямую при помощи программного интерфейса блокчейна или пользовательского графического интерфейса на сайте Steemit.com.[14](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_14) - -### Депонированные платежи {#депонированные-платежи} - -Необратимая природа транзакций в блокчейне является важнейшим свойством его безопасности. Тем не менее существует множество ситуаций, когда пользователи не могут комфортно перевести свои токены другому пользователю, при этом имея возможность получить их обратно в случае нарушения договорённости другой стороной. Блокчейн Steem предоставляет пользователям возможность отправлять друг другу монеты при участии третьей стороны, выполняющей услуги по депонированию. Пользователь, предоставляющий такие услуги, определяет, были ли выполнены условия соглашения, а также позволяет средствам либо перейти к получателю, либо вернуться к отправителю. - -### Иерархическая структура приватных ключей {#иерархическая-структура-приватных-ключей} - -Steem использует первую в своём роде иерархическую систему приватных ключей для обеспечения транзакций с низким и высоким уровнем безопасности. Транзакции с низким уровнем безопасности – это, как правило, публикация постов и комментариев. К высокому уровню относятся преимущественно переводы и изменения ключей. Такая система позволяет назначать разные уровни безопасности ключей сообразно степени их важности. - -Этими приватными ключами являются Ключ Публикации, Активный Ключ и Ключ Владельца. Ключ публикации позволяет аккаунту делать посты и комментарии, а также редактировать, голосовать, рестимить \(репостить\)[15](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_15)и подписываться на другие аккаунты или отписываться от них. Активный ключ предназначен для более важных задач, например, для перевода средств, транзакций повышения/понижения силы аккаунта, конвертации Steem долларов, голосования за заверителей, размещения рыночных ордеров и сброса ключа публикации. Ключ владельца используется только в случае крайней необходимости. Это наиболее влиятельный ключ, поскольку он может изменить любой ключ аккаунта, в том числе сам себя, и доказать право собственности во время восстановления аккаунта. В идеале он должен храниться в офлайне и использоваться лишь для смены ключей аккаунта или для восстановления взломанного аккаунта. - -Steem также упрощает использование Мастер-пароля, который шифрует все три ключа. Веб-службы могут использовать Мастер-пароль, который дешифрует и ставит подписи при обязательном использовании приватного ключа. Мастер-пароли дают пользователям возможность использовать определённые сервисы для предотвращения передачи не тех ключей на какие-либо серверы. Это позволяет создать безопасные условия для подписания на стороне клиента и улучшает пользовательский опыт. - -### Права Мульти-подписей {#права-мульти-подписей} - -Блокчейн Steem предоставляет возможность разделить права на аккаунт между несколькими субъектами. Так, несколько пользователей могут иметь одинаковые права, но для полноценной авторизации транзакции требуется подтверждение от нескольких субъектов. Это осуществляется сходным с Bitshares[16](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#fn_16)способом, когда за каждой парой публичного и приватного ключей закрепляется вес, а для права на действие задается определенный порог. Для вступления транзакции в силу ее должно подписать достаточное количество субъектов, чтобы в сумме их вес совпал с порогом или превысил его. - -### Многочисленные получатели вознаграждения {#многочисленные-получатели-вознаграждения} - -Любой пост может представлять финансовый интерес в виде вознаграждения для множества разных людей. Среди них как сам автор, так и возможные соавторы, хостинг-провайдеры, блоги, в которые встроен блок комментариев на блокчейне, а также разработчики иных инструментов. Любой веб-сайт или инструмент, использованный для создания поста или комментария, получает возможность установить способ распределения вознаграждения между сторонами. Это позволяет использовать различные формы совместной работы и даёт платформам, основанным на блокчейне Steem, право на получение части вознаграждений своих пользователей. - -### Смарт медиа токены \(Smart Media Tokens, SMT\) {#смарт-медиа-токены-smart-media-tokens-smt} - -Этот уровень протокола находится на стадии разработки. Его документация будет опубликована здесь. - -### Восстановление украденного аккаунта {#восстановление-украденного-аккаунта} - -В случае обнаружения взлома аккаунта, пользователи могут изменить свои ключи при помощи приватного ключа владельца. В том случае, если злоумышленник смог добыть приватный ключ владельца и сменить пароль аккаунта, у пользователя есть 30 дней, чтобы предоставить ранее действовавший приватный ключ для восстановления контроля над собственным аккаунтом при помощи новой технологии Steem – процесса восстановления украденного аккаунта. Эта возможность может обеспечиваться частными лицами или компаниями, которые предоставляют услуги регистрации на блокчейне Steem. Для регистратора не является обязательным предоставлять подобную услугу своим пользователям, но ее доступность позволяет улучшить опыт, получаемый пользователями этого регистратора. - -### Обеспечение безопасности с помощью временной блокировки {#обеспечение-безопасности-с-помощью-временной-блокировки} - -Если активный ключ или ключ владельца пользователя взломаны, то злоумышленник получает полный доступ ко всем финансовым средствам этого аккаунта. Поскольку транзакции в блокчейне не подлежат отмене, пользователи не имеют возможности получить свои деньги назад после того, как они были украдены. - -Блокчейн Steem позволяет пользователям хранить STEEM и SBD на сберегательном счете, средства с которого не могут быть выведены до окончания трёхдневного периода ожидания. Кроме того, STEEM, которые удерживаются в 13-недельном вестинговом периоде, выводятся строго в размере 1/13 от общей суммы в неделю и после первоначального периода ожидания в 7 дней. Такие временные блокировки не оставляют злоумышленникам возможности получить мгновенный доступ к полному объёму средств пользователя, соответственно, законный владелец имеет время на то, чтобы вернуть свой аккаунт до того, как с него будут выведены все средства. - -### Ограничение пропускной способности ради отсутствия комиссий {#ограничение-пропускной-способности-ради-отсутствия-комиссий} - -Поскольку работа заверителей полностью оплачивается за счет создания новых токенов, исчезает необходимость взимать с пользователей плату для обеспечения работы блокчейна. Единственной причиной для установления платы может быть потребность ограничивать пользователей от проведения необоснованного количества транзакций, способных негативно повлиять на производительность всего блокчейна. - -Дабы установить разумный лимит на использование системы, блокчейн задает для каждого пользователя лимит пропускной способности. Всякий раз, когда пользователь выполняет на блокчейне операции вроде перевода токенов, публикации контента и голосования, он использует часть своей пропускной способности. Если пользователь израсходовал всю свою пропускную способность, то ему придётся остановить свою деятельность и дождаться её восстановления. - -Лимиты пропускной способности зависят от загруженности сети: так, пропускная способность возрастает при низком уровне использования сети. Объём выделенной аккаунту пропускной способности прямо пропорционален количеству Steem Power, которой обладает пользователь, поэтому пользователи всегда могут увеличить свою пропускную способность, увеличив свою Steem Power. - -## Заключение {#заключение} - -Уникальная программа вознаграждения и мотивации, предлагаемая блокчейном Steem и возможностями его токена, призвана сделать Steem универсальной точкой входа в мир криптовалют для мейнстримовых пользователей. Функционал блокчейна разработан специально для привлечения широких масс людей к платформе и ее валюте. Сочетание молниеносной обработки операций и отсутствия комиссий за транзакции дает Steem все шансы стать одной из лидирующих блокчейн-технологий в мире, к тому же используемой простыми людьми. - -> 1 -> . Delegated Proof of Stake Position Paper. Grigg, 2017. -> [https://steemit.com/eos/@iang/seeking-consensus-on-consensus-dpos-or-delegated-proof-of-stake-and-the-two-generals-problem](https://steemit.com/eos/@iang/seeking-consensus-on-consensus-dpos-or-delegated-proof-of-stake-and-the-two-generals-problem) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_1) - -> 2 -> . To differentiate it from the term for its blockchain, the correct spelling of Steem’s native digital token is STEEM. -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_2) - -> 3 -> . Transaction Volumes: Transactions Per Second Report. Steem Witness and user “@roadscape”. -> [https://steemit.com/blockchain/@roadscape/tps-report-2-the-flippening](https://steemit.com/blockchain/@roadscape/tps-report-2-the-flippening) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_3) - -> 4 -> . Proof-of-Work. Wikipedia. -> [https://en.wikipedia.org/wiki/Proof-of-work\\_system](https://en.wikipedia.org/wiki/Proof-of-work/_system) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_4) - -> 5 -> . Stolen Account Recovery initiation for Steemit.com users: 07-13-2017 -> [https://steemit.com/recover\\_account\\_step\\_1](https://steemit.com/recover/_account/_step/_1) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_5) - -> 6 -> . Bitcoin Scalability Problem -> [https://en.wikipedia.org/wiki/Bitcoin\\_scalability\\_problem](https://en.wikipedia.org/wiki/Bitcoin/_scalability/_problem) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_6) - -> 7 -> . DPoS Whitepaper -> [https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper](https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_7) - -> 8 -> . -> [https://steemit.com/steemit/@steemitblog/proposing-hardfork-0-20-0-velocity](https://steemit.com/steemit/@steemitblog/proposing-hardfork-0-20-0-velocity) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_8) - -> 9 -> . ChainBase Release -> [https://steemit.com/steem/@steemitblog/announcing-steem-0-14-4-shared-db-preview-release](https://steemit.com/steem/@steemitblog/announcing-steem-0-14-4-shared-db-preview-release) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_9) - -> 10 -> . Graphene Documentation -> [http://docs.bitshares.org/](http://docs.bitshares.org/) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_10) - -> 11 -> . The component of the Steem blockchain framework responsible for processing transactions and the distribution of rewards. -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_11) - -> 12 -> . Steem Whitepaper -> [https://steem.io/SteemWhitePaper.pdf](https://steem.io/SteemWhitePaper.pdf) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_12) - -> 13 -> . Bitshares Decentralized Exchange -> [http://docs.bitshares.org/\\_downloads/bitshares-general.pdf](http://docs.bitshares.org//_downloads/bitshares-general.pdf) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_13) - -> 14 -> . Steemit.com Currency Market -> [https://steemit.com/market](https://steemit.com/market) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_14) - -> 15 -> . “Resteem” is the term used in the Steem blockchain for when a user shares the content with their followers. -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_15) - -> 16 -> . Bitshares Flexible Identity Management -> [http://docs.bitshares.org/\\_downloads/bitshares-general.pdf](http://docs.bitshares.org//_downloads/bitshares-general.pdf) -> [↩](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html#reffn_16) - - - -Оригинал \(eng.\): [PDF](https://steem.io/steem-bluepaper.pdf), [GitBook](https://www.gitbook.com/book/bookchain/steem-bluepaper/details) - -Источник \(рус.\): [Golos](https://golos.io/ru--bdokcheijn/@rusteemitblog/steem-sinyaya-bumaga), [GitBook](https://bookchain.gitbooks.io/steem-bluepaper/content/ru-RU/Bluepaper.html) - diff --git a/4-documentation/golos_whitepaper.md b/4-documentation/golos_whitepaper.md deleted file mode 100644 index 6ecfe476..00000000 --- a/4-documentation/golos_whitepaper.md +++ /dev/null @@ -1,235 +0,0 @@ -# Голос: Русскоязычная социально-медийная блокчейн-платформа - -@21xhipster, @lomashuk, @ValeryLitvin, @valzav, @vitalylvov, @mguryeva, @tomarcafe - -# Аннотация - -Согласно оригинальной бумаге Стим - это блокчейн-система, обеспечивающая развитие локальных сообществ и социальное взаимодействие, поощряющая создание качественного контента с помощью вознаграждений в криптовалюте. После 5 месяцев существования очевидно, что оригинальная платформа решает поставленные перед ней задачи для англоязычной аудитории, но при этом слабо ориентирована на поощрение взаимодействия отличных от английской языковых групп. В этом документе дано описание сети Голос, обладающей оригинальными свойствами Стим, но ориентированной на пользователей, предпочитающих Русский язык. - -# Введение - -Основные принципы функционирования базы данных Стим приведены в [переводе оригинальной бумаги](https://steemit.com/ru/@hipster/bumaga-pro-stim-chast-1) \[1\]. Эта бумага обязательна для изучения основных принципов функционирования системы, т.к. Голос является лицензированной копией \(форком\) оригинальной разработки [Стим](https://github.com/steemit/steem) \[2\]. В настоящей бумаге мы обоснуем необходимость создания отдельного блокчейна для целей локализации, опишем то, что планируем изменить в части финансового механизма, и представим механизм первоначальной дистрибьюции, а также определим вектор развития и экономический потенциал адаптированной и локализованной системы. - -# Обоснование форка - -С позиции русскоязычного автора участие в сети Стим с русскоязычным контентом нерентабельно. Согласно нашему анализу, на данный момент русскоязычным пользователям платформы Стим принадлежит не более 3% токенов сети Стим. При таком распределении природа квадратичного голосования оставляет не более \(0.03 ^ 2 = 0.0009\) .09% от общего бюджета вознаграждений на русскоязычное сообщество. Если предположить, что капитализация Стима будет составлять $100 млн., то ежегодно приблизительно $7 млн. долларов будет распределяться на вознаграждения авторам или $20 тыс. ежедневно. В таком случае ежедневное вознаграждение русскоязычных постов составит не более чем $20 на все русскоязычное сообщество. Реальные показатели могут быть немного выше, т.к. приведенная калькуляция сильно упрощена, но они не изменятся на порядок \(количество русскопишуших в мире в разы меньше количества англопишуших\). На данный момент указанная проблема решается через публикацию двуязычных постов. Такое решение не является удобным, доступным и масштабируемым. - -С позиции разработчика, который пытается адаптировать блокчейн под языковые сообщества, использование оригинального блокчейна также затруднительно. Любое независимое от Steemit приложение с возможностью регистрации пользователей ставит перед разработчиком задачу по обеспечению финансирования регистраций, а соответственно необходимость монетизации либо посредством рекламы, либо посредством продажи дополнительных функций. Учитывая относительно высокую стоимость регистрации в 7 стимов \(или $5\), решение этой задачи не является оптимальным. - -Также мы считаем, что для целей формирования русскоязычного сообщества использование расчетной единицы, равной американскому доллару, не является подходящим решением. - -Единственное возможное решение этих трех проблем – это создание альтернативного [блокчейна со своей системой нод](https://ru.wikipedia.org/wiki/Цепочка_блоков_транзакций) \[3\], дистрибьюцией и токенами, ориентированного на русскоязычную аудиторию. - -# Адаптация финансового механизма - -## ГОЛОС и Сила ГОЛОСА - -Вместо Стима и Стим-power в адаптированной сети будут использоваться токены ГОЛОС \(GOLOS\) и Сила ГОЛОСА \(GP\) соответственно. - -## Адаптация Мотивации - -Авторы, кураторы, делегаты, майнеры и инвесторы имеют идентичные права и структуру экономических стимулов оригинальной системы [Стим версии 0.14.2](https://github.com/steemit/steem/releases/tag/v0.14.2) \[4\]. Отличия кроются лишь в адаптации обязанности делегатов в отношении исследования рыночной цены голоса \(GOLOS\), а также первоначальному механизму дистрибьюции. - -## Золотой, обеспеченный ГОЛОСАМИ - -В оригинальной разработке используется Стимдоллар. Стимдоллар - это долговое обязательство блокчейна Стим выплатить 1 американский доллар Стимами в течение недели по средненедельному курсу. В блокчейне Голос будет действовать аналогичный токен, но привязанный к цене 1 миллиграмма золота - Золотой или Золотой, обеспеченный ГОЛОСАМИ \(Gold backed by GOLOS, GBG\). Несмотря на то, что большинство русскоязычного населения планеты \(или 52.6%\) являются пользователями российских рублей - государственной денежной единицы Российской Федерации, мы считаем российский рубль не подходящим для наших целей по следующим причинам: - -1. Постоянное обесценивание российского рубля как по отношению к прочим национальным валютам, так и золоту. График 1 показывает что с 2000 года по отношению к золоту рубль обесценился в 10 раз \(доллар, для сравнения, - в 5 раз\). -2. Неудобство использования рублей для пользователей из Украины, Беларуси, Казахстана и других стран, в которых Русский язык популярен. - -Историческая стабильность курса на золото делает токен, привязанный к его цене, отличным инструментом для сбережений и международных расчетов. Предложенное нами решение является надежной альтернативой для хранения безналичной ценности в привязке к цене золота без ограничений и недостатков, накладываемых традиционными финансовыми инструментами. - -![](http://i.imgur.com/IrZw7eS.jpg) -График 1. [История цены на золото](http://goldena.ru/prices/) \[5\] по отношению к USD, EUR, RUB \[5\] - -## Регистрационный Взнос - -Регистрационный взнос устанавливается в голосах делегатами таким образом, чтобы он стремился к 30 миллиграммам золота \(по курсу на момент написания статьи\) \(ориентировочно 1.5 доллара или 100 российских рублей\). На ранней стадии регистрационный взнос оплачивается cyber•Fund при регистрации на домене [https://golos.io](https://golos.io). По мере развития сети могут быть разработаны стимулы для регистрации сторонними операторами. До момента внедрения подобных стимулов в случае, если cyber•Fund откажет в предоставлении услуги по оплате регистрации, сообщество вправе скоординироваться, чтобы привлечь необходимый ресурс на открытых рынках. 8.98% резерв КиберФонда на финансирование регистраций изначально недостаточен для регистрации всех 260 млн. людей. - -## Мотивация Регистраторов - -В оригинальной разработке Стим сторонние регистраторы не имеют мотивации для регистрации пользователей. По мере развития сети будет предложен следующий механизм мотивации независимых регистраторов: Регистратор самостоятельно платит за регистрацию каждого пользователя и несет соответствующие риски в обмен на гарантию пожизненных отчислений с будущих доходов зарегистрированного пользователя. Размер таких отчислений определяется рыночным механизмом. - -## Поддержка Взаимодействия с Национальными Валютами - -Сообщество Голос является независимым и как следствие само находит ответы на подобные вопросы. Основателями такая функция не поддерживается, до тех пор пока консенсус не будет найден автоматически. - -# Адаптация первоначальной дистрибьюции - -На текущий момент около 65% денежной массы оригинального Стима находится под контролем создателей. Соответственно, система является условно децентрализованной. Такой подход является преимуществом и недостатком одновременно. С одной стороны, разработчики способны быстро достигать консенсуса и адаптировать систему под требования пользователей. С другой стороны, при условной децентрализации возникают риски некорректного ранжирования публикаций, слабой мотивации миноритарных участников и цензурирования. На данный момент все эти риски успешно смягчаются доверием к оригинальной команде разработчиков Стим. - -В целях локализации мы предлагаем более устойчивый децентрализованный механизм первоначальной дистрибьюции, который, как мы считаем, окажет положительное влияние на надежность Голоса и его дальнейшее развитие. - -## Первоначальное распределение токенов - -В Генезис блоке на аккаунте _cyberfounder_ будет создано 43 306 176 ГОЛОСов. - -В первые часы существования системы средства будут перечислены с аккаунта _cyberfounder_ на целевые счета в соответствии с определенной структурой дистрибьюции: - -* 60% к продаже в ходе публичного краудсейла или 27 072 000 ГОЛОСов -* 10% шеардроп участникам оригинального Стима или 4 512 000 ГОЛОСов -* 10% кибер•Фонду за финансирование запуска Голоса или 4 512 000 ГОЛОСов -* 8.98% резерв на развитие или 4 051 776 ГОЛОСов -* 7% вознаграждение команды основателей или 3 158 400 ГОЛОСов - -Также в течение 47 суток после запуска системы и до начала вестинга \(период подготовки и проведения краудсейла\) системой будет эмитировано 1 813 824 ГОЛОСов, а именно: - -* 3% делегатам за бутстрап сети и формирование резервной системы нод -* 1.02% баунти авторам и кураторам за подготовку и промо краудсейла - -Таким образом на момент начала вестинга \(в первые 47 суток существования системы\) будет выпущено 45 120 000 ГОЛОСов. Доли целевых фондов указанных выше представлены на этот момент. - -Вся дистрибьюция осуществляется в силе ГОЛОСА \(GP\), за исключением аккаунтов бирж включенных в шеардроп. Обоснование предложенного механизма дистрибьюции: - -## Публичный краудсейл - -Из-за юридических рисков первоначальная дистрибьюция стимов была осуществлена через майнинг. Мы считаем, что краудсейл в биткоинах - это лучшая альтернатива майнингу как способу дистрибьюции, если цель заключается не в обеспечении безопасности, а в максимально простой, доступной и понятной дистрибьюции токенов. Соответственно, команда основателей приняла решение использовать краудсейл в биткоинах как основной способ первоначальной дистрибьюции токенов. Биткоины, полученные в результате краудсейла, будут направлены на развитие протокола и его защиту. В случае с блокчейном Голоса нет законодательной базы, ограничивающей проведение краудсейла на проект социальной сети в биткоинах на территории государств Россия, Казахстан, Беларусь и Украина. - -Краудсейл начнется через 17 суток после запуска системы. Каждый будет иметь возможность зарегистрироваться при помощи социальных сетей VK, Facebook, Reddit. Краудсейл будет длиться 30 суток. 27 072 000 ГОЛОСов будет распределено всем участникам краудсейла пропорционально проинвестированным биткоинам. Во время краудсейла будет применяться следующая система бонусов для проинвестироваваших первыми: - -* 25% в первые 15 дней -* 20% с 16 дня по 18 день -* 15% с 19 дня по 21 день -* 10% с 22 дня по 24 день -* 5% с 25 дня по 27 день -* 0% с 28 дня по 30 день - -В первые сутки краудсейл будет безлимитным. Если по прошествии 24 часов после начала краудсейла не будет превышена сумма в 5000 биткоинов, краудсейл будет продолжаться еще 29 суток либо до тех пор пока объем собранных средств не достигнет 5000 биткоинов. Во время краудсейла действует лимит на продажу токенов для одного аккаунта - 100 биткоинов. - -В целях обеспечения прозрачности и доказуемости краудсейла будет использован следующий генезис-адрес: **3CWicRKHQqcj1N6fT1pC9J3hUzHw1KyPv3**. Этот адрес не предполагается использовать для непосредственного перечисления денег во время краудсейла. Вместо этого он будет использоваться для перенаправления биткоинов, перечисляемых на уникальный адрес, который будет генериться для каждого участника краудсейла. Все биткоины перечисленные на этот адрес напрямую будут считаться спонсорской поддержкой проекта. Этот адрес будет публично записываться в блокчейн Голоса как метаданные пользователя. Генезис-адрес является мультиподписной учетной записью 4 из 6, который контролируется 5 из 8 основателей + 1 независимым подписантом. Таким образом, средства, собираемые во время краудсейла, будут доказуемо собраны и прозрачно потрачены. - -## Аллокация собранных средств - -Биткоины полученные в результате публичного краудсейла будут использованы следующим образом: - -* 70% развитие протокола и приложений -* 10% оплата лицензии Стимит Инк. в соответствии с лицензионным соглашением -* 10% вознаграждение команды основателей -* 10% компенсация кибер•Фонду за финансирование запуска - -## Cофтверная лицензия - -10% шеардроп сообществу Стим является платежом за софтверную лицензию на блокчейн Стима. Это поощрение также направлено на мотивирование существующих разработчиков приложений на поддержку локализованного блокчейна. В дополнение данное решение может способствовать формированию стартовой ликвидности базового токена - ГОЛОСА, которая критична для успешного становления системы выплаты вознаграждений. Копия состояния текущих пользователей платформы Стима осуществлена в 12:00 UTC 29 Сентября 2016 года. В снимок вошло 8380 аккаунтов. Снэпшот снимался по следующей формуле: - -![Формула Снэпшота](https://ipfs.pics/ipfs/QmdgiKTmC9PakZ3cDWRxxzwTuavLjveKRU8CRKzcXGiuoB) - -Всем этим аккаунтам будет распределено по 5 ГОЛОСов в течении нескольких часов после Генезис блока. - -4 512 000 ГОЛОСов направляется на аккаунт _cyberdrop_ и распределяется между аккаунтами по следующей формуле: - -![Формула Шеардропа](https://ipfs.pics/ipfs/QmTg7vw8deWyDhxhKXdWYboQZBYz2eRSxmjjPcZA6bydhh) - -Распределение будет осуществляться скриптом перед началом вестинга. - -Аккаунтам бирж в исключительном порядке начисляются ГОЛОСа \(GOLOS\), а не Сила ГОЛОСа \(GP\) в целях мотивации обеспечения стартовой ликвидности: _poloniex_, _openledger_, _blocktrades_, _bittrex_. - -## Финансирование запуска - -10% направляется кибер•Фонду на финансирование запуска. За счет данных средств финансируется локализация и адаптация системы, юридическая поддержка, а также поддержание функционирования инфраструктуры в процессе запуска и в первое время существования системы. 4 512 000 ГОЛОСов перечисляются на адрес _cyberfund_ и контролируются Советом Директоров кибер•Фонда. - -## Резерв на развитие - -8.98% или 4 051 776 ГОЛОСов направляется аккаунту _golos_ на оплату бесплатных регистраций и резерв на разработку. Мультиподписной аккаунт _golos_ контролируется Советом Директоров кибер•Фонда, является его собственностью и не является обязательством. кибер•Фонд оставляет право делегировать регистрационную функцию, а также субсидировать независимых разработчиков из этого бюджета. - -## Вознаграждение команды основателей - -7% направляются на вознаграждение команды основателей. 8 фаундеров, выполняющих функции по запуску определенные в [дорожной карте](https://github.com/GolosChain/Roadmap/issues/1), распределяют вознаграждение равномерно. - -* Дима Стародубцев, аккаунт _hipster_ -* Валерий Литвин, аккаунт _litvintech_ -* Алексей Фрумин, аккаунт _pio_ -* Валентин Завгороднев, аккаунт _val_ -* Марина Гурьева, аккаунт _marina_ -* Константин Ломашук, аккаунт _creat0r_ -* Виталий Львов, аккаунт _vitaly-lvov_ -* Михаил Палей, аккаунт _misha_ - -Задача команды основателей - довести сеть Голоса до первой выплаты. Впоследствии Голос должен функционировать в децентрализованном режиме. Дальнейшее поддержание и развитие сети не является обязанностью команды основателей. - -Транзакции по первоначальной дистрибьюции осуществляются командой основателей от имени и по поручению блокчейна децентрализованной сети Голос. Команда основателей распределяет вознаграждение за запуск равномерно между всеми основателями. Команда основателей также контролирует мультиподписной адрес _golos_, на котором осуществляется хранение 10% ГОЛОСОВ, предназначенных для обеспечения бесплатных регистраций. - -## Обслуживание сети - -3% или 1 353 600 ГОЛОСов перечисляется делегатам за бутстрап сети и формирование резервных нод по 1 ГОЛОСу за каждый подписанный блок. Этот темп сохраняется в первые 47 суток существования сети до момента включения вестинга. - -## Баунти авторам и кураторам - -1.02% или 460 224 ГОЛОСов перечисляется в _reward\_fund\_golos_ по 0.34 ГОЛОСа в блок для обеспечения выплат авторам и кураторам в период подготовки и проведения краудсейла. - -## Первые Выплаты - -По истечению 47 суток станет доступна функция усиления ГОЛОСА. С этого момента 90% эмитируемых ГОЛОСОВ будет распределяться владельцам Силы ГОЛОСА. C этого момента дистрибьюция будет выглядеть следующим образом: - -* Награды за создание контента: 1.5 ГОЛОС в блок или 5.8125% в год, смотря что больше -* Награды за курирование: 0.5 ГОЛОС в блок или 1.9375% в год, смотря что больше -* Награды за производство блоков: 1 ГОЛОС в блок или 0.750% в год, смотря что больше -* Награды за долгосрочное инвестирование: 9 ГОЛОСов в блок - -Награды за PoW определяются как 1/21 наград за производство блоков. - -# Состав проекта и Риски - -Голос это проект исключительно в области разработки программного обеспечения. Весь проект сводится к трем основным репозиториям: - -* [Код валидирующего клиента](https://github.com/GolosChain/golos) \[6\] -* [Код веб-клиента](https://github.com/GolosChain/tulupchik) \[7\] -* [Вики проекта](https://github.com/GolosChain/wiki) \[8\] - -В связи с этим проект содержит существенные риски связанные с расхождением намерений разработчиков \(весь контент репозитория Вики, в т.ч. контент этого документа\) и фактической реализацией предложенных механизмов \(код валидирующего клиента\), а также реализацией отображения предложенных механизмов \(код веб-клиента\). В случае, если произойдет событие, в результате которого будет выявлено существенное расхождение между намерениями и имплементацией код имплементации является решающим. Также в таком случае Делегаты вправе достигать консенсуса в целях принятия решения по устранению подобных нежелательных событий. Мы рекомендуем следующий уровень существенности оценки такого негативного события, в результате которого делегаты могут пересмотреть ход истории и/или скорректировать консенсус-зависимый код: более 1% от капитализации. - -Пользователям сети Голос необходимо осознавать, что исходный код проекта может содержать критические ошибки, последствия которых не предсказуемы. Исходный код проекта Голос наследует оригинальную лицензию Стимит Инк. - -# Мощь ГОЛОСА - -## Экономический рост - -Блокчейн-экономика с момента своего создания в среднем растет на 15.8% ежемесячно \(с момента первого замера цены 1 биткоина\) \[9\], чего нельзя сказать о традиционных экономиках. В традиционной экономике в регулирование экономической деятельности вмешивается государственный аппарат и централизованные банковские системы. Становится очевидно, что это плохо работает. Низкая прозрачность всех финансовых транзакций является фундаментальной причиной неудач. Альтернативой является децентрализованная система, в которой контроль над системой не сконцентрирован в руках небольшой группы лиц, а распределен равномерно и справедливо среди всех участников системы, в т.ч. обычных граждан. - -Система открыта и доступна всем одинаково. В основе системы лежит криптография, экономика, теория игр, открытый компьютерный код и верифицируемая публичная база данных. Система запрограммирована так, чтобы условие свободы транзакций выполнялось за счет согласия всех участников системы. Государства, бизнесы, некоммерческие структуры, сообщества и абсолютно все люди имеют право участвовать в процессе развития блокчейн-систем, в том числе Голоса. Широкое использование Голоса позволит обеспечить динамику экономического роста, недоступную для традиционных локализованных систем. - -## Поддержка русскоязычного населения - -Голос является языковым сообществом. Национальность и гражданство не имеют для него значения. Если кто-то хочет выражать свои мысли на Русском языке, то он может делать это в Голосе. [3,7% населения планеты или 260 млн. человек](https://ru.wikipedia.org/wiki/Русский_язык) говорит по-русски \[10\]. При этом для 166 млн. людей Русский язык является родным. Больше всего пользователей Русского языка находится в России - 137.5 млн. человек. - -Важной составляющей развития и выживаемости любого сообщества является возможность реализации своего права на свободу голоса. Мы считаем, что Голос является ресурсом необходимым для всего русскоговорящего сообщества, чтобы обеспечить реализацию права каждого русскоговорящего на свободу слова. Голос идеально подходит для реализации данной функции, поскольку является публичным криптографически и экономически верифицируемым инструментом общественного мнения, в котором обеспечивается приватность и безопасность пользователей сети. Мы считаем, что приватность и безопасность - это фундаментальное природное право \(в т.ч. в цифровых сетях\), которое является необходимым условием развития языковой культуры нецензурируемых и свободных коммуникаций. - -## Доступность образования - -Сообщество Голоса уделяет серьезную роль образованию. Голос - площадка для аккумулирования качественного контента. - -## Масштабируемость и производительность - -В текущем виде технология Graphene поддерживает до 10 тыс. транзакций в секунду. При условии если все 260 млн. человек будут делать 10 транзакций в день сеть приблизится к своей пиковой нагрузке, после чего будет модифицирован коммуникационный протокол, который позволит увеличить предложение до 100 транзакций в день на каждого русскоязычного жителя. - -Подобный запас для масштабирования необходим для обеспечения успешного развития проекта с момента запуска сети. т.к. технология Graphene позволяет производить блоки со стабильным интервалом в 3 секунды; среднее время первого подтверждения из сети равняется 1,5 секунды, что является комфортным для использования внутри привычных пользователям веб и мобильных приложений. - -## Будущее Голоса - -Потенциал системы Голос не ограничен производством контента. Graphene является мощной платформой, которая позволит создавать разные приложения, в том числе такие как: - -* создание пользовательских транзакций \(аналогичные OP\_Return в биткоин\) -* включение плагинов на C++ в ядро протокола \[ссылка на статью Дена\] -* запуск сторонних цепочек аналогичных Биткоину \[Blockstream\] или Лиску -* выполнение тюринг-полных контрактов в сторонних цепочках с использованием EVM, WREN или любой другой виртуализированной среды. - -Например, одним из приложений может быть альтернативная паспортная система. В случае становления надежной и стабильной финансовой системы внутри Голоса появится спрос на физическую верификацию участников. Мы можем предложить криптографическую паспортную систему, основанную на принципе взаимной верификации. Каждый участник системы может верифицировать каждого участника системы. Таким образом, блокчейн сможет вычислять статус верификации каждого отдельного участника. Эта задача уже решена алгоритмически на момент запуска системы, но не будет внедрена до тех пор, пока не возникнет такая необходимость. - -## Заключение - -Мы предложили механизмы адаптации технологии блокчейна Стим для целей формирования русскоязычного сообщества Голос. Возможности системы не ограничены озвученными предложениями, а сама система легко достраиваема и адаптируема под нужды русскоязычного сообщества. - -# Ссылки - -1. Перевод бумаги про Стим. [https://steemit.com/ru/@hipster/bumaga-pro-stim-chast-1](https://steemit.com/ru/@hipster/bumaga-pro-stim-chast-1) -2. Исходный код Стим. [https://github.com/steemit/steem](https://github.com/steemit/steem) -3. Статья Блокчейн на Википедии. [https://ru.wikipedia.org/wiki/Цепочка\_блоков\_транзакций](https://ru.wikipedia.org/wiki/Цепочка_блоков_транзакций) -4. Релиз Стим 0.14.2 [https://github.com/steemit/steem/releases/tag/v0.14.2](https://github.com/steemit/steem/releases/tag/v0.14.2) -5. История цены на золото. [http://goldena.ru/prices/](http://goldena.ru/prices/) -6. Код валидирующего клиента. [https://github.com/GolosChain/golos](https://github.com/GolosChain/golos) -7. Код веб-клиента. [https://github.com/GolosChain/tulupchik](https://github.com/GolosChain/tulupchik) -8. Вики проекта [https://github.com/GolosChain/wiki](https://github.com/GolosChain/wiki) -9. КиберФонд. [https://cyber.fund/](https://cyber.fund/) -10. Статья о русском языке на Википедии. [https://ru.wikipedia.org/wiki/Русский\_язык](https://ru.wikipedia.org/wiki/Русский_язык) - - - diff --git a/4-documentation/steem_whitepaper.md b/4-documentation/steem_whitepaper.md deleted file mode 100644 index 5fac698d..00000000 --- a/4-documentation/steem_whitepaper.md +++ /dev/null @@ -1,647 +0,0 @@ -> This effort has been done as an experiment for bootstrapping Russian speaking segment of Steem community. Russian segment is one of the most active on Steem excluding English. I hope that helps to engage more smart people who don't understand English. I'd like to receive any feedback, especially from @val, as you are the only Russian speaking guy from the core development. - -> В оригинале очень часто используются слова *to contribute*, *contributor*. Я долго думал как это перевести. По моему мнению слово *вклад* не совсем корректно отражает смысловую природу относительно проекта Стим. В свою очередь термин *контрибуция* в русском языке имеет совершенно [другое значение](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%86%D0%B8%D1%8F). Я решил использовать слова *контрибьютить*, *контрибьютор* подразумевая созвучность с английским словом *beauty* (произносится как *бьюти*) - красота. - -> Контрибьютить - делать что-то прекрасное совместно - -> Контрибьютор - тот, кто делает что-то прекрасное совместно - -> В этом тексте наверняка содержится много неточностей, грамматических и пунктуационных ошибок (особенно пунктуационных). Очень прошу вместо критики делать пул риквесты в [этот файл](https://github.com/21xhipster/blog/blob/master/%D0%91%D1%83%D0%BC%D0%B0%D0%B3%D0%B0%20%D0%BF%D1%80%D0%BE%20%D0%A1%D1%82%D0%B8%D0%BC.md). Если есть желание за такую контрибьюцию получить вознаграждение $10 - $20 оставляйте в комментарии к этому посту ссылку на пул риквест. Также с удовольствием отблагодарю за качественно перерисованные и русифицированные иллюстрации. - -> Перевод осуществлен при активной поддержке сообщества #cyberfund - -# Стим: Мотивированная Социально-Медийная Блокчейн Платформа -@dan, @ned, @val, @ben, @jamesc, @michael-a -Март 2016. [Оригинал](https://steem.io/SteemWhitePaper.pdf) - -Русский перевод, адаптация и актуализация: @hipster -Июль 2016 - -# Аннотация -Стим - это блокчейн база данных, поддерживающая развитие сообщества и его социальных взаимодействий с помощь вознаграждений в криптовалюте. Стим объединяет социально-медийную концепцию с концептом криптовалют и учитывает уроки полученные при создании криптовалют, так же их сообществ. Важным ключом вдохновляющим на участие в сообществе, валюте или экономике со свободным рынком, - является справедливая учетная система, которая полноценно отражает вклад каждого участника. Стим - это первая криптовалюта, которая стремится точно и прозрачно вознаграждать неограниченное количество индивидов, делающих субъективные вклады в сообщество. - -# Введение -Суммарно, контент генерируемый пользователями создал миллиарды долларов (или триллионы рублей) акционерам компаний владеющих социальными сетями, такими как [Реддит](reddit.com), [Фейсбук](facebook.com), [Твиттер](twitter.com), [Вконтакте](vkontakte.ru) и [Одноклассники](https://ok.ru/). В 2014 году [Реддит](http://www.forbes.com/sites/erikamorphy/2014/10/01/reddits-cryptocurrency-could-have-many-uses/#3b05ce4432b9) предположил, что его платформа может быть улучшена, если каждый, кто пользуется reddit.com публикуя истории, комментируя и голосуя, был бы вознагражден справедливой долей в Reddit Inc. Стим нацелен на поддержку социальных медиа и онлайн сообществ, возвращая львиную долю своей стоимости в криптовалюте людям, которые делают ценные вклады (далее контрибьюции, т.к. имеются ввиду не только денежные вклады, но и действия, такие как голосования и публикации). В процессе этого создается валюта, которая сможет покорить сердца широких масс, включая людей которые еще не участвовали в криптовалютной экономике. - -Существует несколько ключевых принципов которые были использованы в дизайне Стима. Самый важный принцип - *принцип справедливой доли*. Если кто-то участвует в каком-лиоб предприятии, то он должен зарабатывать пропорционально собственность в этом предприятии или возвратный долг. Это принцип, который применим ко всем стартапам, когда они распределяют доли при основании компании, и в процессе увеличения капитализации. - -Второй принцип: *все формы капитала одинаково ценны*. Это означает, что ограниченное время и внимание в процессе производства своего контента и курирования чужого контента, так же ценны, как контрибьюции тех, кто контрибьютит свои ограниченные денежные ресурсы. Это концепт *[sweat equity](http://www.investopedia.com/terms/s/sweatequity.asp)* (сладкой доли), и этот концепт было проблематично реализовать до существования криптовалют для больше чем дюжины индивидов. - -Третий принцип: *сообщество производит продукты для того, чтобы служить своим членам*. Этот принцип работает в кредитных кооперативах, пищевых кооперативах, которые служат своим членам вместо того, чтобы продавать продукты и услуги для людей, которые не состоят в сообществе. - -Стим сообщество обеспечивает следующие услуги для своих членов: -1. Курируемый источник новостей и мнений -2. Возможность получить ответы высокого качества на персонализированные вопросы -3. Стабильная криптовалюта привязанная к американскому доллару -4. Бесплатные платежи -5. Работа по предоставлению услуг для других членов - -Целенаправленная переориентация Стима на экономические стимулы имеет потенциал производить более справедливые и уникальные результаты для всех людей вовлеченных в социальные медиа и криптовалюты, чем те, что существовали до этого. В этой бумаге мы исследуем существующие экономические стимулы и продемонстрируем как стимулы Стима могут влиять на лучшие результаты для большинства участников. - -# Определение Контрибьюции -Стим разработан с нуля для решения ключевых проблем с адаптацией и монетизацией экономики, основанной на социальных медиа. Наш тезис в том, что те же самые техники используемые для роста лидирующих социальных медиа могут быть использованы для становления успешной криптовалюты. Экономические стимулы возможные благодаря криптовалюте и могут ускорить рост новой социально-медийной платформы. Мы верим, что синергия между социальными медиа и криптовалютами даст Стиму мощное конкурентное преимущество на рынке. - -Проблема, которую решает Стим - это создание алгоритма для оценки индивидуальных контрибьюций, которые большинство сообщества оценивает как справедливая оценка субъективных вкладов и ценностей каждого контрибьютора. В идеальном мире члены сообщества могли бы сотрудничать для того, чтобы оценить контрибьюцию друг друга, и определить справедливую компенсацию. В реальном мире, алгоритмы должны быть разработаны с учетом иммунитета к целенаправленным манипуляциям в целях получения дохода. Любое распространенное злоупотребление скоринговой системой может уничтожить веру членов сообщества в справедливую экономическую систему. - -Существующие платформы работают по принципу один пользователь - один голос. Это создает окружение в котором рейтинги могут быть манипулированы при помощи [атак Сибиллы](https://en.wikipedia.org/wiki/Sybil_attack), а провайдеры услуг на таких платформах должны активно идентифицировать и блокировать злоупотребления. Люди уже пробовали манипулировать скоринговыми алгоритмами Реддита, Фейсбука и Твиттера. В таких манипуляциях единственная награда - это веб-трафик или цензура. - -Фундаментальная единица учета в Стиме - это стим, криптовалютный токен. Стим функционирует по принципу один стим - один голос. Эта модель подразумевает, что действия индивидов оцениваются по учетному балансу тех, кто их оценивает. Более того, Стим позволяет своим членам голосовать используя стимы (тут и далее *стим* употребляется к денежная единица, *Стим* - как протокол, система (англ. Steem)) только в случае если они перечислены на долгосрочный инвестиционный счет. Такие стимы называются *стим-мощь*. При помощи этой модели члены имеют финансовые стимулы голосовать способом, максимизирующим долгосрочную ценность Стима. - -Стим разработан вокруг достаточно простого концепта: значимая контрибьюция каждого должна быть распознана как стоимость, которую она добавляет. Когда значимые контрибьюции каждого распознаются, люди продолжают контрибьютить, и сообщество растет. Любой дисбаланс в том, кто сколько дает и сколько получает, приводит в неустойчивому положению системы. В конце концов, те кто дают - устают давать тем кто берет, и уходят из сообщества. - -Проблема в создании системы способной идентифицировать какие контрибьюции необходимы, а также их относительную стоимость таким образом, чтобы она работала для неограниченного количества людей. - -Доказанная система оценки и вознаграждения - это свободный рынок. Свободный рынок может быть рассмотрен как одно сообщество, в котором каждый торгует с каждым, а вознаграждения перераспределяются через прибыли и убытки. Рыночная система вознаграждает тех, кто обеспечивает ценность другим, и штрафует тех, кто потребляет больше ценности чем производит. Свободный рынок поддерживает много разных валют, а деньги это просто товар, который каждый находит простым для обмена. - -Так как свободный рынок - это доказанная система, заманчиво создать систему основанную на свободном рынке, в которой потребители контента напрямую платят производителям контента. Однако, прямые платежи не эффективны, и в действительности нежизнеспособны для создания и курирования контента. Ценность большинства контента настолько ничтожна в сравнении с когнитивными, финансовыми и альтернативными затратами, что очень мало людей хотят оставлять на чай. Изобилие бесплатных альтернатив показывает, что вынуждение к оплате заставляет читателей уходить куда-то еще. Было несколько попыток реализовать микроплатежи за каждую статью от читателей авторам, но ни один из таких проектов не стал широко популярным. - -Стим разработан для того, чтобы сделать эффективные микроплатежи для всяких контрибьюций меняя экономическое уравнение. Читателям теперь не надо решать хотят или не хотят они заплатить кому-то из собственного кармана. Взамен, они могут голосовать за контент, а Стим будет использовать их голоса для определения вознаграждений. Это означает, что людям дается привычный и общепринятый интерфейс, и им не надо будет нести когнитивные, финансовые и альтернативные затраты ассоциированные с традиционными микроплатежными и типичными платформами. - -Голосование сообщества критично для Стима, чтобы точно распределять платежи контрибьюторам. Голосование таким образом может быть рассмотрено как ключевой вид контрибьюции, и также достойно вознаграждения само по себе. Некоторые платформы, такие как Slashdot, используют [мета-модерацию](https://en.wikipedia.org/wiki/Meta-moderation_system) как способ вознаграждения честных модераторов. Стим решил вознаграждать тех, что контрибьютит больше в общее продвижение каждого кусочка контента, и вознаграждает голосующих пропорционально вознаграждению, которое оплаченно автору. - -Существуют другие формы вклада, которые Стим признает и вознаграждает используя объективные метрики. В числе таких вознаграждений: валидация транзакций, майнинг через Proof-of-Work (далее - доказательство работой), вознаграждение за ликвидность и жалобы на недобросовестных производителей блоков. - -# Способы Контрибьюции - -Эта секция описывает идеи стоящие за Стимом и его вознаграждениями людям, которые обеспечивают измеримые и наполненные смыслом контрибьюции в Стим сообщество. - -## Контрибьюции Капиталом -Существует два способа которые может предложить сообщество для привлечения капитала: долг и собственность. Те, кто покупают собственность получают прибыль когда сообщество растет, но теряют если сообщество уменьшается. Тем кто покупает долг гарантируется конкретное количество процентного дохода, но при этом отсутствует вознаграждение за рост сообщества. Оба типа контрибьюции капитала ценны для роста сообщества и ценности ее валюты. Дополнительно существует два типа собственности, которыми можно обладать: ликвидная собственность и инвестиционная собственность. Инвестиционная собственность обеспечивает долгосрочной гарантией, но не может быть продана в определенный период времени. - -Сеть Стим называет эти разные классы активов - стим (англ. steem, тикер STEEM), стим-мощь (англ. steam power, тикер SP) и стим-баксы (англ. steem dollars, тикер SMD). - -## Стим (STEEM) -Стим - это фундаментальный единица учета в блокчейне Стим. Все другие токены наследуют свою стоимость от ценности стима. Стимы имеет смысл держать короткий промежуток времени, когда необходима ликвидность. Для того, чтобы войти или выйти из платформы Стим необходимо купить или продать стимы. После приобретения стимов они должны быть конвертированы в стим-мощь или стимбаксы для избежания последствий размытия в долгосрочном периоде. - -Стим постоянно увеличивает количество стимов на 100% в год в целях реализации системы мотивирования. Ликвидные стимы не конвертированные в стим-мощь размываются на ~0.19% ежедневно. На первый взгляд такая ставка может показаться высокой. Но для транзакций которые занимают менее 10 дней это все равно дешевле чем комиссии кредитных карт за процессинг. Более того, ежедневное создание токенов незначительно по отношению к дневной волатильности. - -Можно легко потерять более 3% по причине ценовых колебаний купив биткоины (или любую другую криптовалюту) и продав их на 10 дней позже. Обычно только комиссионые бирж составляют более чем 0.4% при покупке и продажи биткоинов в тот же день. Таким образом процент инфляции не значителен в период когда среднестатистический индивид держит стим. - -Большая часть инфляции - это по факту учетный артефакт, а не действительное перераспределение богатства. 90% инфляции не связанной со стимбаксами распределяется обратно держателям стимов пропорционально оценке их стим-мощи. Таким образом инфляцию можно рассматривать как отчисление 10% процентов инфляции не связанной со стимбаксами тем, кто контрибьютит в развитие сообщества. - -## Стим-мощь (SP) -Стартапы требуют долгосрочный коммитмент капитала. Обычно инвесторы стартапов планируют ждать года перед тем, как продать свои акции и зафиксировать прибыль. Без долгосрочных гарантий стартап, пытающийся закрыть очередной раунд инвестиции через продажу дополнительных акций, будет конкурировать с существующими акционерами, которые могут искать способы фиксации прибыли. Смышленые инвестора хотят чтобы их капитал способствовал росту компании, но рост не может происходить, если новый капитал выдается тем, кто ищет способы выйти. - -В долгосрочных гарантиях кроется существенная ценность, потому-что они дают возможность сообществам планировать наперед. Долгосрочные гарантии акционеров также способствуют обеспечению долгосрочного роста, а не созданию краткосрочных пузырей. - -В криптовалютном сообществе спекулянты прыгают с одной криптовалюты на другую, основываясь в основном на ожиданиях роста в краткосрочном периоде. Стим хочет построить сообщество, которое принадлежит и полностью контролируется людьми, которые ориентируются на долгосрочную перспективу. - -Стим стремится поощрять долгосрочный рост, поэтому запрограммировано направлять 9 стимов держателям стим-мощи на каждый 1 стим, создаваемый для обеспечения роста путем стимуляции контрибьюции. Со временем это приведет к тому, что отношение всех балансов стим-мощи к общему количеству стим балансов будет равно 9:1. Вероятно, это соотношение будет немного больше чем 9:1 из-за продолжающегося роста стим-мощи от вновь напечатанных стимов. Это также означает, что долгосрочные держатели практически полностью защищены от размытия используемого для того, чтобы профинансировать рост. - -Стим-мощь может быть конвертирована назад в стимы в течение 2 лет по 104 равных недельных выплаты. 1 стим-мощь может быть рассмотрена как акция в пуле стимов. Сеть автоматически добавляет стим в этот пул каждый блок. В любой момент пользователи могут конвертировать стимы в стим-мощь по тому же курсу, что и количество стимов в инвестиционном пуле по отношению к общему количеству стим-мощи. Конвертация стимов в стим-мощь не размывает текущих держателей стим-мощи. К счастью, стим-мощь конвертируется обратно по текущему курсу. Индивиды гарантированно получают больше стимов в будущем, чем первоначально конвертировано в стим-мощь. - -Баланс стим-мощи неперемещаем и неделим за исключением автоматических периодических запросов на конвертацию. Это означает, что стим-мощью нельзя легко торговать на криптовалютных биржах. - -Стим-мощь требуется для голосования в поддержку или против контента. Это означает, что стим-мощь - это токен доступа, который дает своим держателям эксклюзивные права внутри платформы Стим. - -Конвертация из стимов в стим-мощь называется *усилением*, а перевод из стим-мощи в стимы называется *ослаблением*. Кто угодно может ослаблять свои стимы в течение двух лет, и кто угодно может моментально их усилить. - -## Стимбаксы (SMD) -Стабильность - это важное свойство успешных глобальных экономик. Без стабильности люди во всем мире не могут нести низкие когнитивные затраты в процессе коммерческой деятельности или накопления капитала. Вследствие того, что стабильность - это важное свойство успешных экономик, был разработан стим-бакс, как попытка принести стабильность в мир криптовалют, и людям, которые пользуются сетью Стим. - -Стим-баксы создаются механизмом похожим на конвертируемый займ, который часто используется в стартапах. В мире стартапов конвертируемый займ это краткосрочный долговой инструмент, который может быть конвертирован в собственность по курсу определяемому в будущем, как правило в период следующего раунда инвестиций. Токен стим может быть рассмотрен как собственность в сообществе, в то время как конвертируемый займ - стим-бакс, может быть рассмотрен как долг деноминированный в американских долларах. Конвертируемый займ позволяет держателю конвертировать его в токен собственности, которым этот долг обеспечен с минимальными предупреждениями по справедливой рыночной цене. Создание конвертируемых в токены собственности долларов позволяет блокчейнам наращивать их сетевые эффекты, в то же время максимизируя возврат для держателей токенов собственности. - -Создание стим-баксов требует: -- комбинацию мер по обеспечению надежного потока ценовых данных -- правил для предотвращения злоупотреблений -- ликвидность. - -Обеспечение надежного потока ценовых данных (далее ценовой фид от англ. price feed) включает три фактора: минимизация последствий некорректного ценового фида, максимизация стоимости производства некорректного ценового фида и минимизация значимости временного фактора. - -### Минимизация Недоброкачественных Ценовых Фидов -Держатели стим-мощи избирают других людей, делегатов, (в оригинале witness - свидетель. Но так как по сути эта роль подразумевает гораздо более широкие полномочия чем подписание блоков, я решил использовать термин делегат) для публикации ценовых фидов. Предполагается, что эти избранные индивиды доверенны теми, кто поставили свои инвестиции на качество ценового фида. Оплачивая делегатов, Стим создает рыночную конкуренцию на право заработка по производству ценовых фидов. Чем лучше оплачивается труд производителей фидов, тем больше они теряют при публикации недостоверной информации. - -Учитывая факт, что производители ценовых фидов доверенны и избранны, актуальная цена, используемая для конверсии, может быть определена как медиана совокупности ценовых фидов. Таким образом любое меньшинство индивидуальных производителей фидов, поставляющих сильно различающиеся данные, имеет минимальное влияние на текущую медиану, одновременно оставляя возможность повлиять на репутацию такого меньшинства. - -Даже если все производители фидов честные, возможна ситуация когда большинство производителей фидов будут подвержены последствиям событий, которые они не контролируют. Сеть Стим разработана устойчивой к краткосрочным повреждения медианы цены в момент, когда сообщество активно работает над решением проблемы. Одним из примеров проблемы, которая может занять некоторое время на исправление, это краткосрочная манипуляция рынком. Манипуляции рынком сложны и затратны для манипуляций на протяжении продолжительного периода. Другим примером может быть сбой централизованной биржи или повреждение данных публикуемой биржей. - -Стим сглаживает краткосрочные ценовые колебания используя медиану цены за неделю. Публикуемая медиана цены сэмплируется на ежечасной основе. - -До тех пор пока повреждение ценового фида продолжается менее чем половину плавающей медианы временного окна, такое повреждение будет ничтожным образом влиять на цену конверсии. В случае если ценовой фид был поврежден, участники сети имеют возможность исключить коррумпированного производителя ценового фида до момента, когда поврежденный ценовой фид сможет сильно повлиять на цену конверсии. Важно еще и то, что такой подход дает возможность производителям фидов определять и исправлять проблемы до момента, когда ценовой фид повлияет на цену. - -С временным окном в одну неделю у сообщества есть три с половиной дня на то, чтобы решить любые возникающие вопросы с повреждением ценового фида. - -### Смягчение Временных Атак -Участники рынка имеют доступ к информации быстрее, чем может отреагировать недельное окно плавающей медианы конверсионной цены блокчейна. Эта информация может быть использована для обогащения трейдеров за счет сообщества. Если происходит внезапный рост ценности стимов, трейдеры могут отправлять стим-баксы на конверсию по старой, более низкой цене, и затем продавать стимы, которые они получают по новой, более высокой цене с минимальным риском. - -Стим ограничивает правила игры требуя, чтобы все запросы на конверсию были отложены на одну неделю. Это означает, что ни трейдеры, ни блокчейн не имеют никакого информационного преимущества относительно цены на момент исполнения запроса на конверсию. - -### Минимизация Злоупотреблений с Конверсией -Если люди смогут свободно конвертировать стим-баксы в обоих направлениях, трейдеры смогут получить преимущество на конверсионной ставке блокчейна, торгуя на большие объемы без изменения цены. Торговцы которые заметили существенный подъем цены, смогли бы конвертировать стим-баксы по более высокой цене (когда это максимально рискованно), а затем конвертировать обратно после коррекции. Стим протокол защищает сообщество от подобного рода злоупотреблений позволяя людям конвертировать стим-баксы в стимы, но не наоборот. - -Блокчейн решает как и когда создавать стим-баксы, и кто их должен получить. Это держит уровень создания стим-баксов стабильным и убирает всякие возможности для злоупотреблений. - -### Ликвидность -Факт того, что стим-баксы могут быть конвертированы в стимы по справедливой цене в разумный промежуток времени не означает, что такой инструмент может быть рассмотрен как надежная замена доллару. Такие активы требуют достаточной ликвидности на рынке, чтобы сделать возможным моментальные конверсии между стимом и стим-баксами. Меры, которые обязан предпринять блокчейн для того, чтобы избежать злоупотреблений, приводят к снижению качества конвертируемых долларов. Для компенсации потери качества, блокчейн может предложить вознаграждения с фиксированной стоимостью поставщикам ликвидности. В то время как потенциальные потери от манипуляций и злоупотреблений неограниченны, стоимость стимуляции ликвидностью может быть фиксированной. - -Поставщики ликвидности покупают, а также продают стим-баксы и стимы. Они берут на себя большинство краткосрочных ценовых рисков и долгосрочный риск ценового фида, давая оставшимся участникам рынка высококачественный, экстремально ликвидный рынок на котором можно торговать. - -В Стиме предусмотрен блокчейн рынок между стим-баксами и стимами. Пользователи могут зарабатывать вознаграждение, обеспечивая ликвидность по обоим сторонам рынка. Блокчейн использует простой алгоритм для ранжирования предоставления и потребления ликвидности каждым пользователем. - -Пользователь считается поставщиком ликвидности, если у него открыт ордер как минимум 30 минут, и этот ордер в конце концов выполнен. Если ордер отменен перед исполнением считается, что пользователь не обеспечил ликвидность. - -Пользователь должен обеспечивать ликвидность по обоим сторонам стакана для того, чтобы претендовать на вознаграждение. Также ликвидность должна быть обеспечена равномерно во времени. Используется следующий скоринговый алгоритм: - -``` -Очки Ликвидности = Сумма объема покупок x Сумма объем продаж -``` - -Каждый час аккаунт с самым большим количеством очков ликвидности получает 1200 стимов. После получения вознаграждения очки ликвидности для такого аккаунта сбрасываются до нуля. Очки аккаунта, который работает неделю без зарабатывания очков ликвидности, также сбрасываются на 0. Это означает, что поставщик ликвидности обеспечивает большое количество ликвидности за малое количество времени или малое количество ликвидности за продолжительное количество времени. Все такие поставщики получают пропорциональное количество вознаграждений. В случае, если сумма объемов покупок или сумма объемов продаж отрицательная, в таком случае очки ликвидности считаются равными 0. - -### Устойчивое Соотношение Собственности к Долгам -Если стим рассматривать как собственность во всем предложении стимов, тогда конвертируемый в стим доллар может быть рассмотрен как долг. Если соотношение долгов к собственности становится слишком высоким, валюта может стать нестабильной. Конверсии стим-баксов в стимы могут драматическим образом увеличивать объем стимов, что в свою очередь будет приводить к их продаже на рынке, тем самым оказывая сильное давление на цену. Постоянные конверсии из стим-баксов в стимы требуют выпуска еще большего количества стимов. Если это не контролировать, то система коллапсирует, оставляя собственность, обеспеченную горой долгов. Чем выше становится коэффициент *долг / собственность*, тем меньше новых инвесторов будут хотеть принести капитал к столу. - -На каждый 1 стим-бакс, Стим создает 19 стимов конвертированных в стим-мощь. Это означает, что максимально возможный коэффициент долг / собственность, в условиях стабильных рынков, составит 1:19 или в районе 5%. Если стим резко потеряет в цене 50%, тогда соотношение вырастет до 10%. 88% падение цены стима может привести к соотношению 40%. Предполагается, что стоимость стима в конце концов стабилизируется, а отношение долга к собственному капиталу естественным образом вернется к целевым 5%. - -Идея поддерживать консервативные 5% в том, что даже если все долги конвертированы и проданы на рынке, то должно быть достаточное количество покупателей, при этом относительное размытие собственников должно оставаться относительно низким. - -Быстрое изменение цены стима может драматическим образом изменять коэффициент долга по отношению к собственному капиталу. Процентные пороги используемые для вычисления количества создаваемых стимов основаны на общем количестве токенов, включая стоимость стимов и стимбаксов (по оценке текущего ценового фида). - -### Процентная ставка -Стим-баксы платят держателям процентный доход. Процентная ставка устанавливается теми же самыми людьми, которые публикуют ценовые фиды таким образом, чтобы можно было адаптироваться к изменяющимся рыночным условиям. Долги всегда означают риски для заемщика. Если кто-то держит стим-баксы не погашая их, он очевидным способом кредитует сообщество стоимостью этих долларов. Такие люди верят, что в определенный момент времени в будущем будет кто-то, кто купит стим-баксы у них за американский доллар, или спекулянты и инвесторы захотят купить стимы, в которые всегда можно конвертировать стим-баксы. - -Держатели стимов и стим-мощи получают финансовый левередж, когда члены сообщества имеют желание держать стим-баксы. Этот левередж усиляет результаты роста и вносит свой вклад в развитие Стима. Держатели стимов страдают от постоянного размывания если цена падает. Криптовалютные проекты показали, что доходы от роста пользовательской базы, которые желают доверять сети свой капитал, добавляют гораздо больше ценности сети, чем любое размытие, которое может случиться во время разворота цены в обратном направлении. - -### Установка ценовых фидов -Проницательные читатели поймут, что актив, платящий процент с ограниченным предложением, может торговаться выше или ниже, чем стоимость обеспечивающего актива, в зависимости от возможностей зарабатывать процент по такому же активу. При высокой процентной ставке, выплачиваемой по активу, привязанному к американскому доллару, много людей будут желать купить ограниченный объем стим-баксов до тех пор пока он больше не будет стоить 1 американский доллар. В любой экономической системе существует принцип известный как *[Невозможная Троица](https://en.wikipedia.org/wiki/Impossible_trinity)*, который постулирует, что система не может иметь сразу три свойства в один момент времени: -- Стабильная обменная ставка -- Свободное движение капитала -- Независимая денежная политика - -Если производители ценовых фидов Стима будут иметь независимую денежную политику позволяющую создавать или уничтожать стим-баксы, в то же время сохраняя полный контроль над процентной ставкой, тогда у них возникнут проблемы. Невозможная Троица говорит, что стимбаксы либо нуждаются в ограничении движения капитала, либо должны иметь нестабильный обменный курс по отношению к доллару, либо иметь ограниченный контроль над процентной ставкой. - -Ключевая задача производителей ценовых фидов - это обеспечение стабильного конверсионного курса стимбаксов 1:1 по отношению к американскому доллару. В случае если стимбакс начинает стабильно торговаться дороже $1.00, то выплата процентов должна быть остановлена. В случае если рынок с нулевой процентной ставкой на долг нуждается в премии, можно утверждать, что рынок желает дать в долг больше, чем сообщество желает взять в долг. Если это случится, то стим-бакс будет торговаться дороже $1.00. В таком случае сообщество мало чего сможет сделать без применения отрицательных процентных ставок. - -Если коэффициент долг/собственность менее 10% и стим-баксы торгуются дешевле $1.00, тогда процентная ставка должна быть изменена, чтобы давать больше стимов за стим-баксы. Это увеличит спрос на стим-баксы, в то же время снижая коэффициент долг/собственность тем самым возвращая стим-бакс к долларовому паритету. - -Предполагая, что ценность стимов растет быстрее, чем Стим создает новые стим-баксы коэффициент долг/собственность должен оставаться в целевом диапазоне. При таком подходе от предлагаемого процента выиграют все. Если ценность сети остается на месте или падает, в таком случае предлагаемая процентная ставка сделает коэффициент долг/собственность хуже. - -В результате производители фидов являются доверенными лицами с обязанностью устанавливать монетарную политику в целях поддерживания стабильной привязки к американскому доллару. Злоупотребление этой властью может навредить стоимости стимов и стим-мощи, поэтому имеет смысл мудро голосовать за делегатов в которых есть уверенность, что они будут производить корректные фиды и устанавливать адекватные процентные ставки в соответствии с правилами определенными выше. - -Если коэффициент долг/собственность становится опасно высоким, а участники рынка решают избегать запросов на конверсию, то ценовые фиды должны быть скорректированы, чтобы увеличить конверсионный курс стим/стим-бакс. - -Изменения в политике процентных ставок и/или любых премий/дисконтов на конверсионный курс стим/стимбакс должен быть медленным и измеримым ответом на долгосрочные средние отклонения, нежели попыткой ответа на краткосрочные рыночные условия. Блокчейн платит провайдерам ликвидности за их услуги компенсируя краткосрочные потребности. - -Мы верим, что эти правила дадут участникам рынка уверенность, что потеря денег держателями стим-баксов маловероятна при условии покупки по курсу $1.00. Мы ожидаем, что будет соблюдаться узкий торговый коридор на стимбакс в диапазоне от $0.99 до $1.01 при большинстве рыночных условий. - -## Субъективные Контрибьюции -Субъективный механизм Proof-of-Work (доказательство работой) представляет собой альтернативный подход к дистрибуции валюты и является улучшением полностью объективного механизма Proof-of-Work такого как майнинг. Приложения валюты применяющей субъективное доказательство работой намного шире, чем любой механизм объективного доказательства систем, потому что они могут быть применены для строительства сообщества вокруг любого концепта, который имеет хорошо определенную цель. Когда люди присоединяются к сообществу, то они покупают определенный набор убеждений и могут голосовать, чтобы переопределить ценности сообщества и его назначение. - -В результате критерии, по которым оценивается работа полностью субъективны, а это определение живет за пределами исходного кода. Одно сообщество может хотеть вознаграждать артистов, другое поэтов, третье сатириков. Какие-то сообщества могут стремится вознаграждать некоммерческие проекты, а какие-то будут стремиться продвигать политические повестки. - -Ценность каждого сообщества достигается в зависимости от спроса на влияние внутри конкретного сообщества и веры рынка в потенциальный объем влияния, который может быть достигнут. В отличие от предыдущих систем, субъективное доказательство работой делает возможным сообществу коллективно финансировать разработку всего, что оно считает ценным и позволяет монетизировать время, которое ранее было невозможно монетизировать. - -## Дистрибуция Валюты -Существует два способа, которым кто-то может быть вовлечен в криптовалютное сообщество: долю в сообществе можно купить или заработать. В обоих случаях пользователи добавляют стоимость к валюте, тем не менее, бОльшее количество людей располагают свободным временем, нежели свободными финансовыми ресурсами. Представьте себе цель разворачивания валюты в бедном сообществе без денежных средств, но с большим количеством времени. Если люди могут заработать деньги работая друг на друга, то они создадут стоимость через взаимный обмен, поддерживаемый справедливой учетной и валютной системой. - -Дистрибуция валюты как можно бОльшему количеству людей, способом, который в общем случае воспринимается как справедливый, является сложной задачей. Задачи, которые могут быть полностью оценены компьютерными алгоритмами, ограничены по своей природе, и вообще говоря, имеют ограниченное количество применений. В случае с майнингом Биткоина, это может приводить к производству специализированного оборудования, и вынуждать людей инвестировать время для разработки более эффективных алгоритмов. Такой способ мог бы помогать находить простые числа, но ни одно из этих применений не обеспечивает осмысленную ценность для общества или валюты, держателем которой это общество является. Что еще более важно, это то, что в таких системах экономия от масштаба и рыночные силы приведут к исключению из дистрибуции всех, за исключением экспертов. В конечном счете, майнинг основанный на вычислениях - это просто один из способов покупки доли в сообществе, потому что он требует денег для оплаты электрических счетов и разработку необходимого аппаратного обеспечения. - -Чтобы дать равную возможность зарабатывать валюту всем людям всем должна быть дана возможность работать. Сложность возникает при суждении об относительном качестве и объеме работы, которые обеспечиваются индивидом. Также сложно сделать так, чтобы это суждение эффективно аллоцировало вознаграждения миллионам пользователей. Это требует создание масштабируемого процесса голосования. В частности такой подход требует чтобы авторитет по перераспределению средств должен быть настолько децентрализован и распределен, на сколько это возможно. - -Первый шаг в вознаграждении миллионов пользователей - это принять дистрибьюцию фиксированного количества валюты вне зависимости от того, сколько работы в действительности сделано пользователям или от того, сколько пользователей голосует. Это радикально меняет вопрос на который нам нужно ответить с "*Должны ли мы платить?*" на "*Кому мы должны платить?*". Такой подход также сигнализирует рынку, что деньги распределяются и достанутся тому, кто "поставит" больше работы. Такой подход очень похож на подход Биткоина, в котором на данный момент 12.5 биткоинов достаются тому, кто быстрее других найдет хеш заданной сложности. Также как и Биткоин, вся работа должна быть сделана до выплаты и ничто не должно оплачиваться спекулятивно на обещании сделать работу в будущем. - -Следующий шаг - это вознаграждение всех, кто делает *что-либо*, даже удаленно, положительное с *чем-нибудь*. Это достигается ранжированием всей выполненной работы и дистрибуции пропорционально ее стоимости. Чем больше конкурентоспособным становится рынок, тем сложнее становится зарабатывать те же самые выплаты. - -## Голосование за Дистрибуцию Валюты -Предположим, что существует фиксированное количество денег для дистрибуции, а те у кого есть долгосрочный инвестиционный интерес в будущей стоимости и полезности валюты - это те, кто должны решить как ее распределить. Каждый инвестировавший пользователь кастует свои голоса на тех, кто сделал лучшую работу, а в конце дня количество доступных денег на этот день делится пропорционально поступившим голосам таким образом, чтобы даже если у кого-то есть хотя бы один положительный голос, то он получает что-нибудь. - -Наивный процесс голосования создает Дилемму Заключенного, в которой каждый голосующий индивид имеет стимул голосовать за себя за счет бОльших целей сообщества. Если каждый голосующий начнет голосовать за себя, то валюта не сможет быть распределена, и в итоге не сможет приобрести сетевой эффект. С другой стороны, если только один голосующий поступает таким образом, то в таком случае случае голосующий выиграет незаслуженные прибыли, в общем не оказывая эффекта на общую ценность валюты. - -Для того, чтобы сместить стимулы индивидов от простого голосования за самого себя, деньги должны быть распределяться нелинейно. Например, на основании квадратической функции голосования, т.е. кто-то с количеством голосов в два раза превышающим количество голосов кого-то другого - должен получить вознаграждений в четыре раза больше, а кто-то, у кого количество голосов в три раза больше - должен получить в девять раз больше. Другими словами вознаграждение пропорционально голосам в квадрате, а не просто голосам. Это отражает ценность сетевого эффекта который растет квадратично с количеством участников в соответствии с Законом Меткалфа. - -Предполагая, что все пользователи будут иметь равную долю, кто-то, кто получит только свой голос получит гораздо меньше, чем тот кто получит голосов от 100 разных пользователей. Это мотивирует пользователей кооперироваться при голосовании за одну вещь, чтобы максимизировать выплаты. Такая система также создает финансовые стимулы сговориться, чтобы группа голосовала за какую-то вещь, а потом получала вознаграждение пропорционально между друг другом. - -### Сговоры при Голосовании -При том, что кооперация при распределении фондов за лучшую работу - это желаемая цель, сговоры, которые подрывают эту цель должны быть минимизированы. Существует два типа сговоров: самый простой - это когда один пользователь просто покупает бОльшую долю чем другие, а другой способ включает в себя потребность в координировании большого количества малых держателей работать совместно. Крупные держатели могут иметь влияние в 100 или даже в 1000 раз больше чем малые, что означает что у них есть еще бОльшая мотивация голосовать за себя, еще большая мотивация, чем была бы у них при линейной дистрибьюции. - -Не зависимо от того, сколько денег имеет любой индивид, всегда будут другие индивиды со схожим состоянием. Даже самые богатые редко располагают бОльшим количеством средств, чем следующая пара чуть менее богатых совместно. Более того, те у кого есть крупные инвестиции в сообщество, всегда рискуют потерять больше всего, пытаясь обыграть систему голосования в свою пользу. Это как если бы генеральный директор решил бы остановить выплату зарплат для того, чтобы положить ее себе в карман. В таком случае любой человек решил бы работать на другую компанию. Таким образом все бы стали работать на другую компанию, а такая компания перестала бы чего-либо стоить, оставляя такого CEO банкротом, а не состоятельным человеком. - -К счастью, любая работа, которая получает большую концентрацию голосов, также становится и самой популярной. Т.к. всегда есть возможность голосовать негативно, большое количество малых акционеров смогут обнулить голосующую силу сговорившейся группы или крупных акционеров, которые действуют исключительно в свою пользу. Более того, крупные акционеры больше теряют если валюта падает в цене по причине злоупотреблений, чем приобретают от голосования за самих себя. По факту честные крупные акционеры скорее всего будут более эффективны в противодействии злоупотреблениям, и будут чаще использовать отрицательные голоса, чем малые акционеры. - -Использование негативных голосов для того, чтобы сдержать людей от злоупотреблений, компенсирует "ментальность краба" которой многие люди страдают, когда воспринимается, что один индивид получает доходы за счет всех других. В то время как ментальность краба обычно касается недальновидных людей, которые принижают хороших людей, это также то, что позволяет хорошим людям противодействовать плохим. Единственная проблема с ментальностью краба - это когда люди ошибочно полагают, что кто-то получает прибыль за счет всех других. - -> ### История о Корзинке с Крабами -> Человек прогуливался вдоль пляжа и увидел другого человека который рыбачил. Рядом с рыбаком находилась корзинка с крабами для приманки. Как только он подошел поближе, он увидел, что на корзинке нету крышки, а внутри находятся живые крабы. - -> "Почему ты не закрываешь свою корзину крышкой, чтобы крабы не убежали?", - сказал он. - -> "Ты не понимаешь.", - ответил человек. "Если бы в корзине был один краб, то он мог бы вскарабкаться достаточно быстро. Тем не менее, когда в корзине много крабов, если кто-то пытается вскарабкаться, то другие его держат, чтобы он разделил такую же судьбу как и все другие оставшиеся." - -> Так же и с людьми. Если один человек пытается что-то делать по-другому, получить лучшие оценки, улучшить себя, выскочить из окружения, или мечтать большие мечты, другие люди будут стараться держать его, чтоб он разделил их судьбу. - -Полностью устранить злоупотребления невозможно, да и не должно являться целью. Даже те, кто будет пытаться злоупотребить системой все равно продолжают делать работу. Любая компенсация за их успешные попытки злоупотребить или сговориться, как минимум не менее ценно для целей дистрибуции валюты, точно также как у Биткоина существует майнинг через пулы и одиночный майнинг. Все что необходимо - это убедиться, что злоупотребления не настолько угрожающие, чтобы подрывать стимулы делать реальную работы в поддержку сообщества и ее валюты. - -Цель создания валюты сообщества в получении большего количества крабов в корзине. Пытаться принимать экстремальные меры, чтобы устранить злоупотребления, это как пытаться накрыть корзинку крышкой, чтобы предотвратить побег нескольких крабов в ущерб простоте добавления новых крабов в корзину. Достаточно просто сделать стены скользкими и дать другим крабам достаточно власти, чтобы они предотвращали побеги других крабов. - -### Голосование Ограниченное Лимитом -Главный компонент минимизации злоупотреблений - это ограничение возможности голосовать. Индивид может прочитать и оценить ограниченное количество информации в день. Любые попытки голосовать чаще - это признак автоматизации и потенциального злоупотребления. При помощи установления лимитов на голосование, акционеры, которые голосуют чаще, с каждым новым голосом уменьшают свой вес, в отличие от акционеров которые голосуют реже. Попытки разделить токены на несколько счетов также разделяет и влияние, что в итоге не приводит ни к увеличению влияния, ни обходу лимитов. - -![Сила голосования и время](https://github.com/MotovilovIvan/blog/blob/master/images/01%20%D1%81%D0%B8%D0%BB%D0%B0%20%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%B0%20%D0%B8%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F.png) -![Сила голосования во времени (Увеличена)](https://github.com/MotovilovIvan/blog/blob/master/images/02%20%D1%81%D0%B8%D0%BB%D0%B0%20%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%B0%20%D0%B8%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20(%D1%83%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B5%D0%BD%D0%BE).png) - -Приведенные графики отражают каким образом сила голоса пользователя уменьшается каждый раз, когда он голосует, и как она регенерируется со временем при отсутствии голосов. Этот график отражает номинальный временной юнит и может быть масштабирован для любого темпа голосования. Имейте ввиду, что сила голосования быстро падает в периоды продолжающего голосования, а потом медленно восстанавливается. - -Сила голосования умножается на количество стим-мощи для определения доли в пуле вознаграждений направляемой на конкретный пост или комментарий. - -## Отложенные Выплаты -Чтобы предотвратить большее количество злоупотреблений, все выплаты отложены на 24-часовую, взвешенную на стим-мощь, среднюю, прошедшую с момента каждого голосования. Это обеспечивает защиту от кражи наград крупными акционерами голосующими на последней секунде до того, как другие голосующие (как крабы) смогут противодействовать потенциальному злоупотреблению. Когда выплата совершена все голоса сбрасываются на 0. Если голоса поступают после выплаты, процесс начинается заново. - -![Период истечения голосования](https://github.com/MotovilovIvan/blog/blob/master/images/03%20%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%20%D0%B8%D1%81%D1%82%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F.png) - -Этот график отражает каким образом период истечения голосования изменяется в ответ на поступающие позитивные или негативные голоса. Новые голоса расширяют период выплат пропорционально их размеру относительно уже поступивших голосов. При наступлении времени 40 большая часть новых голосов была добавлена, что увеличило период голосования на 12 часов. Последующее меньшее количество голосов оказало меньше влияния на период голосования. - -### Распределение Выплат -Одна из ключевых целей системы вознаграждения Стим - это производство лучших дискуссий и контента в Интернете. Каждый год 10% рыночной капитализации Стима распределяется пользователям, которые публикую статьи, участвуют в дискуссиях и курируют статьи других. При условии капитализации Стима на уровне текущей капитализации Биткоина выплаты вознаграждения лучшим контрибьюторам составят 100 млн. рублей каждый день. - -![Новый рынок](https://github.com/MotovilovIvan/blog/blob/master/images/04%20%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%80%D1%8B%D0%BD%D0%BE%D0%BA.png) - -В реальности дистрибуция будет зависеть от паттернов голосования пользователей, но мы подозреваем, что большинство вознаграждений будет распределено в пользу самого популярного контента. Стим взвешивает выплаты пропорционально n2 количеству стим-мощи голосующего за пост. Другими словами, пост *x* получит награду пропорционально: - -голоса [x]2 / сумма ( голоса [O...n]2) - -[Закон Зипфа](https://en.wikipedia.org/wiki/Zipf%27s_law) одно из таких эмпирических правил, которое характеризует удивительный диапазон применений этого феномена в реальном мире достаточно хорошо. Этот закон говорит о том, что если мы упорядочим какую-нибудь коллекцию по размеру или популярности, второй элемент в этой коллекции будет приблизительно в два раза меньше от измерения первого элемента, третий элемент в коллекции будет 1/3 от измерения первого элемента и так далее. В общем случае *k* ранжированный элемент будет измеряться как 1/*k* от первого элемента. - -Если мы возьмем популярность как грубое измерение ценности, то в таком случае ценность каждого отдельного элемента определяется Законом Зипфа. То есть если у нас один миллион элементов, тогда топ 100 самых популярных контрибьютят треть от общей ценности, следующие 10000 элементов вторую треть, и оставшиеся 989900 оставшуюся треть. Ценность коллекции из *n* элементов пропорциональна *log(n)*. - -Результат такого голосования и распределения выплат - это предложение больших наград за хороший контент, в то же время вознаграждая малых игроков в длинном хвосте контрибьюции. - -Экономический эффект этого подобен лотереи, в которой люди переоценивают их вероятность получить голоса, таким образом делая больше работы чем ценность ожидаемого вознаграждения, тем самым максимизируя общее количество работы произведенной в сообществе. Тот факт, что каждый выигрывает "что-нибудь", играет похожую психологию, которые используют казино, чтоб удерживать людей в игре. Другими словами, меньшие вознаграждения помогают усиливать идею, что возможно зарабатывать бОльшие награды. - -### Вознаграждение Родительских Постов -Хорошая дискуссия требует очень активного постинга. Когда ты отвечаешь кому-нибудь, то он получает 50% любой выплаты, которую ты получишь в этой ветке. Это правило применяется в плоть до 6 уровней вложенности. Начало большой дискуссии хорошо вознаграждается. - -Ошибка в корректности наследования постов во время дискуссии - это отличный способ быть заминусованым. - -Предлагаемая структура стимулов мотивирует людей контрибьютить таким образом, чтобы другие тоже вовлекались. Это поощряет людей задавать хорошие вопросы таким образом, чтобы другие люди находили ценные ответы. - -### Выплаты -Посты получают выплаты в следующей форме: 50% в стим-баксах и 50% в стим-мощи. Стим-мощь дает пользователю голоса и пропускную способность, в то время как стим-баксы дают пользователю моментальную выгоду в стабильной валюте. Мы уже обсудили, что и стим-мощь и стим-бакс спроектированы для поощрения долгосрочных инвестиций, а не краткосрочной продажи. - -# Консенсус Алгоритм -Консенсус Алгоритм - это процесс, при помощи которого сообщество приходит к всеобщему недвусмысленному согласию относительно какой-либо части информации. В обществе существует много алгоритмов для достижения согласия относительно того, что кому принадлежит. Каждое правительство на Земле - это примитивный консенсус алгоритм, посредством которого население соглашается подчиняться определенному набору правил, который бережно зафиксирован в конституции. Правительства устанавливают суды, судей и присяжных для интерпретации субъективных фактов и постановления финальных решений. В большинстве случаев люди подчиняются решению даже если оно было неверным. - -Алгоритмы используемые в криптовалютах обеспечивают лучший способ достигнуть согласия. Криптографически подписанные доказательства поступают от индивидов и записываются в публичную книгу (публичный реестр, блокчейн), которая устанавливает абсолютный глобальный реестр событий. Детерминистический компьютерный алгоритм затем может обрабатывать эту книгу для того, чтобы вычислить универсально принимаемое заключение. До тех пор пока члены сообщества соглашаются с этим алгоритмом, результат работы этого алгоритма авторитетен. - -Ключевая проблема - это определение того, какое доказательство дозволено для записи в публичную книгу. Система должна быть разработана с целью минимизации потенциального цензурирования. Цензурирование в публичных реестрах это тоже самое, что препятствование кому-либо голосовать на выборах. В обоих случаях индивиду ограничиваются права на влияние на публичный консенсус. - -## Консенсус в Стиме -Концептуально, алгоритм консенсуса используемый в Стиме, очень похож на консенсус алгоритм адаптированный компаниями во всем мире. Люди с инвестиционным интересом в будущей ценности Стима голосуют за индивидов ответственных за включение доказательств в публичный реестр. Голоса взвешиваются пропорционально доле каждого человека в инвестиционном мешке. - -В мире криптовалют публичный реестр принято называть блокчейном. Блок - это группа подписанных транзакций, который также содержит хеш-ссылку на предыдущий блок. - -В Стиме производство блоков осуществляется раундами. Каждый раунд для создания и подписания блоков с транзакциями выбирается 21 делегат. 19 из этих делегатов избираются, 1 делегат выбирается на основании вычислительного доказательства работой, а один распределяется между всеми делегатами, которые не вошли в топ 19 на основании количества их голосов. 21 активный делегат перемешиваются каждый раунд для предотвращения того, чтобы не было возможности игнорировать блоки производимые тем же самым делегатом. - -Этот процесс разработан для обеспечения лучшей надежности, в тот же момент гарантируя, что каждый имеет возможность участвовать в производстве блоков в не зависимости от того насколько он популярен для того, чтобы подняться в топ. Люди имеют три опции для того, чтобы обойти цензуру 19 избранными делегатами: -- терпеливо ждать со всеми, кто не в топ 19 -- купить больше вычислительных мощностей для решения доказательства работой быстрее чем другие -- купить больше стим-мощи, чтобы поднять силу голосования - -В общем, цензурирование делегатами - это отличный способ им потерять свою работу. Поэтому маловероятно, что это будет реальной проблемой в сети Стим. - -Стим способен составлять расписание по производству блоков каждые 3 секунды, потому-что активные делегаты известны наперед. Делегаты синхронизируют производство блоков через протокол NTP. Вариация подобного алгоритма была использована сетью BitShares более года и доказала свою надежность. - -## Майнинг в Стиме -Традиционные блокчейны Proof-of-Work совмещают производство блоков с решением Proof-of-Work. Т.к. процесс решения доказательства работой занимает непрогнозируемое количество времени, результатом является непредсказуемое время производства блоков. Стим нацелен иметь целостный и надежный процесс производства блоков каждые 3 секунды с потенциально нулевой вероятностью производства форков. - -Для того, чтобы достигнуть такого, Стим разделяет производство блоков от решения доказательства работы. Когда майнеры решают доказательство работы для Стима, они транслируют транзакции содержащие работу. Следующий по расписанию делегат включает транзакции в блокчейн. Когда транзакции включены, майнер добавляется в очередь майнеров которые включены в расписание по производству блоков. Каждый раунд один майнер выбирается из очереди и включается в активный список делегатов. Майнер получает оплату когда он производит блок в соответствии с расписанием. - -Сложность доказательства работой удваивается каждый раз когда очередь майнеров вырастает на 4. Т.к. один майнер выбирается из очереди каждый раунд, а каждый раунд занимает `21*3 = 63 секунды`, сложность автоматически уменьшается вдвое, если не найдено ни одного доказательства в течение `21 * 3 * 4 = 252 секунд`. - -### Вознаграждения Майнеров Требуют Стим-мощь -После первого месяца майнеры в Стиме вознаграждаются в стим-мощи. Стим-мощь можно вывести через двухлетний процесс, который называется ослаблением. Это означает, что майнеры должны ожидать достаточно долго, вероятно многие месяцы, перед тем как достаточное количество наград будет ослаблено для того, чтобы можно было компенсировать затраты на электроэнергию и вычислительные ресурсы. Процесс ослабления отбивает охоту создавать майнинг пулы, т.к. операторам пулов нужно будет рассредоточить выплаты на многие года. - -Оплата вознаграждений за майнинг в стим-мощи используется для того, чтоб майнеры не могли использовать сегодняшнюю цену для определения прибыльности майнинга. Мало кто согласится относительно того, какая цена в будущем будет. Это означает то, что сложность майнинга будет обеспечиваться теми, у кого самая высокая оценка будущей стоимости. У майнеров без долгосрочного интереса в платформе будет отбита охота от соревнования. В итоге это означает что событие по сбросу намайненного на рынок маловероятно, потому-что намайненые награды могут быть приобретены только долгосрочными верующими в платформу. - -## Алгоритм майнинга -Алгоритм майнинга используемый в Стиме требует того, чтобы у майнера был доступ к приватному ключу счета, который будет получать награды. Это требование имеет несколько важных последствий. Во-первых, он поощряет оптимизацию алгоритма по верификации цифровой подписи на основании эллиптических кривых. Во-вторых, он делает сложным создание майнинг пулов, потому-что оператор пула должен будет разделить награду со всеми анонимными майнерами. В-третьих, он делает бессмысленным использование ботнетов, потому что оператор ботнета должен будет распределить свой приватный ключ по всем скомпрометированным машинам. - -Следующий псевдокод описывает каким образом вычисляется хеш-значение доказательства работой: - -``` -Let H = Head Block ID -Let H2 = SHA256 (H+NONCE) -Let PRI = Приватный ключ производителя -Let PUB = Публичный ключ производителя -Let S = SIGN (PRI, SHA256( H ) ) -Let K = RECOVER_PUBLIC_KEY ( H2, S ) -Let POW = SHA256( K ) -``` - -## Защита от Ботнетов -Многие системы основанные на Proof-of-Work заканчивают на том, что майнятся ботнетами. Ботнет - это коллекция тысяч или миллионов машин, которые были скомпрометированы хакерами. Эти хакеры воруют вычислительные и энергетические ресурсы скомпрометированных машин для майнинга криптовалютных токенов. - -Стим обладает многими свойствами для предотвращения доходности вычислительным ворам. Операторы ботнетов получают выгоду в поисках авантюр и обычно продают украденные ресурсы тому, кто больше заплатит. Это означает, что те кто использует ботнет платит за вычислительные ресурсы таким же образом как и те, кто используют Amazon EC2. Инвестиционное требование Стима означает то, что капитал потраченный на покупку ресурсов ботнета будет заблокирован на длительный промежуток времени во время которого оператор ботнета обречен на волатильность цены. - -Другой способ, которым осуществляется защита от получения прибыли операторами ботнетов, - это требование в распределении приватных ключей на все скомпрометированные машины. Даже если приватный ключ будет обнаружен всего на одной скомпрометированной машине, оператор может потерять свои монеты. - -Последняя мера - это зависимость от сетевой задержки. Большинство ботнетов работают за счет скомпрометированных компьютеров с плохим качеством интернет подключения. Плохой интернет сильно ухудшает эффективность вычислительных ресурсов. - -Для операторов ботнетов должно быть более прибыльно и менее рискованно использовать свои ресурсы на отличные от майнинга стимов виды деятельности. - -# Устранение Трансакционных Комиссий -Стим идет далеко для того чтобы вознаграждать людей за контрибьюцию в сеть. Требовать оплаты от людей каждый раз когда люди хотят взаимодействовать с сообществом - это контрпродуктивно. - -Блокчейн технология в данный момент зависит от трансакционных комиссий для того, чтобы защищать сеть от спама. Эти сборы страдают всеми известными проблемами микротранзакций, и не дают блокчейнам быть использованными для транзакций с низкой ценностью. Истинно децентрализованные приложения должны предлагать пользователям чувство бесплатности транзакций, если они хотят конкурировать с их централизованными альтернативами. Эта бумага описывает подход используемый в Стим для устранения необходимости в трансакционных комиссиях, таким образом делая возможным широкий спектр невозможных в прошлом децентрализованных приложений. - -## Проблема с Комиссиями -Блокчейны - это децентрализованные сети, в которых все транзакции транслируются всем пирам (от англ. peer - равноценный агент в сети). Каждый раз когда блок произведен, он включает несколько или все ожидающие транзакции. Все блокчейны должны найти решение для предотвращения потребления всей доступной вместимости сети бессмысленными транзакциями злонамеренных пользователей. Эти бессмысленные транзакции могут помешать другим ценным транзакциям быть обработанными, и таким образом уничтожат сеть. - -Решение, используемое большинством блокчейнов до сих пор - это взимание минимальных трансакционных комиссий. Комиссии которая стоит несколько центов достаточно для того, чтобы сделать атаку на сеть дорогой и неприбыльной. Такой подход решая проблему со спамом сети, создавая новые проблемы. Представьте себе решение проблемы со спамом емэйлов, введением комиссии за каждый отправленный емэйл. Люди бы не стали пользоваться электронной почтой. - -## Микроплатежи Не Работают -Фундаментальная проблема с взиманием трансакционных комиссий - это то, что микроплатежи не работают, особенно для действий пользователей с низкой стоимостью. Когда комиссия взимается за каждую транзакцию, то она ограничивает типы транзакций, которые может обработать децентрализованная сеть. Вне зависимости от того, каким рациональным бы не был аргумент о необходимости комиссий, пользователи всеравно нелюбят отдавать по рублю за каждый свой шаг. - -Представьте себе вебсайт, который бы выставлял нам транзакционные комиссии каждый раз, когда мы изменяем пароль. Пользователи ожидают, что некоторые вещи должны быть бесплатными. Требование пользователей делать решение относительно того стоит ли то или иное решение конкретного действия, приводит к беспокойству пользователя и в конце концов его уходу. - -> Транзакция не может стоить настолько дорого, чтобы требовать решения, но должна стоить настолько мало, чтобы решение было автоматическим. Любое решение по покупке - это беспокойство, и не важно насколько это решение мало. Это вытекает не от того насколько хорош интерфейс или как мало времени необходимо, но от самого факта принятия решения. - -> Микроплатежи, как все платежи, требуют сравнения: "*Стоит ли такое-то количество X такого-то количества Y?*". Существует понятие минимальных ментальных транзакционных издержек, создаваемых фактом который не может быть оптимизирован, потому-что единственная транзакция которую пользователь будет желать подтвердить не думая, это та транзакция, которая не стоит ему ничего, т.е. как будто ее нет вообще. - -> [Clay Shirky](http://www.openp2p.com/pub/a/p2p/2000/12/19/micropayments.html) - -В мире финансовых платежей, малые комиссии приемлемы, потому что ценность транзакций экстремально высокая относительно взимаемой комиссии, а покупатель уже сделал решение о покупке. Мир потенциальных блокчейн приложений намного шире элементарных финансовых платежей, и включает многие необходимые транзакции за которые комиссии просто не приемлемы для людей. - -Такие системы как BitShares, NXT, Ripple, Counterparty и Stellar позволяют пользователям размещать лимит ордера на блокчейне, и все они взимают небольшую комиссию с пользователей для того, чтобы осуществить это действие. Позднее, если пользователь желает отменить ордер, удерживается другая комиссия. Такие системы как Ethereum выводят микроплатежи на совершенно новый уровень, взимая плату за вычисление. Все эти системы борются за привлечение новых мейнстримных пользователей таким же способом, как если бы децентрализованный поисковик пытался бы конкурировать с Google за новых мейнстримных пользователей и при этом удерживал бы небольшую комиссию за каждый поисковой запрос. Не важно, на сколько хорош сервис, люди ожидают, что конкретные вещи будут бесплатными. Это правдиво даже если в итоге пользователь в итоге платит больше при измененной структуре комиссий. - -## Комиссии как Барьер для Входа -Любые комиссии создают барьер для входа новых пользователей. Перед тем как кто-либо может поэкспериментировать с Ethereum, он должен приобрести несколько токенов эфира. Если кто-то хочет разработать децентрализованное приложение на Ethereum, то он должен переложить эти затраты на своих покупателей. Покупка криптовалюты не легкая задача и редко имеет смысл на сумму менее $10. Это означает, что новые пользователи, которые хотят попробовать новое децентрализованное приложение должны быть убеждены принять решение на $10. - -## Взимание Комиссий -Со временем сеть должна подстраивать комиссии. Это может произойти либо в случае роста цены на токен, или в случает роста пропускной способности. Пользователи любят предсказуемые комиссии и гарантированные услуги. Подстраивать комиссионные вознаграждения динамически возможно, но в результате от этого страдает пользовательский опыт. - -## Атаки Сибиллы -Централизованные сайты предотвращают спам при помощи ограничения количества запросов и некоторых форм идентификации. Даже такой простой способ как reCAPTCHA достаточен для ограничения создания фейковых аккаунтов. Если кто-то злоупотребляет их аккаунтами, тогда централизованные сайты могут заблокировать аккаунт. - -В децентрализованной системе не существует прямого способа забанить пользователя, так же как и нет способа у централизованного провайдера децентрализованных услуг использовать [reCAPTCHA](https://www.google.com/recaptcha/intro/index.html) и накладывать лимиты на аккаунты. По факту невозможность цензурировать пользователей - это одно из самых продаваемых свойств блокчейн технологии. - -## Полное Резервирование против Частичного Резервирования -Давайте рассмотрим блокчейн как ISP (от англ. Internet Service Provider или поставщик услуг интернета) работающий как кооператив, который владеет всеми кабелями в городе, и имеет максимальную пропускную способность, которую он может обеспечить в любое время. Люди живущие в городе могут купить акции этого ISP в обмен на право использовать часть доступного пропускного канала. - -У ISP есть две опции: использовать систему с полным резервированием или с частичным резервированием. При использовании системы с полным резервированием каждый пользователь может использовать какую-то часть максимального пропускного канала пропорционально его акциям. Т.к. никто не пользуется Интернетом в одно и то же время, городская сеть будет сильно недоиспользована. - -При частичном резервировании отдельные пользователи могут использовать больше пропускной способности в любой момент времени, до тех пор пока абсолютно все пользователи не станут использовать Интернет в одно и то же время. Проблема с обслуживанием частичного резервирования в том, что затор будет происходить каждый раз, когда слишком много людей будет хотеть использовать сеть в одно и то же время. ISP нужен способ приоритизировать пропускную способность в периоды пиковых нагрузок. В самом экстремальном случае, сильно нагруженная система должна превратиться в систему с полным резервированием. Челендж в установке корректного *коэффициента частичного резервирования*. - -## Пропускная Способность Вместо Микроплатежей -Решение проблемы с микроплатежами в применении динамичных частичных резервов. При этой модели блокчейн будет автоматически подстраивать коэффициент резервирования для сети во время пиковых нагрузок. Блокчейн будет устанавливать уровень целевого использования при котором остается достаточный просвет для краткосрочных всплесков спроса. Каждый раз когда происходят всплески активности, блокчейн снижает максимальную пропускную способность на одну акцию. Когда всплеск окончен, и появляется избыточная пропускная способность, блокчейн может медленно повышать пропускную способность на акцию. - -Пропускная способность, используемая для индивидуальных пользователей, должна быть измерена на достаточно долгом промежутке времени для того, чтобы адекватно подстраивать свое использование. Люди привыкли заходить в систему, делать сразу много разных дел, а затем выходить. Это означает, что их пропускная способность на достаточном коротком промежутке времени может показаться намного выше, чем во время длительного периода. Если временное окно растянуто слишком далеко, резервный коэффициент не подстроится достаточно быстро для ответа на краткосрочные всплески. Если временно окно слишком короткое, тогда групповое использование будет иметь слишком большое влияние на нормальных пользователей. - -По нашим оценкам должно быть достаточно измерять средне недельное использование. Каждый раз когда пользователь подписывает транзакцию, эта транзакция учитывается в их собственной индивидуальной скользящей средней. Каждый раз когда скользящая средняя превышает текущие сетевые лимиты - транзакции откладываются, до тех пор пока их средняя не упадет до установленных лимитов. - -## Пример Реализации -Допустим `B` равняется средней пропускной способности пользователям за время `T`. Допустим `W` равняется числу секунд за неделю, и допустим `N` равняется размеру транзакции, которая случилась через S секунд после T. На основании этой информации блокчейн может вычислить новую среднюю пропускную способность для пользователям как: - -``` -Bnew = MIN(0,B * (W-S) / W) + N * S / W -Tnew = T + S -``` -Каждому пользователю устанавливается следующая средняя пропускная способность: - -``` -Let U = стим-мощь пользователям -Let S = общее количество стим-мощи -Let R = текущий резервный коэффициент между 1 и Rmax -Let C = максимальный размер блока устанавливаемый делегатами -Let L = общее количество блоков в неделю -Let M = C * L * R -Распределение = M * U / S -``` -Пользователю будет установлена средняя пропускная способность `M * U / S`. Каждый раз когда транзакция будет приводить к увеличению установленного лимита выше этого значения, этот пользователь не будет иметь возможности осуществлять транзакции до тех пор, пока не пройдет достаточно времени для снижения его средней. - -Сеть может увеличивать резервный коэффициент в любое время, когда блоки более чем в два раза меньше чем целевая пропускная способность, и уменьшать его когда этот показатель больше половины. Алгоритм используемый для корректировки R, разработан реагировать быстро для снижения коэффициента резервирования во время всплесков спроса. При этом этот алгоритм действует медленно при повышении резервного коэффициента в периоды низкого спроса. - -Минимальный резервный коэффициент 1, а максимальный резервный коэффициент должен быть вычислен для предотвращения малых акционеров от потребления всей доступной пропускной способности. Если никто не использует доступную пропускную способность, тогда резервный коэффициент может расти до тех пор пока пользователь с 1 сатоши стим-мощи не сможет делать транзакции в каждом блоке. - -## Изучаем на примере Биткоина -Для понимания того, как предлагаемый алгоритм работал бы в Биткоине необходимо оценить разумное значение для резервного коэффициента R на основе текущего использования. Основываясь на текущем количестве биткоинов в 15 миллионов и ежедневном объеме транзакций в размере 400 тысяч биткоинов мы может получить минимальный резервный коэффициент: 38 для Биткоина. Используя формулы мы может вычислить недельную пропускную способность (в байтах), которая будет доступна на 1 биткоин. - -``` -Let C = 1MB = 1024*1024 -Let L = 1008 (блоков в неделю) -Let R = 38 -Let S = 14000000 BTC (количество биткоинов минус не двигающиеся) -Let U = 1 BTC -CLR/S = 2869 байтов в неделю, или около 5 транзакций в неделю на 1 биткоин -``` - -Так как `R = 38 -` это нижняя граница на резервный коэффициент и `CLR/S` - это нижняя граница на разрешенную пропускную способность. Самый простой случай предполагает, что пользователям необходимо иметь максимум 0.2 биткоина (или около 5000 руб.) для того, чтобы делать транзакции раз в неделю. Тем не менее эта свободная верхняя граница получена из предположения что все биткоины равно перемещаемы. Это не так - пользователи с большим количеством биткоинов не обязательно делают транзакции десятки или сотни раз в неделю. Оставшиеся транзакции, которые эти пользователи могли бы сделать, увеличат резервный коэффициент, а это позволяет использовать свободную пропускной способность для малых пользователей. - -Вышеприведенные оценки очень консервативны, и предполагают что доли и их использование распределены достаточно равномерно. В реальности тяжелые пользователи, такие как биржи, имеют гораздо высокий показатель доля/использование чем легкие пользователи, а это в результате приводит к тому, что требования по минимальному балансу гораздо ниже. - -### Влияние на Пропускную Способность -Пропускная способность блокчейна не обязательно ограничена. Технологическая способность существующей интернет инфраструктуры вполне позволяет увеличить размер блока Биткоина до 10 мегабайт, что в свою очередь снизит минимальные требования к балансу в 10 раз. В то время как Биткоин на данный момент поддерживает 3 транзакции в секунду, альтернативные имплементации способны на более чем 1000 транзакций в секунду. Это уменьшает нашу консервативную верхнюю границу до 0.0006 биткоина или приблизительно 15 рублей. Это означает, что аккаунт, владеющий 15 рублями сможет делать транзакции в среднем как минимум один раз в неделю. А в реальности гораздо чаще, т.к. мы имеем дело с достаточно консервативной оценкой. - -### Максимальное Количество Пользователей -Мы можем использовать похожую математику для вычисления максимального количества уникальных пользователей, которым сеть может позволить делать транзакцию один раз в неделю: `B*W/T`. `T` отражает средний размер транзакции. Это означает что Биткоин мог бы поддерживать около 2 миллионов пользователей, которые делают транзакции один раз в неделю предполагая, что каждый пользователь имеет одинаковый баланс. - -### Сравнение с Комиссиями -Если мы предположим что пользователь со счетом 1500 рублей в биткоинах делает транзакции раз в неделю и платит 3 рубля комиссионных каждый раз когда он делает транзакции, получится что такое пользователь платит трансакционных комиссий на сумму 150 рублей в год. Пользователь должен обеспечивать 8% возврат на его 1500 рублей для того, чтобы окупить только трансакционные издержки. Пользователь в любом случае собирается держать свои деньги на блокчейне, так что пользователь с 1500 рублями в биткоинах сэкономит 150 рублей используя подход ограничения лимитов вместо комиссионных. С 15000 рублями люди могут делать транзакции каждый день и экономить около 1200 рублей в год. - -## Создание Аккаунтов -Система аккаунтов в Стиме с публично известными балансами, упрощает реализацию алгоритма основанного на ограничении лимитов пропускной способности. Любой аккаунт, с балансом ниже минимально требуемого для обеспечения транзакций раз в неделю, не сможет делать транзакции. Это подразумевает, что все новые аккаунты должны быть пополнены минимальным количеством средств. Это также подразумевает, что пользователи, которые желают делать транзакции в меньших количествах, смогут это делать свободно пока у них большой баланс. - -Возможна ситуация, при которой счет с малым балансом, созданный в период неактивного использования станет недоступным, если использование сети вырастет. Средства могут быть восстановлены в любое время путем перевода бОльшего баланса на счет. - -Для того, чтобы обеспечивать комфортный пользовательский опыт с минимальным количеством подвисших аккаунтов, все новые аккаунты должны создаваться с балансом в 10 раз превышающим минимально требуемый для еженедельных транзакций. Таким образом даже если спрос возрастет в 10 раз, счет все равно будет действующим. - -## Оправдание Минимальных Балансов -Концепт требования от пользователей в обеспечении минимального баланса вытекает натуральным образом из ценности пользователя. Все, кто занимаются бизнесом знают, что каждый пользователь имеет высокую ценность. Где угодно бизнесы тратят от 2000 рублей до 15000 рублей за приобретение каждого пользователя. Иногда они платят пользователям напрямую, иногда они платят за рекламу, а иногда целые компании приобретаются только из-за их пользовательской базы. После того, как компания приобретает пользователя, она часто дает ему много бесплатных услуг только за то, чтобы он оставались с ней достаточно долго, чтобы сохранялась возможность монетизировать его под любым соусом. - -Ripple использует минимальный баланс, который подстраивается под использование используемых ресурсов, и требует чтобы новые аккаунты были пополнены минимальным балансом. На текущий момент их минимальный баланс в районе 10 рублей, что больше 6 рублей, которые по нашей оценке позволят людям делать транзакции раз в неделю. - -Блокчейн может требовать минимальную ценность за пользователя через простой процесс требования минимального баланса. Каждый бизнес, который желает принести новых клиентов блокчейну, должен пополнять аккаунт пользователя минимальным балансом, который позволит этому пользователю делать транзакции. Требование относительно высоких комиссий за регистрацию новых пользователей естественным образом заставит всех предлагать бесплатные аккаунты с проверкой качества и уникальности каждого аккаунта перед регистрацией его на блокчейне. - -Поддержание минимального баланса - это практически одно и то же, что взимание трансакционных комиссий совместно с процентным доходом, который они могли бы заработать на их баланс. Минимальный баланс это просто баланс требуемый для того, чтоб заработать достаточное количество процентов для оплаты транзакций в относительно короткий промежуток времени. - -К счастью, требуемый минимальный баланс может быть достаточно низким на уровне 50 рублей, а это тот размер, который пользователь может понять и простить. Альтернативные издержки потерянных процентов не стоят когнитивных издержек микротранзакций, и намного более понятны людям. - -Стимы использующиеся для создания аккаунтов сразу конвертируются в стим-мощь. - -## Корректировка Резервного Коэффициента -Ограничение лимитов требует, чтобы сеть корректировала резервный коэффициент достаточно быстро для предотвращения влияния атакующего, который пытается заспамить сеть. Давайте предположим, что у атакующего достаточно большой баланс, скажем, 1% доступных стимов. Если мы предположим что сеть нацелена на коэффициент использования 50%, тогда устойчивая атака позволит предоставить пользователю 25% пропускной способности сети в том случае если все другие пользователи также используют 25% пропускной способности. Говоря другими словами, самый большой пользователь никогда не будет способен потребить более 50% целевой пропускной способности, до тех пор пока он не контролирует больше чем 50% стим-мощи. - -Давайте попробуем использовать первоначальный резервный коэффициент 200x. Из-за частичного резервирования кто-то, кто контролирует 1% токенов имеет право требовать транзакций в объеме превышающем максимальный размер блока в два раза. Для того чтобы снизить сетевое использование атакующего до 25%, резервный коэффициент должен уменьшиться в 25 раз. Это приведет к тому, что минимальный баланс требуемый для транзакций вырастет в 8 раз. - -Блокчейн может установить время ответа таким образом, чтобы любые вспышки активности гасились в течении короткого промежутка времени, такого как 30 секунд. Атакующий, пытающийся заспамить сеть, не должен иметь шанс уничтожить сервис для нормальных пользователей на более чем 1 минуту. - -В то время как снижения резервного коэффициента должны быть быстрыми и нелинейными для контр-ответов, повышения резервного коэффициента должно быть медленными и линейными. Если сеть будет подстраиваться в обоих направлениях за 30 секунд, тогда атакующий сможет расшатывать сеть. Поток транзакций должен быть скорректирован за 30 секунд, с тем чтобы быть восстановленным на уровень до атаки за целый час. При такой модели атакующий сможет заспамить сеть на 30 секунд в час или менее 1% от всего времени. - -Также должна существовать медленная константа давящая на увеличение резервного коэффициента каждый раз, когда загрузка сети ниже 50%, до тех пор, пока сеть не достигнет максимального резервного коэффициента. Максимальный резервный коэффициент определяет минимальную необходимую долю для заспамливания сети короткими импульсами. - -Любой пользователь с количеством токенов, которое меньше чем `ВСЕГО_ТОКЕНОВ / (2*РЕЗЕРВНЫЙ_КОЭФФИЦИЕНТ)` не сможет произвести достаточно количество транзакций для наполнения даже одного блока. С резервным коэффициентов 200 это означает, что любой пользователь с балансом менее 0.25% валюты не сможет создать достаточное количество транзакций, чтобы остановить обслуживание других. - -## Эффективность по Отношению к Комиссиям -Для сравнения эффективности ограничения лимитов с трансакционными комиссиями, мы должны проанализировать реагирование обоих систем на умышленную попытку атакующим заспамить сеть. В Биткоине атакующий с 500 тыс. рублями сможет уничтожить сервис на целый день заполняя каждый отдельный блок. Тот же самый атакующий не сможет остановить функционирование сети даже на один блок при подходе с динамичными частичным резервированием на базе ограничения лимитов. - -Если мы рассмотрим более экстремальный случай и предположим, что атакующий контролирует 1% всех монет, тогда мы даем атакующему около 3.5 млрд. рублей. Такой атакующий может остановить обслуживание блокчейна Биткоина на 16 лет до тех пор пока майнеры не увеличат транзакционные комиссии или пропускную способность. Даже если транзакционные комиссии будут повышены до 1000 рублей за транзакцию, атакующий все равно сможет уничтожать сеть на протяжении 16 суток. - -При подходе ограничения лимитов атакующий который контролирует 1% всех монет сможет достигнуть своей гнусной цели всего на 30 секунд. - -## Аренда против Покупки против Совместного Использования -Когда кто-то владеет домом он ожидает, что у него есть право использовать дом бесплатно. Если группа людей купит дом совместно, тогда каждый ожидает, что у него есть право использовать дом пропорционально доле собственности в доме. Блокчейн основанный на комиссиях это все равно, что арендовать дом у своих пользователей, в то время как ограничение лимитов это совместное использование по времени. - -Если дом находится в собственности у нескольких людей, эти персоны должны решить как они хотят его совместно использовать. Кто-то, кто владеет 50% дома, но использует его только одну неделю в год, может ожидать оплаты от тех персон, которые используют его в это время. Это менталитет системы основанной на транзакционных комиссиях. - -С другой стороны, кто-то владеющий 50% дома может предполагать, что спрос на дом вырастет в будущем, и он сможет продать его долю дороже. Любой собственник, который владеет бОльшим количеством дома, чем его использует, становится спекулянтом по недвижимости. С таким менталитетом вместо того, чтобы получать оплату, такой человек получает уважение. - -Ценность доли происходит от количества времени, которое доля может потенциально дать своему собственнику. Владение 1% дома и возможность использовать его 1 неделю это минимальная цена доли. Однако, если половина акционеров никогда не используют их время, тогда ценность за минимальную цену увеличится до 2 недель в год. Если эти неактивные пользователи вместо этого захотят сдавать в аренду их неиспользуемое время, тогда ценность опять вернется на прежнюю отметку. Если все неиспользованные время-доли были бы проданы людям, которые бы пользовались ими, тогда ценность времядоли упала бы на 50%. До тех пор пока собранная арендная плата выше падения время-доли в цене - собственники делают экономический просчет. - -Используя эту логику мы можем предположить, что система основанная на комиссиях будет либо более дорогой для своих пользователей или будет менее прибыльна для их коллективных собственников. Индивидуальный малый собственник может получить выгоду через сдачу своего маленького кусочка в аренду, но только за счет всех других времядольщиков. Таким образом, стоимость падающей время-доли разделяется между собственниками, в то же время прибыли централизованы у одного собственника, который решил сдать свою долю в аренду. - -Из вышесказанного мы можем сделать вывод, что для блокчейна лучше вообще не использовать транзакционные комиссии. Если бы комиссии за использование взимались как альтернатива к ограничению лимитов, это было бы аналогично покупке достаточного количества время-долей и обещанию держать их, чтобы получить право использовать эту время-долю всего один раз. - -Говоря другими словами, транзакционные комиссии должны равняться минимальному балансу аккаунта необходимого для обеспечения транзакций раз в неделю и такой аккаунт должен пополняться каждый раз в конце недели. Давайте предположим, что минимальный размер баланса 100 рублей позволяет кому-либо делать транзакции один раз в неделю. Если кто-то с балансом 100 рублей желает делать 5 транзакций в неделю, тогда ему надо будет увеличить баланс до 500 рублей. - -В теории рынок может формироваться в направлении займов необходимой время-доли. На практике пользователям намного эффективнее просто покупать и продавать их время-доли необходимые для удовлетворения их потребностей по использованию. Другими словами, стоимость согласования микрозайма выше, чем стоимость поддержания баланса необходимого для комфортного еженедельного использования. - -Децентрализованное ограничение лимитов транзакций может сделать возможным новые типы децентрализованных приложений, которые были невозможны, когда каждое использование приложения требовало микроплатеж. Эта новая модель дает разработчику приложений возможность решать когда и за что взимать плату с пользователей за транзакции. - -# Производительность и Масштабируемость -Сеть Стим построена на Graphene, на основе той же самой технологии, на которой построен BitShares. Graphene публично продемонстрировал способность обрабатывать больше 1000 транзакций в секунду в распределенной тестовой сети. Graphene может легко масштабироваться до 10 тыс. транзакций в секунду с относительно простыми улучшениями коммуникационного протокола и банального апгрейда серверного оборудования нод. - -## Масштаб Реддита -Стим способен обслуживать пользовательскую базу аналогичную Reddit. [В 2015 году](http://expandedramblings.com/index.php/reddit-stats/2/) 8.7 миллионов пользователей создавали в среднем 23 комментария в секунду, со средним показателем 83 комментария в секунду. Было создано 73 миллиона постов верхнего уровня, со средним показателем 2 поста в секунду. В общей сложности, если бы Reddit работал бы на блокчейне, то он бы требовал в среднем 250 транзакций в секунду. - -Для того, чтобы достигнуть такой производительности (лидирующей в блокчейн отрасли) Стим позаимствовал уроки полученные от архитектуры [LMAX Exchange](http://martinfowler.com/articles/lmax.html), которая способна обрабатывать 6 миллионов транзакций в секунду. Ключевые пункты полученные из этих уроков: -1. Держи все в оперативной памяти -2. Держи ключевую бизнес логику в одном потоке -3. Держи криптографические операции (хеши и подписи) вне бизнес логики -4. Разделяй валидацию на проверки зависимые от состояния и независимые от состояния -5. Используй объектно-ориентированную модель данных - -Следуя этим простым правилам, Стим способен обрабатывать 10 тыс. транзакций в секунду без каких либо существенных усилий по оптимизации. - -Использование оперативной памяти для хранения всего блокчейна - перспективно, особенно с учетом недавнего анонса технологии [OptaneTM от Intel](https://newsroom.intel.com/press-kits/introducing-intel-optane-technology-bringing-3d-xpoint-memory-to-storage-and-memory-products/). Должно быть возможно использование общедоступного оборудования для обработки бизнес логики ассоциированной со Стим на одном ядре, а все посты должны держаться в оперативной памяти для быстрого индексирования. Google держит свой индекс всего Интернета в оперативной памяти. Использования блокчейн технологии делает тривиальным репликацию базы данных между машинами для предотвращения потерь. Как только технология OptaneTM станет общедоступной, оперативная память станет еще быстрее при том, что станет еще и энергонезависимой. Другими словами, Стим разработан для архитектур будущего. Стим разработан для того, чтобы расти. - -# Дистрибуция и Денежная Масса -Сеть Стим стартует с нулевой денежной массы валюты и направляет стимы через доказательство работы (PoW) с приблизительной скоростью 40 стимов в минуту майнерам. Дополнительно 40 стимов в минуту создается для посевных фондов по вознаграждению создателей и кураторов контента. В общей сумме создается 80 стимов в минуту. Затем сеть начнет вознаграждать пользователей, которые конвертировали стимы в стим-мощь. В этот момент количество стимов растет приблизительно на 800 стимов в минуту из-за комбинированных эффектов применения следующих способов вознаграждать: - -## Награды за Контрибьюцию -- Награды кураторам: 0.5 стим в блок или 5.8125% в год, смотря что больше (1 стим в блок до 4 июля 2016 года) -- Награды авторам: 1.5 стим в блок или 1.9375% в год, смотря что больше (1 стим в блок до 4 июля 2016 года) -- Награды производителям блоков: 1 стим за блок или 0.75% в год, смотря что больше -- PoW награды перед блоком 864000: 1 стим за блок (награждается как 21 стим за раунд) -- PoW награды после блока 864000: 0.0476 стим за блок (награждается как 1 стим за раунд) или 0.75% в год, смотря что больше -- Награды за ликвидность: 1 стим за блок (награждается как 1200 стимов в час) или 0.75% в год, смотря что больше. - -## Награды за Стим-мощь -- За каждый стим созданный вышеуказанными вознаграждениями, 9 стимов разделяется между всеми держателями стим-мощи - -## Стимбакс Операции -- Стим-бакс награды: каждому держателю стим-баксов выплачивается доход на основании годовой процентной ставки (англ. APR) устанавливаемой делегатами -- Количество стимов ,за которые может быть погашено общее количество стим-баксов, будет меняться в зависимости от изменений ценового фида. Такое изменение - это фактически уничтожение стимов, когда ценность стимов (на основании измерений ценового фида) растет или создание стимов когда ценность стимов падает (на основании измерений ценового фида). - -Процентные ограничения эффективно обеспечивают гарантию того, что вознаграждения не станут бессмысленно низкими через какое-то время. Также это сделано намеренно, чтобы предотвратить взрыв в паттерне роста других блокчейнов, где высокие стимулы обеспечены высокими стимулами для ранних участников и последующим стагнированием с уменьшением стимулов до уровня ниже необходимого для вновь приходящих участников. - -Общий эффект этих постоянных к распределению токенов в том, что темп приблизительно 800 стимов в минуту сохраняется некоторое время (в учетных единицах стим), но падает в процентном выражении (т.к. 800 стимов это все меньшая и меньшая часть в общем количестве токенов). Когда различные компоненты вырастут с 800 стимов в минуту рост достигнет соответствующих процентных потолков которые в дальнейшем будут поддерживаться. Также это означает, что долгосрочно номинальный рост вырастет с 800 стимов в минуту до значения необходимого для обслуживания постоянной величины в 10% годового роста денежной массы направляемой на стимуляцию контрибьюции и 100% годового роста денежной массы на комбинированный эффект стимуляции контрибьюции и инвестиций. Общий эффект - это удвоение общего количества стимов каждый год (но как уточняется в следующей секции, если большинство пользователей усилилось тогда эффект от удвоения - это фактически сплит, который не перераспределяет собственность). - -Картинка общего количества токенов усложнена последствиями операций со стим-баксом, которые могут приводить к массивному созданию или уничтожению стимов через следование цены фида, и вознаграждениями держателей стимбаксов. Это обсуждалось в разделе про стим-баксы. Другие, менее влиятельные эффекты существуют, включая неиспользованные вознаграждения (например, вознаграждения за пропущенные блоки), шум вызванные удачей майнеров при PoW производстве, а также эффект изменения длинны очереди майнеров вследствие изменений хеш-производительности сети. - -## Воздействие Скорости Создания Токенов -На первый взгляд 100% годовой рост количества Стимов может показаться гиперинфляционным и неустойчивым. Те кто придерживаются [количественной теории денег](http://www.investopedia.com/articles/05/010705.asp) могут даже сделать вывод, что ценность стимов должна падать на приблизительно 5.6% в месяц. Мы знаем из бесчисленного количества примеров реального мира, что количество денег не имеет моментального влияния на их ценность, хотя определенно играет свою роль. - -Т.к. 90% всех создающихся стимов распределяется обратно держателям стим-мощи, в результате это разделение 9:1, а не полноценная инфляция. Общее количество затрат для вознаграждений контрибьюторов находится в районе 10% рыночной капитализации в год. А эта ставка гораздо ниже того, что пережил Биткоин в первые 7 лет после запуска. - -Создание новых стимов, чтобы платить вознаграждения пользователям, имеет негативный эффект на каждый другой пользовательский баланс, как их процент от общего количества стимов. Если ровно 90% стимов находятся в стим-мощи, тогда негативный эффект от стимуляции контрибьюции оказываемый на держателей стим-мощи отлично балансируется положительным эффектом от инвестиционной стимуляции. Держатели стим-мощи получают больше стимов (в номинальном смысле), но их процент блокчейна (в терминах доли от общего количества токенов) неизменен. Если менее чем 90% общего количества стимов держаться в стим-мощи, оба эффекта все равно указывают в обратных направлениях, но позитивный (негативный) эффект усиляется, а сумма двух эффектов будет стремится к тому, чтобы поддерживать количество балансов со стим-мощью выше 90%. Такая стимуляция не означает, что оценка стим-мощи должна держаться выше уровня 90% в долгосрочном периоде, потому-что получатели вознаграждений будут (и в некоторых случаях обязаны) класть свои стимы в стим-мощь, что означает, что толкание отметки выше 90% не единственная сила на процент общего количества стимов которые держаться в стим-мощи. - -С Августа 2008 до Января 2009 года [денежная масса США выросла](https://research.stlouisfed.org/fred2/graph/?s%5B1%5D%5Bid%5D=AMBNS) с $871 миллиарда до $1737 миллиардов со скоростью 100% в год, а затем продолжала расти на 20% в год в следующие 6 лет. Таким образом денежная масса в США выросла в 4.59 раз за период менее 7 лет. В это же время ценностью доллара относительно товаров и услуг [упала всего на 10%](http://data.bls.gov/cgi-bin/cpicalc.pl?cost1=1&year1=2008&year2=2016) в соответствии с правительственным ценовым индексом. Это пример из реального мира демонстрирует что денежная масса это лишь один из компонентов цены. - -Цена цифрового товара, такого как стим, обусловлена спросом и предложением. Если новые стимы направляются тем, кто является долгосрочными держателям, тогда возрастающая денежная масса - это просто коррекция соответствующего спроса держать. Влияние этого изменения в денежной массе отложено в будущее, когда долгосрочные держатели решат продавать. Давление продавцов в таком случае распределено на 2 года. - -Когда долгосрочные держатели решат выйти, денежная масса стимов на рынке возрастает и цена пойдет вниз. Это нисходящее давление компенсируется, когда новые долгосрочные держатели решают купить стим и конвертировать его обратно в стим-мощь. Таким образом мы может сделать вывод о том, что цена будет определяться изменением в спросе на держание стимов долгосрочно. - -Из 100% годового увеличения виртуальной денежной массы, 5% осуществляется в стимбаксах. Стимбакс отражает обязательство создать стоимость равную американскому доллару в стимах в будущем и никак не влияет на количество стимов сегодня. Изменение коэффициента долг/собственность может влиять на ощущаемую ценность стимов, но ни как напрямую не связана с падением ценности стимов. Если ценность стима растет с течением времени, тогда количество стимов, которые могут быть созданы в будущем будет меньше и соответствующая инфляция никогда фактически не произойдет. - -Таким образом общее количество потраченных стимов для того, чтобы финансировать контент, курирование, майнинг и ликвидность равняется 10% от капитализации в год или 1.2% в месяц. Идентичный способ перераспределения богатства мог бы быть применен без изменений денежной массы стимов путем применения отрицательных процентных ставок на ликвидные стимы в районе 10% в месяц. Или по-другому это можно было реализовать выставлением 3% комиссий (как у кредитных карт) на каждый трансфер имея около 1% стимов, которые перемещаются в течение дня. [Биткоин сеть перемещает](https://blockchain.info/charts/estimated-transaction-volume) 400 тысяч биткоинов из 15.5 миллионов (или 2.5% ежедневно). - -Цель ликвидных стимов в стимуляции обмена собственности между долгосрочными держателями. Сеть облагает изменение собственности для целей финансирования роста. Этого налога на перемещение можно практически полностью избежать еженедельным автоматическим обменом стимов на стим-баксы, пока сеть конвертирует стим-мощь обратно в стим. Общее количество времени, которое обычные держатели стимов будут их держать незначительно для того, чтобы количество создаваемых стимов превысило такие эффекты как волатильность или торговые комиссии. - -## Влияние от создания токенов выше чем 90% -На 1 июля ~98% всех стимов было конвертировано в стим-мощь. Это показывает, что спрос на долгосрочно держание доминирует. В таком состоянии и ликвидные стимы и стим-мощь размываются для финансирования вознаграждений. - -За первые 2 года жизни Биткоина сеть выдержала годовую инфляцию [более 100%](https://bitcointalk.org/index.php?topic=130619.0). За первые 5 лет инфляция составляла более 30%, а за первые 8 лет он была выше 10%. В соответствии с инструментом оценки будущей инфляции, включенной в исходный код Стима, Стим моментально достигает годовой инфляции в районе 12% всего через год (не включая эффект от операций со стим-баксами). - -## Учет в Стим -Рост денежной массы Стима - это в большинстве своем учетный артефакт созданный желанием избежать отрицательных процентных ставок для ликвидных стимов. Отрицательные процентные ставки усложнили бы жизнь бирж, которым бы пришлось подстраивать балансы пользователей, чтобы учитывать отрицательную процентную ставку стимов на балансе. Отражение же блокчейн логики имела бы много ошибок и усложнила бы интеграцию и адаптацию. Следовательно Стим выбрал подход никогда не требовать плату с чьего-то счета, но вместо этого увеличивать денежную массу. Такой подход достигает идентичного экономического результата без необходимости того, чтобы каждый, кто хочет принимать стимы, реализовывать отрицательные процентные ставки в своей внутренней учетной книге. - -Сторонний эффект возрастающей денежной массы в том, что сеть будет требовать всегда возрастающий уровень точности в учете. В среднем количество битов требуемой для представления типичного аккаунта будет расти на 1.3 ежегодно. Пройдет всего 10 лет после того, как вовлекаемые числа больше не будут проходить в 53 битные лимиты поддерживаемые JavaScript или 64 битную точность поддерживаемую современными CPU. Через некоторое время размер вовлеченных цифр вырастет за пределы человеческого понимания. К тому же самые малозначимые биты будут иметь настолько мало экономической ценности, что можно их рассматривать как бессмысленные. - -Для того, чтобы компенсировать возрастающую точность, сеть Стим осуществляет деноминацию 10:1 каждые 32000000 блоков (около 3.3 лет). В этот момент все балансы Стим делятся на 10, а все цены умножаются на 10. Криптовалютные биржи должны будут приостановить торговлю в это время, обновить балансы и ценовую историю для отражения деноминации перед возобновлением торговли. - -Все ошибки округления будут осуществляться в пользу сети. Каждый баланс может потерять до 0.009 стимов из-за округлений, но это количество стимов должно быть экономически малозначимо. В общей сумме все держатели стим-мощи потеряют в сумме максимум 0.009 стимов - -# Мощь Стима -Стим понимает, что ценность всех контрибьюций пользователей (посты и голоса) - больше чем сумма их частей. Отдельный комментарий стоит почти ничего, но миллионы курированных постов стоят много миллиардов или даже триллионов рублей. Отдельный голос обеспечивает мало ценности с точки зрения курирования, но миллиарды голосов это очень эффективное курирование. Контент без курирования имеет очень ограниченную ценность. Если взять весь существующий контент в Интернете и убрать из него ссылки, Гугл не смог бы обеспечить полезную поисковую выдачу. Ссылки между кусочками информации дают ей невероятную ценность. - -Так как все выигрывают, все должны платить. Другими словами, никакой пользователь не должен ожидать, что ему будут платить за ничего, но вместо этого должны платить за все что он делает, что приносит Стиму ценность. Все что мы должны сделать - это выяснить какие контрибьюции пользователей приносят социальной сети ценность, а какие нет. - -В сумме пользователи Реддита голосуют 220 раз в секунду и создают 23 поста в секунду. Реддит оценивается в диапазоне между 30 миллиардами и 240 миллиардами рублей, что означает что каждый голос и пост стоит между 4 и 30 рублями, предполагая что ценность Реддита, в большинстве своем, это последний год активности. Кто-то может спорить, что большая часть ценности Реддита в дискуссии реального времени, которая случилась за последнюю неделю, что драматично увеличивает ценность новой активности. Люди идут туда, где люди сегодня, а не туда где люди были в прошлом году. - -## Никаких Микроплатежей, Чаевые Опциональны -Существующие попытки интегрировать криптовалюту в социально-медийные платформы фокусировались на том, чтобы пользователи платили друг другу. Многие сервисы пытались реализовать чаевые. В теории, если мы сделаем типинг достаточно простым, тогда больше людей будет это делать. Другие сервисы пытались сделать так, чтоб люди платили для продвижения своего контента. Другие пытаются выстроить малые рынки предсказаний на то, как много чаевых та или иная статья получит. - -Все эти подходы сводятся к микроплатежам. Они отличаются только тем, кто осуществляет платеж. Они все страдают от недостаточной вовлеченности людей, которые делают микроплатежи. В поисках мотивации производства контента, предприниматели настолько сильно фокусировались на том, кто должен платить, что они упустили очевидную реальность: каждый выигрывает от действия каждого, так что все должны платить или никто не должен платить, в зависимости от того, как ты смотришь на это. - -Стим обходит микроплатежи полностью, так как когда пользователь голосует за пост, сообщество платит по счету. Независимо от того, пользователь лайкнет пост или нет, одно и то же количество денег будет потрачено, а средства не идут напрямую от голосующего. - -Ментальная энергия ассоциированная с принятием экономического решения становится барьером для участия большинства людей. - -> Мы испытаем огромное количество выборов каждый день в отношении того, что использовать онлайн в эту цифровую эру информационного взрыва, и каждое дополнительное решение, которые мы должны принимать, добавляет неопределенности и беспокойства. Фанаты микроплатежей верят, что упрощенная имплементация и улучшеный дизайн приложения могут минимизировать навязчивость микроплатежей и улучшить пользовательский опыт, но их аргумент только создает двойные стандарты для процесса принятия решений. Транзакция не может одновременно стоить достаточно чтобы обосновать решение и стоить так мало, чтобы решение было автоматическое. **Единственная транзакция, которую пользователь может подтвердить не думая, это транзакция, которая стоит для него ноль (0, zero, ничего, бесплатно)**. Таким образом любая микротранзакция с положительной ценностью будет накладывать ментальные издержки, т.к. она требует принятия решения. Более того, ментальная стоимость транзакции имеет определенный уровень. Этот феномен ставит микроплатежи в гораздо более неудобное положение. Например, легко думать, что копия сегодняшней газеты стоит 50 рублей, но читатель испытает гораздо больше беспокойства и сложностей определяя ценность каждой статьи или слова в газете. Эта дилемма будет только реплицироваться и усугубляться если весь онлайн контент будет разделен на компоненты и индивидуально оцениваться через систему микроплатежей. Из [Микроплатежи: Жизнеспособная бизнес модель](http://cs.stanford.edu/people/eroberts/cs181/projects/2010-11/MicropaymentsAndTheNet/issues.html). - -В Стиме микроплатежи осуществляются производителям контента, но те кто голосуют не платят. Вместо этого, затраты на вознаграждение оплачиваются через вновь создаваемые токены. Кто угодно может присоединиться к системе, проголосовать, чтобы заплатить кому-то, а потом выйти из системы с бОльшим количеством денег, чем было до входа (если предположить, что рыночная оценка системы Стим остается постоянной). Другими словами, микроплатежное решение обеспеченное Стимом, дает пользователю опыт похожий на многие мудро используемые сайты основанные на контенте модерируемом пользователями. - -Более того, Стим платит людям, чтобы выяснить кому нужно заплатить. Этот способ мышления революционен. - -## Ценность в Ссылках -Интернет бы потерял большую часть своей ценности если бы все ссылки были бы удалены из контента. Взаимосвязи между страницами позволяют Гуглу идентифицировать лучший рецепт яблочного пирога среди 16 миллионов результатов. Без ссылок, единственную информацию, которую Гугл бы имел - это частота слов. - -Ссылки могут принимать многие формы и адаптироваться со временем. Каждый раз когда пользователь лайкает кусочек контента в социальной сети, то он добавляет ссылку между ним и контентом. В свою очередь это связывает потребителя и производителя через контент. Чем больше ссылок в такой сети, тем более ценной информация становится. Это относительное и намеренное соединение информации обеспечивает ей ценность. - -Социальная сеть может максимизировать ценность извлеченную из набора контента максимизируя количество и качество ссылок. Курирование контента дорогое удовольствие, которое требует временных затрат. В тоже время эта задача практически нерешаема для компьютеров при отсутствии ссылок. Стим вознаграждает пользователей, которые первыми находят хороший контент. - -Через стимуляцию курирования сеть Стим способна использовать автоматизированные алгоритмы для того, чтобы выделить ценную информацию из огромного количества контента. - -## Решение Проблемы Приземления Криптовалютных Пользователей -Очень не легко обмануть криптовалюту. Кто-то, кто обнаружил Биткоин и хочет попробовать его, быстро понимает, что ему надо зарегистрироваться на бирже и пополнить счет кредитной картой или через банковский перевод. Какой бы была скорость адаптации Фейсбука если нужно было сделать такие действия, с деньгами и двумя формами идентификации личности? - -Стим решает проблему давая каждому способ заработать за то, чтобы делать простые, но ценные задачи. Это поможет распределить Стим токены очень широко. Это полезно, потому-что криптовалюты тоже имеют сетевой эффект (большее количество пользователей делают валюту еще более ценной). В качестве экстремального примера подумайте, а что если бы Сатоши взял бы 100% биткоинов себе. Такой Биткоин ничего не стоил бы. - -## Решение Проблемы Ликвидации Криптовалюты -Валюта, которую сложно использовать или невозможно продать - имеет малую ценность. Тот, кто обладает 100 рублями ценности в биткоинах, обнаружит, что для того, чтобы продать их нужно больше чем 100 рублей. Нужно открыть счет на бирже, пройти KYC валидацию, заплатить комиссии. Маленькое количество криптовалюты - это как мелкая сдача, которую люди не особо желают, так же как не желают нагнуться, чтобы поднять упавшую монетку. - -Торговцы дают пользователям способ быстро конвертировать их криптовалюту в ощутимые товары и услуги. Торговцам нужна валюта привязанная к их учетной единице, обычно американскому доллару. Прием волатильность валюты обычно создает существенный головняк в учете. - -Торговцы будут принимать любую валюту, если она повышает их продажи. Наличие большой пользовательской базы со стабильной валютой, такой как стим-бакс снижает барьеры на вход для торговцев. Наличие торговцев улучшает систему, создавая возможность выходить из системы без необходимости, что-то обменивать. - -Другой способ которым люди могут ликвидировать небольшое количество криптовалюты, которое они получают от участие в Стим платформе - это оставлять на чай другим. Это как оставлять мелкую сдачу официанту. Когда достаточно большое количество людей оставляет небольшие чаевые, то они могут собираться в значимые количества. Ты и официант приобретаете от чаевых. - -## Цензура -Стим это децентрализованная сеть, которая обслуживается делегатами в разных юрисдикциях по всему миру. Все пользовательские действие публично записаны на блокчейне и могут быть публично верифицированы. Это означает, что не существует ни одной сущности которая может цензурировать контент, который ценен для пользователей держателей стимов. - -Отдельные вебсайты такие как steemit.com могут цензурировать контент на их конкретном сайте, но контент опубликованный на блокчейне это широковещательный трафик, а зеркала по всему миру могут продолжать делать его ценным. - -Свобода слова это основание для всяких свобод, а любые нарушения принципа свободы слова подрывают единственный миролюбивый способ достижения согласия: дискуссия. Без свободной дискуссии голосующие не могут быть полностью проинформированы, а не информированные голосующие это более серьезная угроза для общества, чем потеря права голосования. Цензурирование - это способ воровства голосов через ограничение публичного обсуждения. Стим предан тому, чтобы обеспечивать свободу слова в процессе строительства свободного сообщества. - -## Решение Проблемы Органического Поиска через Поисковую Оптимизацию -Большинство криптовалют генерируют мало ценности для тех, кто использует сеть неактивно. Стим, наоборот, генерирует контент и поощряет пользователей делиться им. Этот контент индексируется поисковыми движками и приносит ценность большому количеству пассивных пользователей. Этот поисковой трафик создает органическую рекламу сети Стим и добавляет сетевых эффектов. - -## Математический Нотариат -Интернет представляет самый простой инструмент для обмена и распространения информации в мире. Грустно осознавать, что к несчастью создателей контента в Интернете достаточно сложно обеспечить их права. На существующих социально-медийных платформах, авторство это что-то, что может быть потеряно за ночь - видео или картинка может быть продублирована без разрешения автора или должного ему уважения. Аккаунт может быть заблокирован без объяснения причин. - -В социальных медиа основанных на блокчейне создатель или автор мог бы всегда иметь возможность указать на публичную запись или временной штамп, предоставив доказательства происхождения контента. В ситуации когда автор хотел бы доказать факт его авторства в случае несанкционированного копирования его контента, блокчейн мог бы являться источником такого доказательства. В будущем авторство подтверждаемое блокчейном могло бы распознаваться правительствами и может иметь вес в суде, что даст авторам контента инструмент для соблюдения их авторских прав. - -В то время как временные штампы могут быть реализован на любом блокчейне, и уже существует несколько разных проектов по реализации подобных сервисов на базе сети Биткоин, Стим имеет серьезное преимущество в этом королевстве, потому-что авторы контента - это граждане первого сорта. Блокчейн Стима был создан с нуля вокруг юзкейса публикации контента. А это позволяет создателям контента получать сервис по математическому нотариату просто написав пост или оставив комментарий. - -## Замена Рекламы на Вознаграждения -В случае с большинством моделей монетизации контента, создатели контента используют рекламу в той или иной форме. Многие создатели осознают каким образом реклама уничтожает ценность их работы для потребителей, но они вынуждены искать способ окупить свои временные затраты. Реклама представляет собой палку о двух концах. С рекламой создатель имеет возможность заработать достаточно легко. Без рекламы монетизация проблематична, но контент богаче. - -Создатели, которые постят в социальных медиа и подключены к Стиму, могут монетизироваться просто, если их работа распознается и оценивается положительно сообществом Стим. Выплаты, основанные на блокчейне, полностью цифровые и не имеют посредников. Таким образом монетизация через вознаграждения блокчейном должна быть быстрее с менее низким порогом входа чем через рекламу. - -# Заключение -Стим - это эксперимент разработанный для решения вызовов в индустриях криптовалют и социальных медиа, объединяющий лучшие аспекты обоих. Стим представляет возможность для заработка создателям контента и читателям способами, которые не существовали до этого в индустрии социальных медиа. Со Стимом, люди онлайн зарабатывают настоящие награды, которые напрямую коррелируют с их контрибьюцией. Эти вознаграждения будут иметь ценность американских долларов из-за исследований рыночной цены и ликвидности. А те люди, которые долгосрочно держат стим будут иметь эксклюзивную мощь, отличную от тех кто не держит. - -> Переводено с ♡ для всего русскоязычного населения. - -> Я верю, что такие системы как Стим имеют потенциал составить серьезную конкуренцию существующему неэффективному монополизированному государственному механизму, который плохо решает задачу по обогащению и развитию наций. - -Бумага переведена переведена @hipster \ No newline at end of file diff --git a/5-development/roadmap.md b/5-development/roadmap.md deleted file mode 100644 index a53bc298..00000000 --- a/5-development/roadmap.md +++ /dev/null @@ -1,43 +0,0 @@ -Дорожная карта проекта находится в разработке. - -### План развития блокчейн Голос и клиента Golos.io - -Блокчейн проекта Голос, а так же клиент golos.io не являются централизованными ресурсами. Это означает, что все участники проекта, могут высказать свои пожелания в виде конструктивного предложения в комментариях к [этой статье ](https://docs.google.com/document/d/1WQF1xxmCMxzEA95Gnxw4FHViX_6pjVoUlBnItCepOmE/edit) "План развития блокчейн Голос и клиента Golos.io". - -Примите участие в обсуждении и редактировании. Имейте в виду, что план развития не будет учитывать все мнения до единого. К сожалению, это просто не представляется физически возможным. - -### Конференция разработчиков Голоса, апрель 2017 г. - -[![Видео доклада Димы Стародубцева "Возможности для разработчиков"](https://img.youtube.com/vi/9Bh-v_KBobc/0.jpg)](https://www.youtube.com/watch?v=9Bh-v_KBobc) - -Видео доклада Димы Стародубцева ([@hipster](https://golos.io/@hipster)) "Возможности для разработчиков". - -Список тем, ставших предметом обсуждения: -1:05 - результаты ICO Голоса для инвесторов: цена токенов x3, капитализация Голоса 3 млн.$ - -1:50 - на Голосе 5700 активных пользователей в месяц - -2:07 - блокчейн Голоса пятый по количеству транзакций в мире - -2:25 - позитивная динамика пользовательской активности - -2:56 - инициатива #открытый-код от Cyber.Fund - -4:59 - стратегия развития на ближайший год - разделить проект на три части: инвестиционный фонд Golos.Fund, независимая компания GolosCore.org по разработке ядра платформы и также независимое коммерческое приложение Golos.io - -6:37 - подробно о том, что такое Golos.Fund - -8:22 - 6 причин разрабатывать на Голосе: доход с релизов, доход с регистраций, доход с активности пользователей, инвестиции Голос.Фонда, доступ к англоязычному рынку, уже существует крутое сообщество - -10:47 - 7 причина разрабатывать на Голосе - простота и доступность - -11:37 - возможности блокчейна Голос для разработчиков - -12:25 - существующие ограничения блокчейна Голос - -13:53 - чем Голос лучше других блокчейн платформ: самый быстрый, самый производительный, уже нагружен - -17:03 - рассуждения о консенсусе на Голосе: необходимость PoW, возможность добавления залога к нодам по аналогии с DASH, NEM и аналогичными криптовалютами - -По материалам [поста](https://golos.io/ru--golos/@primus/golos-zhzhyot-doklad-dimy-starodubceva-s-mitapa-blokchein-proekta-golos-vozmozhnosti-dlya-razrabotchikov-18-aprelya-2017) - diff --git a/6-services/upit.md b/6-services/upit.md deleted file mode 100644 index d213f8cf..00000000 --- a/6-services/upit.md +++ /dev/null @@ -1,156 +0,0 @@ -# Что это - -@upit - это сервис, который позволяет получить апвот для вашего поста, предварительно оплатив его. - -Upit является коллективным сервисом, т.е. за пост голосует сам upit + паровоз других аккаунтов с суммарной Силой Голоса в несколько миллионов Голосов. - -# Контакты, техподдержка - -* [Блог на Голосе](https://goldvoice.club/@upit) -* [Канал новостей в Telegram](https://t.me/golos_upit_news) -* [Группа техподдержки](https://t.me/golos_upit) - - -# Алгоритм формирования цены - -Цена апа обратно пропорциональна средневзвешенной Voting Power всех аккаунтов, подключенных к upit. Это означает, что цена апа минимальна при максимальной средневзвешенной Voting power, и рост цены происходит по мере снижения Voting power. Таким образом, цена является саморегулируемой величиной на основании спроса, создаваемого пользователями Голоса. Больше заказов - больше цена. Меньше заказов - меньше цена. - -## Формула расчёта цены - -``` -K = 1.8 -K2 = 3.3 - -base_price = ggests * gbg_golos_price * K - -price = ggests * gbg_golos_price/K2 * (100 - avg_voting_power) + base_price -``` - -* `K, K2` - коэффициенты-константы -* `ggests` - суммарная СГ паровоза в гига-GESTS -* `gbg_golos_price` - медианная цена GBG/GOLOS -* `avg_voting_power` - средневзвешенная voting power среди инвесторов upit - -## Voting power - -Voting power паровоза является не просто средним значением VP аккаунтов, а средневзвешенным значением. Это означает, что аккаунты с большой СГ более существенно влияют на voting power. - -**Пример.** - -Допустим, у нас 2 аккаунта, 20 СГ и 80 СГ. - -|acc | СГ | VP | -|----|----|----| -| a | 20 | 50 | -| b | 80 | 100 | - -Веса: - -* weight_a = `50 * 20/(20 + 80) = 10` -* weight_b = `100 * 80/(20 + 80) = 80` -* avg\_voting\_power = `10 + 80 = 90` - -В случае использования простого среднего значения, avg\_voting\_power была бы 75. - - -# Как пользоваться автору - -Для работы потребуется telegram. - -1. Начать диалог с [@upit_bot](https://t.me/upit_bot) -2. Нажать "Зарегистрироваться" -3. Зайти в "Автор" -4. Нажать "Прицелиться". Будет запрошен URL на пост, после чего вы получите стоимость апа. -5. Вернуться в /start и зайти в "Баланс" -6. Нажать "Пополнить баланс". Вы получите индивидуальный код пополнения и краткую инструкцию что делать. -7. Вернуться в меню "Автор", сделать "Прицелиться" -> "Заказать". -8. После выполнения заказа вам придёт уведомление в telegram. - - -# Правила сервиса - -* В случае публикации мусорного контента, инвесторы оставляют за собой право снять апвоут без возврата денег. - -# Для инвесторов - -Если у вас есть неиспользуемые апвоуты, вы можете стать инвестором @upit - -## Как стать инвестором - -Условия: - -* Ваша СГ > 1000 -* Комиссия сервиса: 3% - -## Подключение инвестора - -1. Зайти в [@upit_bot](https://t.me/upit_bot) -2. Нажать "Зарегистрироваться" -3. Перейти в меню "Инвестор" -4. Перейти в "Подключить Голос-аккаунт" -5. Ввести имя аккаунта и приватный posting-ключ. -6. По желанию - настроить блэк-лист и порог VP. - -Чтобы понять, что вы подключились, перейдите в меню "Управление Голос-аккаунтами". В случае, если вы успешно подключили аккаунт, вы увидите его в списке, и будут доступны индивидуальные настройки. - -## Вывод средств - -При покупке вызовов upit средства начисляются на баланс инвестора в системе upit. При каждом начислении приходит уведомление в telegram. - -Для вывода средств: "/start" -> "Баланс" -> "Вывести средства". Вы получите краткую инструкцию о том, как выводить, и пример. - -# FAQ - -### Как расшифровать ответ upit на прицеливание? - -Пример ответа от upit: - -``` -Цена апа для этого поста составляет: 581.699 GBG. -Сумма СГ: 2424189. -Средневзвешенная Voting Power: 86.79. -Текущий pending_payout_value: 0.006 GBG. -Прогнозируемый pending_payout_value: 188.508. -Текущая авторская выплата: 0.002 GBG, 0.000 GOLOS, 0.000 GP. -Прогнозируемая авторская выплата: 70.690 GBG, 0.000 GOLOS, 6.329 GP. -Прогнозируемый профит: -504.057 GBG. -``` - -Здесь: - -* Сумма СГ: суммарная Сила Голоса аккаунтов, которые готовы проголосовать за ваш пост -* pending\_payout\_value - общее значение выплаты поста (авторская + кураторская награда) по данным блокчейна, в GBG. Это число GBG, которое отображается в клиенте golos.io в виде "потенциальной выплаты" -* Прогнозируемая авторская выплата: рассчитанная авторская выплата до и после апа @upit. Расчёт производится аналогично алгоритму системы (блокчейну). -* Прогнозируемый профит - это разница между ожидаемой авторской выплатой после и до апа. Значение авторской выплаты складывается из 3-х составляющих: - * GBG - * GOLOS, конвертированные в GBG по рыночному курсу внутренней биржи - * Сила Голоса, так же конвертированная в GBG по рыночному курсу - -Таким образом, положительное значение профита говорит о том, что вызов @upit выгоден на текущий момент времени и принесёт прибыть. Например, сообщение `Цена апа для этого поста составляет: 200. Прогнозируемый профит: 20"` говорит о том, что вы заплатите 200 GBG, а в авторскую выплату добавится 220 GBG. - -Отрицательное значение профита говорит о потенциальном убытке. - - -### Что происходит в ситуации, если проголосовавший инвестор снимает свой голос? - -Проголосовавший инвестор снимает ап, если видит злоупотребления правилами сервиса. Если же инвестор снимает ап из личной неприязни к автору, он возвращает сумму, полученную за ап. Если инвестор по каким-либо причинам отказывается возвращать сумму, это сделает сервис @upit. - -### Что происходит, если ап заказывается на пост, за который инвестор уже проголосовал самостоятельно? - -Аккаунт инвестора в этом случае не участвует в апе upit и не получает профит. - -### Какой порог Voting Power лучше поставить? - -Общая рекомендация - оставить порог VP "по умолчанию", т.е. на 30%. При такой настройке фактически вы доверяете -управление voting power upit-у. В сервисе существует механизм автоматического пропуска разряженных аккаунтов: при -поступлении заказа на пост проверяется, есть ли аккаунты, заряженные более чем на 98%. Если находится, например, 2 -аккаунта, происходит автоматический пропуск 2-х самых разряженных аккаунтов. Такая система позволяет с одной стороны не -допускать "протухания" апов, а с другой - автоматически позволяет восстановиться Voting Power просаженных аккаунтов. -Таким образом, если вы часто голосуете за посты самостоятельно, то просто будете участвовать в меньшем количестве заказов upit. - -Несмотря на то, что значение 30% кажется весьма низким, у вас вряд ли получится так сильно разрядиться. Фактически, -upit начнёт вас автоматически отключать в районе 75%. - -### Как переподключить Голос-аккаунт на другое аккаунт Telegram? - -Для этого достаточно пройти обычную процедуру подключения Голос-аккаунта на другом аккаунте. Голос-аккаунт автоматически переключится на новый аккаунт. \ No newline at end of file diff --git a/7-witness/witness-scripts.md b/7-witness/witness-scripts.md deleted file mode 100644 index e5d1cbef..00000000 --- a/7-witness/witness-scripts.md +++ /dev/null @@ -1,68 +0,0 @@ -# Скрипты обновления price feed - -На данной странице аггрегируются скрипты для делегатов для публикации ценового фида GBG/GOLOS. Зачем нужен ценовой фид и какова в этом роль делегатов, читайте в статье [Что такое GBG](/what-is-gbg.md). - -Не существует какого-либо единого одобренного скрипта. Делегаты вольны устанавливать курс цены исходя из своего понимания ценообразования на золото. - -# Скрипты, выложенные на github - -## golos-witness-tools (@vvk) - -- [Проект на github](https://github.com/bitfag/golos-witness-tools/blob/master/PRICEFEED.md) -- [Анонс](https://golos.io/golostools/@vvk/anons-novogo-skripta-obnovleniya-price-feed-i-proekta-golos-witness-tools) - -* Не требует наличия *cli_wallet* -* Написан на python -* Удобен для запуска из cron -* Возможность работы в виде docker-контейнера, - -Для получения цены золота используется goldprice.org, а если он недоступен, то цена берётся с Центробанка РФ. Для получения цен USD/BTC и BTC/GOLOS используется coinmarketcap, а если он недоступен, то данные берутся с бирж. - - -## golospricefeed (@roelandp) - -[Проект на github](https://github.com/roelandp/golospricefeed) - -Скрипт на python, требует запущенного cli_wallet. - -Цену золота берёт с goldprice.org, прочие курсы - с нескольких различных бирж. - -## Golos Feed JS (@someguy123) - -[Проект на github](https://github.com/Someguy123/golosfeed-js). - -Написан на Node.JS, предусмотрен запуск в docker-контиейнере. Используется форкнутая версия GolosJS-Lib. - -Курс золота берётся с forexpf.ru, курсы GOLOS, BTC - с различных бирж. - - -# Скрипты без отдельного SCM-репозитория - -## witness-php-publish-feed (@on1x) - -[Анонс](https://golos.io/goldvoice/@on1x/witness-php-publish-feed) - -Скрипт на php. - -Курс золота берётся от Центробанка РФ, курсы GOLOS, BTC - с coinmarketcap.org. - -## Скрипт @primus - -[Анонс](https://golos.io/ru--golos/@primus/onlain-monitoring-kraudseila-skolko-golosov-vy-mozhete-kupit-za-1000-rublei-ili-1-btc-plyus-avtomatizaciya-prais-fidov-dlya). - -Скрипт на perl, берёт готовые данные из внешнего источника, требует запущенного в фоне cli_wallet. - -## Скрипт @on0tole - -[Анонс](https://golos.io/ru--delegaty/@on0tole/predstavlyayu-skript-dlya-avtomaticheskogo-obnovleniya-price-feed-dlya-delegatov) -[Обновлённая версия by @litvintech](https://golos.io/ru--delegaty/@litvintech/obnovlennyi-skript-dlya-avtomaticheskoi-postavki-cenovykh-fidov-dlya-delegatov) - -Скрипт на bash, требует запущенного cli_wallet. -**Скрипт явно устарел.** - -## Скрипт @xtar - -[Анонс](https://golos.io/ru--delegaty/@xtar/bash-skript-dlya-avtomaticheskoi-publikacii-fida) - -bash, требует запущенного cli_wallet. Берёт готовые данные с внешнего источника, самостоятельное вычисление цены отсутствует. - diff --git a/README.md b/README.md index 1699e051..451b8e61 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,10 @@ -# База знаний проекта Медиаблокчейн ГОЛОС -
        +# База знаний Golos -[![Логотип Голос](https://raw.githubusercontent.com/GolosChain/wiki/master/_images/golos_logo.png)](https://golos.io/) -

        +[![](https://raw.githubusercontent.com/golos-blockchain/wiki/master/golos_logo.png)](https://golos.id/) -- Эта wiki - центральная точка для сбора и распространения знаний по проекту **Медиаблокчейн Голос**. Вики доступна по адресу [wiki.golos.io](https://wiki.golos.io). +[wiki.golos.id](https://wiki.golos.id) - центральная точка для сбора и распространения знаний по проекту **Медиаблокчейн Голос**. -- Начните свое изучение Голоса с раздела **[🚀 НОВИЧКАМ](/1-introduction/welcome.md)**. +Начните свое изучение Голоса с раздела для [Пользователей](users/welcome.md). -- Если вас интересует разработка программного обеспечения для Голоса и на Голосе, обратитесь к разделу **[💻 РАЗРАБОТЧИКАМ](/razrabotchikam.md)**. - -- Golos Wiki является результатом коллективного труда. Каждый может [поучаствовать в ее развитии](/uchastie-v-viki-golosa.md). -- Обращайтесь с [вопросами и предложениями](/kontakti.md) +Если вас интересует разработка программного обеспечения для Голоса и на Голосе, начните с этого [раздела](developers/basics/). diff --git a/SUMMARY.md b/SUMMARY.md index cfc12d3a..4d6805af 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,116 +1,56 @@ -# Summary +# Table of contents -* [📌 Введение](README.md) -* [🚀 НОВИЧКАМ](novichkam.md) - * [➊ Начни отсюда](1-introduction/welcome.md) - * [Способы регистрации](1-introduction/registratsiya/sposobi-registratsii.md) - * [🚀 Первые шаги](pervie-shagi.md) - * [🔠 Терминология](1-introduction/terminologiya.md) - * [Регистрация](1-introduction/registratsiya.md) - * [Заполнение профиля](1-introduction/zapolnenie-profilya.md) - * [Интерфейс блога](1-introduction/interfeis-lichnogo-bloga.md) - * [Интерфейс golos.io](1-introduction/interfeis-golosio.md) - * [Публикация в блоге](/1-introduction/posting.md) - * [Кошелек, ключи, выплаты](1-introduction/koshelek-klyuchi-viplati.md) - * [Благодарность пользователю](kak-bistro-otblagodarit-avtorov-ponravivshihsya-postov-i-otvetov.md) - * [Жалоба на пользователя](kak-pozhalovatsya-na-polzovatelya-ili-ego-posti.md) - * [Игнор пользователя](dobavlenie-polzovatelei-v-ignor-kak-eto-rabotaet.md) - * [Внутренний рынок](1-introduction/vnutrennii-rinok.md) - * [❓❗ Вопросы и ответы](1-introduction/faq.md) - * [Ответы команды Golos.io](1-introduction/faq/otveti-komandi.md) - * [👁 Видео-материалы](1-introduction/video.md) - * [🎯 Полезные статьи](stati.md) - * [Способы заработка](1-introduction/zarabotok.md) - * [Просто о блокчейне](1-introduction/prosto-o-blokcheine.md) - * [КриптоТермины ](1-introduction/kriptotermini.md) - * [Смайлики на Голосе](1-introduction/smailiki-na-golose.md) - * [Сервис steemul.ru](1-introduction/steemulru.md) - * [Сервис golos.cf/history](1-introduction/goloscfhistory.md) - * [Сила при голосовании](/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md) - * [Выбор силы голосования](//1-introduction/The choice of the Power of the vote.md) - * [Линейка и квадрат](tekuschaya-ekonomicheskaya-model-viplat-za-posti-na-golose.md) - * [Бенефициарство](1-introduction/benefitsiarstvo.md) -* [💯 ЭКОНОМИКА](instruktsii.md) - * [Постинг \(публикация\)](2-rewards/posting_rewards.md) - * [Курирование \(лайки\)](2-rewards/curation_rewards.md) - * [Инвестирование](2-rewards/commitment_rewards.md) - * [Сбережения](2-rewards/savings_rewards.md) - * [Делегатство](2-rewards/delegatstvo.md) - * [Майнинг](2-rewards/mining_rewards.md) -* [📘 ДОКУМЕНТЫ](dokumenti.md) - * [Белая бумага Голоса](4-documentation/golos_whitepaper.md) - * [Белая бумага Голос•Фонда](4-documentation/belaya-bumaga-golosfonda.md) - * [Белая бумага по DPOS](4-documentation/belaya-bumaga-po-dpos.md) - * [White Paper Steem на русском](4-documentation/steem_whitepaper.md) - * [Blue Paper Steem на русском](4-documentation/blue-paper-steem-na-russkom.md) - * [Дорожная карта](5-development/roadmap.md) -* [💻 РАЗРАБОТЧИКАМ](razrabotchikam.md) - * [Архитектура](arhitektura.md) - * [Роли нод](golosd/architecture/node-roles.md) - * [Администрирование](administrirovanie.md) - * [Установка на Ubuntu](golosd/admin/install_ubuntu.md) - * [Установка на Mac OS X](golosd/admin/install_osx.md) - * [Механика](mekhanika.md) - * [Алгоритм консенсуса](golosd/mechanics/consensus_algorithm.md) - * [Динамические права аккаунта](golosd/mechanics/dynamic_account_permissons.md) - * [Производительность и масштабируемость](golosd/mechanics/performance_and_scalability.md) - * [Устаревание транзакций](golosd/mechanics/trx-expiration.md) - * [Медианные параметры](golosd/mechanics/median-props.md) - * [Bandwidth](golosd/mechanics/bandwidth.md) - * [API-документация](api-dokumentatsiya.md) - * [API part 1](golosd/api/api-golos-ch1.md) - * [API part 2](golosd/api/api-golos-ch2.md) - * [API part 3](golosd/api/api-golos-ch3.md) - * [API part 4](golosd/api/api-golos-ch4.md) - * [Операция decline\_voting\_rights](golosd/api/operatsiya-declinevoting-rights.md) - * [API-документация для HF18](api-hf18-dokumentatsiya.md) - * [API cli-wallet для HF18](golosd/api-hf18/HF18-API-cli-wallet-reference.md) - * [Разработка](razrabotka.md) - * [Руководство по контрибьютингу](golosd/devel/guideline.md) - * [Справочные данные](spravochnie-dannie.md) - * [cli\_wallet](golosd/reference/cli_wallet.md) - * [Руководства \(HOWTO\)](rukovodstva-howto.md) - * [Скрипт регистрации аккаунтов от vik](golosd/howto/vik-registration-service.md) - * [Как использовать мультиподписи](golosd/howto/multisig.md) - * [Как объединять операции в одну транзакцию](golosd/howto/ops-merging.md) - * [Создание аккаунта через cli\_wallet](golosd/howto/cli_wallet-create-account.md) - * [Кэширование API](golosd/howto/api-cache.md) - * [Установка ноды делегата](golosd/howto/witness-node.md) - * [Запуск golos ноды в контейнере docker](golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md) - * [Генерация графика эмиссии](golosd/howto/emission_chart.md) - * [Мониторинг транзакций аккаунта](golosd/howto/transactions-monitoring.md) - * [Пример запуска тестовой сети \#1](golosd/howto/testnet1.md) - * [Пример запуска тестовой сети \#2](golosd/howto/testnet2.md) - * [Генерация ключей аккаунта](golosd/howto/generate-keys.md) - * [Расчёт награды в зависимости от вклада апвоута](golosd/howto/reward-calculation.md) - * [Вычисление кураторских вознаграждений](golosd/howto/vichislenie-kuratorskih-voznagrazhdenii.md) - * [HardFork HF18](hardfork-dokumentatsiya.md) - * [HF18: Изменения в API](golosd/HardFork/New_HardFork-HF18.md) - * [HF18: Релиз-кандидат RC2](golosd/HardFork/RC2-HF18.md) - * [HF18: Новые возможности блокчейна](golosd/HardFork/HF18_ReleaseNotice-rus.md) - * [HF18: Изменения в cli\_wallet](golosd/HardFork/HF18_cli_wallet_changes-rus.md) - * [HF18: Руководство по установке](golosd/HardFork/HF18_BuildInstruction-rus.md) - * [SF-0.18.4: Новые возможности СофтФорка](golosd/HardFork/SF-0.18.4_ReleaseNotice-rus.md) - * [HardFork HF19](hardfork19-dokumentatsiya.md) - * [HF19: Новые возможности блокчейна](golosd/HardFork/HF19_ReleaseNotice-rus.md) - * [HardFork HF20](hardfork20-dokumentatsiya.md) - * [HF20: Устранение критического бага в блокчейне](golosd/HardFork/HF20_ReleaseNotice-rus.md) - * [SoftFork in English](sf-documentation.md) - * [SF-0.18.4 Release Notice](golosd/SoftFork/SF-0.18.4-Release_Notice.md) - * [SF-0.18.5 Release Notice](golosd/SoftFork/SF-0.18.5-Release_Notice.md) - * [Разное](raznoe.md) - * [Обсуждаемое](golosd/mix/riski-izmenenija-GBG.md) -* [👍 ДЕЛЕГАТАМ](delegatam.md) - * [Делегатство](2-rewards/delegatstvo.md) - * [Установка ноды делегата](golosd/howto/witness-node.md) - * [Запуск golos ноды в контейнере docker](golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md) - * [Скрипты для делегатов](7-witness/witness-scripts.md) -* [💡 ПОЛЕЗНОЕ](poleznoe.md) - * [Зеркала golos.io](0-aktualnoe/vnimanie-alternativnie-tochki-vhoda.md) - * [Участие в вики](uchastie-v-viki-golosa.md) - * [💰 БАУНТИ за wiki](0-aktualnoe/baunti.md) - * [Контакты Wiki Golos](kontakti.md) - * [Контакты Golos Core](0-aktualnoe/kontakti-golos-core.md) - * [Контакты Golos.io](0-aktualnoe/kontakti-golosio.md) - * [История](istoriya.md) +* [База знаний Golos](README.md) + +## ПОЛЬЗОВАТЕЛЯМ + +* [Начни отсюда](users/welcome.md) +* [Способы регистрации](users/registration.md) +* [Полезные посты](users/posts/README.md) + * [Внутренняя биржа](users/posts/market.md) + * [Сервис поиска по БЧ](users/posts/golos-history.md) + * [Кошелёк и ключи](users/posts/wallet.md) +* [Вопросы и ответы](users/faq.md) + +## Разработчикам + +* [Основы](developers/basics/README.md) + * [Операции и их типы](developers/basics/operations.md) + * [Объекты и структуры](developers/basics/object-structures.md) + * [Состояние \(стэйт\) системы](developers/basics/state.md) + * [Плагины и их API](developers/basics/plugins-api.md) + * [Библиотеки для работы](developers/basics/libraries.md) + * [Примеры кода](developers/basics/code-examples.md) + * [Формирование транзакций](developers/basics/transaction-formatting.md) + * [Пропускная способность](developers/basics/bandwidth.md) +* [API-документация](developers/api/README.md) + * [API part 1](developers/api/api-golos-ch1.md) + * [API part 2](developers/api/api-golos-ch2.md) + * [API part 3](developers/api/api-golos-ch3.md) + * [API part 4](developers/api/api-golos-ch4.md) + * [Cli-wallet API](developers/api/cli-wallet.md) +* [HardForks](developers/hardforks/README.md) + * [HF18: Руководство по установке](developers/hardforks/hf18_instruction.md) + * [HF18: Новые возможности](developers/hardforks/hf18_release.md) + * [HF18: Изменения в API](developers/hardforks/hf18_api_changes.md) + * [HF18: Изменения в cli\_wallet](developers/hardforks/hf18_cli_wallet_changes.md) + * [SF18.4: Новые возможности](developers/hardforks/sf18.4_release.md) + * [HF19: Новые возможности](developers/hardforks/hf19_release.md) + * [HF20: Устранение критического бага](developers/hardforks/hf20_release.md) + * [HF22: Новые возможности](developers/hardforks/hf22_release.md) +* [Руководства \(HOWTO\)](developers/howto/README.md) + * [Скрипт регистрации аккаунтов](developers/howto/registration-service.md) + * [Как использовать мультиподписи](developers/howto/multisig.md) + * [Как объединять операции в одну транзакцию](developers/howto/ops-merging.md) + * [Кэширование API](developers/howto/api-cache.md) + * [Пример запуска тестнета](developers/howto/testnet.md) + +## Делегатам + +* [Делегатство и роли нод](witnesses/basics.md) +* [Установка ноды](witnesses/node/README.md) + * [Гайд для witness/seed ноды](witnesses/node/guide.md) + * [Настройка для API-ноды](witnesses/node/guide-api.md) +* [Медианные параметры](witnesses/median-props.md) +* [Скрипты для price feed](witnesses/price-feed.md) diff --git "a/_images/01 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217.png" "b/_images/01 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217.png" deleted file mode 100644 index d2312fdd..00000000 Binary files "a/_images/01 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217.png" and /dev/null differ diff --git "a/_images/02 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217 (\321\203\320\262\320\265\320\273\320\270\321\207\320\265\320\275\320\276).png" "b/_images/02 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217 (\321\203\320\262\320\265\320\273\320\270\321\207\320\265\320\275\320\276).png" deleted file mode 100644 index 752852bf..00000000 Binary files "a/_images/02 \321\201\320\270\320\273\320\260 \320\263\320\276\320\273\320\276\321\201\320\260 \320\270 \320\262\321\200\320\265\320\274\321\217 (\321\203\320\262\320\265\320\273\320\270\321\207\320\265\320\275\320\276).png" and /dev/null differ diff --git "a/_images/03 \320\277\320\265\321\200\320\270\320\276\320\264 \320\270\321\201\321\202\320\265\321\207\320\265\320\275\320\270\321\217 \320\263\320\276\320\273\320\276\321\201\320\276\320\262\320\260\320\275\320\270\321\217.png" "b/_images/03 \320\277\320\265\321\200\320\270\320\276\320\264 \320\270\321\201\321\202\320\265\321\207\320\265\320\275\320\270\321\217 \320\263\320\276\320\273\320\276\321\201\320\276\320\262\320\260\320\275\320\270\321\217.png" deleted file mode 100644 index bce88d26..00000000 Binary files "a/_images/03 \320\277\320\265\321\200\320\270\320\276\320\264 \320\270\321\201\321\202\320\265\321\207\320\265\320\275\320\270\321\217 \320\263\320\276\320\273\320\276\321\201\320\276\320\262\320\260\320\275\320\270\321\217.png" and /dev/null differ diff --git "a/_images/04 \320\235\320\276\320\262\321\213\320\271 \321\200\321\213\320\275\320\276\320\272.png" "b/_images/04 \320\235\320\276\320\262\321\213\320\271 \321\200\321\213\320\275\320\276\320\272.png" deleted file mode 100644 index 65d97010..00000000 Binary files "a/_images/04 \320\235\320\276\320\262\321\213\320\271 \321\200\321\213\320\275\320\276\320\272.png" and /dev/null differ diff --git a/_images/tokens.png b/_images/tokens.png deleted file mode 100644 index eb6347f5..00000000 Binary files a/_images/tokens.png and /dev/null differ diff --git a/administrirovanie.md b/administrirovanie.md deleted file mode 100644 index 55e6666f..00000000 --- a/administrirovanie.md +++ /dev/null @@ -1,7 +0,0 @@ -# Администрирование - -* [Установка на Ubuntu](/golosd/admin/install_ubuntu.md) -* [Установка на Mac OS X](/golosd/admin/install_osx.md) - - - diff --git a/api-dokumentatsiya.md b/api-dokumentatsiya.md deleted file mode 100644 index 9c999e65..00000000 --- a/api-dokumentatsiya.md +++ /dev/null @@ -1,9 +0,0 @@ -# Документация по API - -* [API часть 1](/golosd/api/api-golos-ch1.md) -* [API часть 2](/golosd/api/api-golos-ch2.md) -* [API часть 3](/golosd/api/api-golos-ch3.md) -* [API часть 4](/golosd/api/api-golos-ch4.md) - - - diff --git a/api-hf18-dokumentatsiya.md b/api-hf18-dokumentatsiya.md deleted file mode 100644 index 3b727700..00000000 --- a/api-hf18-dokumentatsiya.md +++ /dev/null @@ -1,5 +0,0 @@ -# Методы cli_wallet API для HF18 - -* [API cli-wallet для HF18](/golosd/api-hf18/HF18-API-cli-wallet-reference.md) - - diff --git a/arhitektura.md b/arhitektura.md deleted file mode 100644 index 31ec22e2..00000000 --- a/arhitektura.md +++ /dev/null @@ -1,6 +0,0 @@ -# Архитектура - -* [Роли нод](/golosd/architecture/node-roles.md) - - - diff --git a/assets/ituber.png b/assets/ituber.png deleted file mode 100644 index 8208e9e7..00000000 Binary files a/assets/ituber.png and /dev/null differ diff --git a/assets/logo_developers_golos.png b/assets/logo_developers_golos.png deleted file mode 100644 index 2ff9cbbe..00000000 Binary files a/assets/logo_developers_golos.png and /dev/null differ diff --git a/assets/reblog.jpg b/assets/reblog.jpg deleted file mode 100644 index 90bef59b..00000000 Binary files a/assets/reblog.jpg and /dev/null differ diff --git a/assets/upvote.jpg b/assets/upvote.jpg deleted file mode 100644 index 173f5d03..00000000 Binary files a/assets/upvote.jpg and /dev/null differ diff --git a/book.json b/book.json deleted file mode 100644 index 0b52a014..00000000 --- a/book.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "plugins": [ - "collapsible-chapters", - "anchors", - "etoc", - "youtubex" - ], - "pluginsConfig": { - "youtubex": { - "embedDescription": { - "en": "Watch this video!", - "ru": "Смотреть это видео!" - } - } - } -} \ No newline at end of file diff --git a/delegatam.md b/delegatam.md deleted file mode 100644 index 59375299..00000000 --- a/delegatam.md +++ /dev/null @@ -1,6 +0,0 @@ -##Делегатам - -- [Делегатство](2-rewards/delegatstvo.md) -- [Установка ноды делегата](golosd/howto/witness-node.md) -- [Запуск ноды golos в контейнере docker](golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md) -- [Скрипты для делегатов](7-witness/witness-scripts.md) \ No newline at end of file diff --git a/developers/api/README.md b/developers/api/README.md new file mode 100644 index 00000000..2564ec95 --- /dev/null +++ b/developers/api/README.md @@ -0,0 +1,9 @@ +# API-документация + +* [Плагины и их API](../basics/plugins-api.md) +* [API часть 1](api-golos-ch1.md) +* [API часть 2](api-golos-ch2.md) +* [API часть 3](api-golos-ch3.md) +* [API часть 4](api-golos-ch4.md) +* [Cli-wallet API](cli-wallet.md) + diff --git a/golosd/api/api-golos-ch1.md b/developers/api/api-golos-ch1.md similarity index 98% rename from golosd/api/api-golos-ch1.md rename to developers/api/api-golos-ch1.md index 0789995f..332ea8dc 100644 --- a/golosd/api/api-golos-ch1.md +++ b/developers/api/api-golos-ch1.md @@ -1,9 +1,7 @@ -# Описание API Golos. Часть 1 +# API part 1 Автор: [@asuleymanov](https://golos.io/@asuleymanov) - - Представляю Вам первую часть моей публикации. В данную часть не вошли 18 из 72 \(раздела Database\_API\) найденных мною команд. Их я опишу позже. _**get\_trending\_tags**_ @@ -348,8 +346,6 @@ _**get\_miner\_queue**_ Простой способ использовать команду - с помощью`curl`, используя следующий формат: `curl --data '{"jsonrpc": "2.0", <Параметры>}' https://ws.golos.io` ---- - Историческая справка * [Статья № 1](https://golos.io/ru--otkrytyij-kod/@asuleymanov/opisanie-api-golos-chast-1) @@ -361,11 +357,3 @@ _**get\_miner\_queue**_ * [Статья №4](https://golos.io/ru--otkrytyij-kod/@asuleymanov/opisani-golosapi-chast-4) * Команды из раздела Network\_Brodcast\_API и Login\_API ---- - -**P.S. Большая часть статьи это переосмысленный **[**перевод**](https://steemit.com/steem/@xeroc/steem-transaction-signing-in-a-nutshell) - -> Автор: [@asuleymanov](https://golos.io/@asuleymanov) - - - diff --git a/golosd/api/api-golos-ch2.md b/developers/api/api-golos-ch2.md similarity index 96% rename from golosd/api/api-golos-ch2.md rename to developers/api/api-golos-ch2.md index 8bb9eb65..68d7c5db 100644 --- a/golosd/api/api-golos-ch2.md +++ b/developers/api/api-golos-ch2.md @@ -1,4 +1,4 @@ -# Описание Golos API. Часть 2 +# API part 2 Автор: [@asuleymanov](https://golos.io/@asuleymanov) @@ -12,7 +12,7 @@ 3. **Неразобранные** * сюда вошли команды описание которых не вошло в прошлый выпуск. -#### Невыясненные +## Невыясненные _**set\_subscribe\_callback**_ Параметры:`"method":"set_subscribe_callback", "params":[["cb","clearfilter"]], "id":0` @@ -30,7 +30,7 @@ _**cancel\_all\_subscriptions**_ Параметры:`"method":"cancel_all_subscriptions", "params":["cb"], "id":3` Описание: Не выяснено. -#### Команды из прошлого выпуска +## Команды из прошлого выпуска _**get\_ops\_in\_block**_ @@ -61,11 +61,11 @@ _**verify\_authority**_ **P.S. Описание транзакции, т.е. её составление я попробую разобрать в следующей статье.** -#### Не разобранные +## Не разобранные Отступление. Все нижеописанные команды в виде параметр принимают структуру/объект такого вида\(условно назову его _**dsc**_\): -``` +```text uint32 limit = 0 - количество возвращаемых записей не может быть больше 100. По умолчанию 0 map[string] select_authors - массив содержит имена авторов map[string] select_tags - Список тегов, сообщения без этих тегов фильтруются @@ -140,8 +140,3 @@ _**get\_discussions\_by\_promoted**_ * [Статья № 3](https://www.gitbook.com/book/cyberfund/golos/edit#) * Разбор команд из разделов Market\_History\_API и Follow\_API ---- - -**P.S. Большая часть статьи это переосмысленный **[**перевод**](https://www.gitbook.com/book/cyberfund/golos/edit#) - -> Автор: [@asuleymanov](https://golos.io/@asuleymanov) \ No newline at end of file diff --git a/golosd/api/api-golos-ch3.md b/developers/api/api-golos-ch3.md similarity index 95% rename from golosd/api/api-golos-ch3.md rename to developers/api/api-golos-ch3.md index afadbe4d..5526a669 100644 --- a/golosd/api/api-golos-ch3.md +++ b/developers/api/api-golos-ch3.md @@ -1,10 +1,9 @@ -# Описание GolosAPI. Часть 3 +# API part 3 Автор: [@asuleymanov](https://golos.io/@asuleymanov) - Приветствую постоянных читателей и вновь присоединившихся. -В предыдущей [статье](https://golos.io/ru--otkrytyij-kod/@asuleymanov/opisani-golosapi-chast-2)я завершил описание API команд из раздела Database\_API. Осталось еще 3 раздела. В данной статье я постараюсь описать 2 из 3 раздела, а именно Market\_History\_API и Follow\_API. +В предыдущей [статье](https://golos.io/ru--otkrytyij-kod/@asuleymanov/opisani-golosapi-chast-2) я завершил описание API команд из раздела Database\_API. Осталось еще 3 раздела. В данной статье я постараюсь описать 2 из 3 раздела, а именно Market\_History\_API и Follow\_API. Последний раздел NetworkBrodcast\_API я оставлю на финал \(как самое вкусное и желанное\), пусть будет в виде вишенки на торте. Оба раздела включенных в данную публикацию не содержат большого количества команд. Но от этого они не менее важны. @@ -105,8 +104,3 @@ _**get\_blog\_authors**_ Параметры:`"method":"get_blog_authors", "params":["username"], "id":9` Описание: Возвращает список авторов и количество репостов этого автора пользователем. ---- - - - - diff --git a/golosd/api/api-golos-ch4.md b/developers/api/api-golos-ch4.md similarity index 96% rename from golosd/api/api-golos-ch4.md rename to developers/api/api-golos-ch4.md index 5ac677e8..31acd76d 100644 --- a/golosd/api/api-golos-ch4.md +++ b/developers/api/api-golos-ch4.md @@ -1,4 +1,4 @@ -# Описание Golos API. Часть 4 +# API part 4 Автор: [@asuleymanov](https://golos.io/@asuleymanov) @@ -46,13 +46,12 @@ _**get\_version**_ Первым шагом мы создаем операцию. Если посмотреть на саму операцию то она имеет вид -``` +```text ['vote', {'author': 'author', 'permlink': 'permlink', 'voter': 'voter', 'weight': weight}] - ``` Тут можно четко определить: @@ -66,7 +65,7 @@ _**get\_version**_ Следующим шагом мы создаем непосредственно транзакцию с необходимой нам операцией. Транзакция может содержать от одной до нескольких операций. В нашем случае это 1 операция голосования и сгенерированная транзакция выглядит так: -``` +```text trx = {'ref_block_num': 36029, 'ref_block_prefix': 1164960351, 'expiration': '2017-06-13T12:24:17', @@ -78,36 +77,48 @@ trx = {'ref_block_num': 36029, 'extensions': [], 'signatures': [], } - ``` Можно заметить что наша операция является частью массива`operations`. Давайте разберем те поля в транзакции которые у нас появились, но нам неизвестны. * Параметр + `ref_block_num` + указывает на номер предыдущего блока. + * Параметр + `ref_block_prefix` + получаем из идентификатора блока, а именно последние 4 байта. + * Параметр + `expiration` + проставляет время истечения действия транзакции. Если до этого времени не произошло включение транзакции в блок, то она считается недействительной. + * Параметр + `extensions` + расширение. + * Параметр + `signatures` + собственно подпись. Данный параметр проставляется в момент подписания. Примет получения параметров`ref_block_num`и`ref_block_prefix`на python: -``` +```text DGP = get_dynamic_global_properties() ref_block_num = DGP["head_block_number"] &0xFFFF ref_block_prefix = struct.unpack_from(" Операция`vote` > -> ``` +> ```text > (voter) > (author) > (permlink) > (weight) -> > ``` > > Операция`comment`\(эта одна операция но может выполнять два действия. Непосредственно комментировать и создавать новую публикацию\) > -> ``` +> ```text > (parent_author) // если этот параметр пустой то это считается созданием новой публикации > (parent_permlink) > (author) @@ -223,19 +242,17 @@ buf += struct.pack(" (title) > (body) > (json_metadata) -> > ``` В нашем случае это выглядит в таком виде : -``` +```text if op[0] == "vote": opdata = op[1] buf += (varint(len(opdata["voter"])) + bytes(opdata["voter"], "utf-8")) buf += (varint(len(opdata["author"])) + bytes(opdata["author"], "utf-8")) buf += (varint(len(opdata["permlink"])) + bytes(opdata["permlink"], "utf-8")) buf += struct.pack(" - -**** -### about() ```cpp -variant_object about()const +variant_object about()const ``` -Возвращает информацию о времени компиляции и о клиенте, в том числе версию клиента, версию git graphene/fc, версии boost, openssl и зависимостей. -### add_operation_copy_to_builder_transaction() +Возвращает информацию о времени компиляции и о клиенте, в том числе версию клиента, версию git graphene/fc, версии boost, openssl и зависимостей. + +## add\_operation\_copy\_to\_builder\_transaction\(\) + ```cpp void add_operation_copy_to_builder_transaction( transaction_handle_type src_handle, @@ -23,22 +23,24 @@ void add_operation_copy_to_builder_transaction( Параметры: `src_handle` — уникальный номер конструктора, из которого копируется операция; `dst_handle` — уникальный номер конструктора, на который копируется операция; -`op_index` — номер копируемой операции. +`op_index` — номер копируемой операции. Используется для копирования операции между конструкторами транзакций. -### add_operation_to_builder_transaction() +## add\_operation\_to\_builder\_transaction\(\) + ```cpp -void add_operation_to_builder_transaction(transaction_handle_type handle, const operation& op) +void add_operation_to_builder_transaction(transaction_handle_type handle, const operation& op) ``` Параметры: `handle` — уникальный номер конструктора; -`op` — добавляемая операция. +`op` — добавляемая операция. + +Используется для добавления операции в список операций конструктора транзакций. -Используется для добавления операции в список операций конструктора транзакций. +## approve\_proposal\(\) -### approve_proposal() ```cpp signed_transaction approve_proposal( const std::string& author, const std::string& title, @@ -46,108 +48,123 @@ signed_transaction approve_proposal( bool broadcast ) ``` + Параметры: `author` — автор предложенной транзакции; `title` — заголовок предложенной на подпись транзакции; -`delta` — список подписей, необходимых для одобрения (или удаления) транзакции. -`broadcast` — “true”, если транзакция пересылается на демон; “false”, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. +`delta` — список подписей, необходимых для одобрения \(или удаления\) транзакции. +`broadcast` — “true”, если транзакция пересылается на демон; “false”, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. -Возвращает подписанную версию транзакции. +Возвращает подписанную версию транзакции. + +## begin\_builder\_transaction\(\) -### begin_builder_transaction() ```cpp -transaction_handle_type wallet_api::begin_builder_transaction() +transaction_handle_type wallet_api::begin_builder_transaction() ``` -Метод вызывает операцию создания конструктора транзакций и возвращает уникальный номер созданного конструктора. Начальное значение уникального номера принимается равным «0» и увеличивается на единицу с каждым вызовом метода. +Метод вызывает операцию создания конструктора транзакций и возвращает уникальный номер созданного конструктора. Начальное значение уникального номера принимается равным «0» и увеличивается на единицу с каждым вызовом метода. + +## cancel\_order\(\) -### cancel_order() ```cpp annotated_signed_transaction wallet_api::cancel_order( string owner, uint32_t orderid, bool broadcast -) +) ``` + Параметры: `owner` — имя аккаунта, созданного заявку на отмену транзакции; `orderid` — идентификационный номер заявки на отмену транзакции; -`broadcast` — "true", если транзакция пересылается на демон. +`broadcast` — "true", если транзакция пересылается на демон. Возвращает транзакцию, выполнение которой отменяется. -### cancel_transfer_from_savings() +## cancel\_transfer\_from\_savings\(\) + ```cpp annotated_signed_transaction wallet_api::cancel_transfer_from_savings( string from, uint32_t request_id, bool broadcast -) +) ``` + Параметры: `from` — имя аккаунта, инициировавшего отмену; `reques_id` — идентификационный номер заявки, используемый в вызове `transfer_from_savings()` для отмены или перевызова операции; -`broadcast` — "true", если транзакция пересылается на демон. +`broadcast` — "true", если транзакция пересылается на демон. Возвращает подписанную транзакцию, выполнение которой отменяется. -### change_recovery_account() +## change\_recovery\_account\(\) + ```cpp annotated_signed_transaction wallet_api::change_recovery_account( string owner, string new_recovery_account, bool broadcast -) +) ``` + Параметры: `owner` — имя аккаунта; `new_recovery_account` — новое имя, которое будет присвоено восстановленному аккаунту; -`broadcast`— "true", если транзакция пересылается на демон. +`broadcast`— "true", если транзакция пересылается на демон. Возвращает подписанную транзакцию на изменение данных аккаунта. -### convert_sbd() +## convert\_sbd\(\) + ```cpp -annotated_signed_transaction wallet_api::convert_sbd(string from, asset amount, bool broadcast) +annotated_signed_transaction wallet_api::convert_sbd(string from, asset amount, bool broadcast) ``` + Параметры: `from` — имя аккаунта, запрашивающего конвертацию своей криптовалюты вида SBD; `amount` — сумма средств в виде SBD для конвертации; -`broadcast` — "true", если транзакция пересылается на демон. +`broadcast` — "true", если транзакция пересылается на демон. Используется для конвертации SBD в STEEM в соответствии с их отношением, приведенным в `current_median_history`, за неделю с момента выполнения операции. -### check_memo() +## check\_memo\(\) + ```cpp void wallet_api::check_memo( const string& memo, const golos::api::account_api_object& account -)const +)const ``` + Параметры: -`memo` — поле, записи которого проверяются; -`account` — имя аккаунта. +`memo` — поле, записи которого проверяются; +`account` — имя аккаунта. -Проверяет записи из поля `memo`, относящиеся к личным ключам аккаунта и импортированные в кошелек. +Проверяет записи из поля `memo`, относящиеся к личным ключам аккаунта и импортированные в кошелек. + +## create\_account\(\) -### create_account() ```cpp annotated_signed_transaction wallet_api::create_account( string creator, string new_account_name, string json_meta, bool broadcast -) +) ``` + Параметры: `creator` — пользователь, который создает новый аккаунт; `new_account_name` — имя нового аккаунта; `json_meta` — метаданные профиля нового аккаунта поля `json_metadata`; -`broadcast` — "true", если транзакция пересылается на демон; "false", если выполняется базовый контроль с выдачей подписанной транзакции на консоль. +`broadcast` — "true", если транзакция пересылается на демон; "false", если выполняется базовый контроль с выдачей подписанной транзакции на консоль. + +Используется для создания нового аккаунта и генерацией ключей `owner`, `active`, и `memo` для этого аккаунта. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька создателя аккаунта \(автора\) снимается определенная сумма `fee`. Величина этих отчислений не может быть меньше значения параметра `account_creation_fee`, устанавливаемого по результатам голосования делегатов. -Используется для создания нового аккаунта и генерацией ключей `owner`, `active`, и `memo` для этого аккаунта. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька создателя аккаунта (автора) снимается определенная сумма `fee`. Величина этих отчислений не может быть меньше значения параметра `account_creation_fee`, устанавливаемого по результатам голосования делегатов. +## create\_account\_delegated\(\) -### create_account_delegated() ```cpp annotated_signed_transaction wallet_api::create_account_delegated( string creator, asset steem_fee, @@ -155,19 +172,21 @@ annotated_signed_transaction wallet_api::create_account_delegated( string new_account_name, string json_meta, bool broadcast -) +) ``` + Параметры: `creator` — пользователь, который создает новый аккаунт; `steem_fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть возвращена обратно в кошелек создателя аккаунта; `delegated_vests` — сумма комиссионных отчислений в криптовалюте Сила Голоса, снимаемая с баланса кошелька пользователя за операцию делегирования и зачисляемая на баланс кошелька нового аккаунта в криптовалюте Сила Голоса. Эта сумма может быть возвращена обратно в кошелек создателя аккаунта по истечении определенного периода, устанавливаемого голосованием делегатов; `new_account_name` — имя нового аккаунта; `json_meta` — метаданные профиля нового аккаунта поля `json_metadata`; -`bool broadcast` — "true", если транзакция пересылается на демон; "false", если выполняется базовый контроль с выдачей подписанной транзакции на консоль. +`bool broadcast` — "true", если транзакция пересылается на демон; "false", если выполняется базовый контроль с выдачей подписанной транзакции на консоль. Используется для создания аккаунта с делегированием. Автоматически генерирует публичные ключи `owner`, `active`, `posting` и `memo` для нового аккаунта. -### create_account_with_keys() +## create\_account\_with\_keys\(\) + ```cpp annotated_signed_transaction wallet_api::create_account_with_keys( string creator, string newname, @@ -177,8 +196,9 @@ annotated_signed_transaction wallet_api::create_account_with_keys( public_key_type posting, public_key_type memo, bool broadcast -)const +)const ``` + Параметры: `creator` — пользователь, который создает новый аккаунт; `newname` — имя нового аккаунта; @@ -188,11 +208,12 @@ annotated_signed_transaction wallet_api::create_account_with_keys( `active` — значение публичного ключа `active` нового аккаунта; `posting` — значение публичного ключа `posting` нового аккаунта; `memo` — значение публичного ключа `memo` нового аккаунта; -`broadcast` — "true", если транзакция пересылается на демон. +`broadcast` — "true", если транзакция пересылается на демон. Используется для создания аккаунта, требуется явное задание ключей. -### create_account_with_keys_delegated() +## create\_account\_with\_keys\_delegated\(\) + ```cpp annotated_signed_transaction wallet_api::create_account_with_keys_delegated( string creator, asset steem_fee, @@ -203,8 +224,9 @@ annotated_signed_transaction wallet_api::create_account_with_keys_delegated( public_key_type posting, public_key_type memo, bool broadcast -)const +)const ``` + Параметры: `creator` — пользователь, который создает новый аккаунт; `steem_fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть возвращена обратно в кошелек создателя аккаунта; @@ -215,11 +237,12 @@ annotated_signed_transaction wallet_api::create_account_with_keys_delegated( `active` — значение публичного ключа `active` нового аккаунта; `posting` — значение публичного ключа `posting` нового аккаунта; `memo` — значение публичного ключа `memo` нового аккаунта; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для создания нового аккаунта через вызов операции `account_create`. Требуется явное задание ключей `owner`, `active`, `posting` и `memo` для нового аккаунта. -### create_order() +## create\_order\(\) + ```cpp annotated_signed_transaction wallet_api::create_order( string owner, @@ -229,8 +252,9 @@ annotated_signed_transaction wallet_api::create_order( bool fill_or_kill, uint32_t expiration, bool broadcast -) +) ``` + Параметры: `owner` — имя аккаунта, создаваемого заказ; `order_id` — идентификационный номер заказа, присваиваемый аккаунтом, создающий этот заказ; @@ -238,66 +262,76 @@ annotated_signed_transaction wallet_api::create_order( `min_to_receive` — минимальная сумма средств, предполагаемая к получению; `fill_or_kill` — “true”, если заказ следует отменить в случае его немедленного невыполнения; `expiration` — время отведенное на выполнение заказа, по истечении которого он будет отменен; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для создания заказа на продажу с кошелька ограниченной суммы средств в виде SBD или STEAM по цене в соответствии с отношением `amount_to_sell / min_to_receive`. Возвращает подписанную транзакцию. -### database_info() +## database\_info\(\) + ```cpp -variant_object database_info()const +variant_object database_info()const ``` -Возвращает справочную информацию о текущем статусе разделяемой памяти, в том числе: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти (название индекса, количество записей). -### decline_voting_rights() +Возвращает справочную информацию о текущем статусе разделяемой памяти, в том числе: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти \(название индекса, количество записей\). + +## decline\_voting\_rights\(\) + ```cpp annotated_signed_transaction wallet_api::decline_voting_rights( string account, bool decline, bool broadcast -) +) ``` + Параметры: `account` — имя аккаунта, который лишается права голоса; -`decline` — “true”, если аккаунт лишается права голоса; -`broadcast` — “true”, если транзакция пересылается на демон. +`decline` — “true”, если аккаунт лишается права голоса; `broadcast` — “true”, если транзакция пересылается на демон. Используется для лишения права голоса аккаунта с указанным именем. -Возвращает подписанную транзакцию. +Возвращает подписанную транзакцию. + +## decrypt\_memo\(\) -### decrypt_memo() ```cpp -string wallet_api::decrypt_memo( string encrypted_memo ) +string wallet_api::decrypt_memo( string encrypted_memo ) ``` + Параметр: -`encrypted_memo` — запись, приведенная для прочтения. +`encrypted_memo` — запись, приведенная для прочтения. + +Возвращает текст в расшифрованном виде \(если это возможно\), находящийся в кошельке и зашифрованный с помощью одного из известных личных ключей. -Возвращает текст в расшифрованном виде (если это возможно), находящийся в кошельке и зашифрованный с помощью одного из известных личных ключей. +## delegate\_vesting\_shares\(\) -### delegate_vesting_shares() ```cpp annotated_signed_transaction wallet_api::delegate_vesting_shares( string delegator, string delegatee, asset vesting_shares, bool broadcast -) +) ``` + Параметры: `delegator` — имя аккаунта, который делегирует Силу Голоса; `delegatee` — имя аккаунта, на который делегируется Сила Голоса; `vesting_shares` — сумма делегирования; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для делегирования части криптовалюты Силы Голоса (значение в GESTS) с одного аккаунта на другой. +Используется для делегирования части криптовалюты Силы Голоса \(значение в GESTS\) с одного аккаунта на другой. + +## encrypt\_keys\(\) -### encrypt_keys() ```cpp -void encrypt_keys() +void encrypt_keys() ``` -Используется для шифрования текста (примечания) с помощью одного из личных ключей. -### escrow_approve() +Используется для шифрования текста \(примечания\) с помощью одного из личных ключей. + +## escrow\_approve\(\) + ```cpp annotated_signed_transaction wallet_api::escrow_approve( string from, @@ -307,22 +341,23 @@ annotated_signed_transaction wallet_api::escrow_approve( uint32_t escrow_id, bool approve, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, передающего средства на условное депонирование; `to` — имя аккаунта, принимающего средства на условное депонирование; `agent` — имя аккаунта, выступающего в качестве агента в случае возникновения спорных ситуаций; -`who` — имя аккаунта, утверждающего сделку (`to` или `agent`); +`who` — имя аккаунта, утверждающего сделку \(`to` или `agent`\); `escrow_id` — идентификационный номер операции; `approve` — “true”, если сделка утверждается. Иначе транзакция отменяется с возвратом средств аккаунту с именем `from`; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для утверждения предложенной транзакции с операцией передачи средств на условное депонирование. Средства могут быть разблокированы только после утверждения транзакции. Возвращает подписанную транзакцию. -### escrow_dispute() +## escrow\_dispute\(\) + ```cpp annotated_signed_transaction wallet_api::escrow_dispute( string from, @@ -331,21 +366,22 @@ annotated_signed_transaction wallet_api::escrow_dispute( string who, uint32_t escrow_id, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, передавшего средства на условное депонирование; `to` — имя аккаунта, принявшего средства на условное депонирование; `agent` — имя аккаунта, выступающего в качестве агента в случае возникновения спорных ситуаций; -`who` — имя аккаунта, открывшего спор (`from` или `to`); +`who` — имя аккаунта, открывшего спор \(`from` или `to`\); `escrow_id` — идентификационный номер операции; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для открытия спора по передачи средств на условное депонирование. Спор может быть открыт до истечения срока, отведенного на условное депонирование. Возвращает подписанную транзакцию. -### escrow_release() +## escrow\_release\(\) + ```cpp annotated_signed_transaction wallet_api::escrow_release( string from, @@ -357,7 +393,7 @@ annotated_signed_transaction wallet_api::escrow_release( asset sbd_amount, asset steem_amount, bool broadcast -) +) ``` Параметры: @@ -369,12 +405,13 @@ annotated_signed_transaction wallet_api::escrow_release( `escrow_id` — идентификационный номер операции; `sbd_amount` — сумма отпущенных средств в виде SBD; `steem_amount` — сумма отпущенных средств в виде STEEM; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для разблокирования (освобождение) средств, передаваемых на условное депонирование. +Используется для разблокирования \(освобождение\) средств, передаваемых на условное депонирование. Возвращает подписанную транзакцию. -### escrow_transfer() +## escrow\_transfer\(\) + ```cpp annotated_signed_transaction wallet_api::escrow_transfer( string from, @@ -388,373 +425,404 @@ annotated_signed_transaction wallet_api::escrow_transfer( time_point_sec escrow_expiration, string json_meta, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, от которого передаются средства на условное депонирование; `to` — имя аккаунта, к которому передаются средства на условное депонирование; `agent` — имя аккаунта, выступающего в качестве агента в случае возникновения спорных ситуаций; -`escrow_id` — идентификационный номер операции (значения `from` и `escrow_id` должны составлять уникальную пару); +`escrow_id` — идентификационный номер операции \(значения `from` и `escrow_id` должны составлять уникальную пару\); `sbd_amount` — сумма средств в виде SBD, передаваемых на условное депонирование; `steem_amount` — сумма средств в виде STEEM, передаваемых на условное депонирование; `fee` — комиссионные отчисления для агента; -`ratification_deadline` — время, до наступления которого транзакция должна быть одобрена аккаунтами с именами `to` и ` agent`; +`ratification_deadline` — время, до наступления которого транзакция должна быть одобрена аккаунтами с именами `to` и `agent`; `escrow_expiration` — время, по истечении которого любая из сторон может потребовать возврат средств; `json_meta` — метаданные в кодировке JSON; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для передачи средств в виде STEEM или SBD на условное депонирование от одного аккаунта другому. Возвращает подписанную транзакцию. -### find_first_unused_derived_key_index() +## find\_first\_unused\_derived\_key\_index\(\) + ```cpp -int find_first_unused_derived_key_index(const fc::ecc::private_key& parent_key) +int find_first_unused_derived_key_index(const fc::ecc::private_key& parent_key) ``` + Параметр: -`parent_key` — родительский ключ. +`parent_key` — родительский ключ. + +Используется для генерации ключей, производных от родительского. Генерация ключей начинается с индекса «0» с последующим приращением его на единицу. Если очередные индексы будут отсутствовать \(обнаружение незарегистрированных ключей\) в блокчейне, процесс прекращается. Алгоритм поиска зарегистрированного ключа в блокчейне по очередному индексу предусматривает возможное отсутствие нескольких номеров \(наличие «дыр»\) в последовательности. Размер «дыры» не должен превышать более пяти подряд идущих номеров. -Используется для генерации ключей, производных от родительского. Генерация ключей начинается с индекса «0» с последующим приращением его на единицу. Если очередные индексы будут отсутствовать (обнаружение незарегистрированных ключей) в блокчейне, процесс прекращается. Алгоритм поиска зарегистрированного ключа в блокчейне по очередному индексу предусматривает возможное отсутствие нескольких номеров (наличие «дыр») в последовательности. Размер «дыры» не должен превышать более пяти подряд идущих номеров. +## follow\(\) -### follow() ```cpp annotated_signed_transaction wallet_api::follow( string& follower, string& following, const set& what, bool broadcast -) +) ``` Параметры: `follower` — имя аккаунта, являющегося последователем другого; `following` — имя аккаунта, от которого наследуется набор вещей; -`what` — набор вещей, который наследуется (посты, комментарии, голоса, игнорирования); -` broadcast` — “true”, если транзакция пересылается на демон. +`what` — набор вещей, который наследуется \(посты, комментарии, голоса, игнорирования\); +`broadcast` — “true”, если транзакция пересылается на демон. - -Помечает одного аккаунта как последователь (наследник) другого. Требует для последователя авторизацию ключом `posting`. +Помечает одного аккаунта как последователь \(наследник\) другого. Требует для последователя авторизацию ключом `posting`. Возвращает подписанную транзакцию. -### get_account() +## get\_account\(\) + ```cpp -golos::api::account_api_object get_account(string account_name)const +golos::api::account_api_object get_account(string account_name)const ``` Параметр: -account_name — имя аккаунта, информация о котором предоставляется. +account\_name — имя аккаунта, информация о котором предоставляется. + +Возвращает информацию об аккаунте с заданным именем, имеющемся в базе данных блокчейна. -Возвращает информацию об аккаунте с заданным именем, имеющемся в базе данных блокчейна. +## get\_account\_history\(\) -### get_account_history() ```cpp map< uint32_t, golos::plugins::operation_history::applied_operation > wallet_api::get_account_history( string account, uint32_t from, uint32_t limit -) +) ``` Параметры: `account` — аккаунт, история которого запрашивается; `from` — порядковый номер операции. «-1» — означает последний номер операции; -`limit` — максимальное количество запрашиваемых элементов. Принимает значение 0-1000. +`limit` — максимальное количество запрашиваемых элементов. Принимает значение 0-1000. + +Возвращает историю всех действий в виде транзакций пользователя в сети GOLOS. -Возвращает историю всех действий в виде транзакций пользователя в сети GOLOS. +## get\_active\_witnesses\(\) -### get_active_witnesses() ```cpp -vector< account_name_type > wallet_api::get_active_witnesses()const +vector< account_name_type > wallet_api::get_active_witnesses()const ``` -Возвращает список всех активных делегатов, создавших блоки в текущем окружении (21 блок). +Возвращает список всех активных делегатов, создавших блоки в текущем окружении \(21 блок\). + +## get\_block \(\) -### get_block () ```cpp -optional wallet_api::get_block (uint32_t num) +optional wallet_api::get_block (uint32_t num) ``` Параметр: -`num` — номер блока. +`num` — номер блока. -Возвращает расширенную информацию по блоку с номером `num`. +Возвращает расширенную информацию по блоку с номером `num`. + +## get\_conversion\_requests\(\) -### get_conversion_requests() ```cpp vector< database_api::convert_request_api_object > wallet_api::get_conversion_requests( string owner_account -) +) ``` Параметр: -`owner_account` — имя аккаунта, создавшего запросы. +`owner_account` — имя аккаунта, создавшего запросы. Возвращает текущие запросы на конвертацию указанным пользователем, в том числе все ожидающие запросы -### get_encrypted_memo() +## get\_encrypted\_memo\(\) + ```cpp -string wallet_api::get_encrypted_memo( string from, string to, string memo ) +string wallet_api::get_encrypted_memo( string from, string to, string memo ) ``` Параметры: `from` — имя аккаунта, с кошелька которого снимаются средства; `to` — имя аккаунта, в кошелек которого поступают средства; -`memo` — текст заметки (примечания). +`memo` — текст заметки \(примечания\). + +Возвращает заметку в зашифрованном виде, если ее текст начинается с символа «\#». В противном случае возвращает заметку в ее оригинальном виде. -Возвращает заметку в зашифрованном виде, если ее текст начинается с символа «#». В противном случае возвращает заметку в ее оригинальном виде. +## get\_feed\_history\(\) -### get_feed_history() ```cpp -witness_api::feed_history_api_object wallet_api::get_feed_history()const +witness_api::feed_history_api_object wallet_api::get_feed_history()const ``` -Возвращает историю конверсий GBG / GOLOS на блокчейне. +Возвращает историю конверсий GBG / GOLOS на блокчейне. +## get\_inbox\(\) -### get_inbox() ```cpp vector wallet_api::get_inbox( const std::string& to, time_point newest, uint16_t limit, std::uint64_t offset -) +) ``` Параметры: `to` — имя аккаунта, для которого запрашиваются входящие к нему сообщения; `newest` — время, с момента которого запрашиваются сообщения; `limit` — пороговое значение на количество запрашиваемых сообщений; -`offset` — смещение (в секундах) к заданному времени `newest`. +`offset` — смещение \(в секундах\) к заданному времени `newest`. Используется для просмотра входящих личных сообщений для аккаунта с именем `to`, хранящихся в блокчейне. -### get_miner_queue() +## get\_miner\_queue\(\) + ```cpp -vector wallet_api::get_miner_queue()const +vector wallet_api::get_miner_queue()const ``` Возвращает список майнеров, ожидающих создание блоков. -### get_open_orders() +## get\_open\_orders\(\) + ```cpp -vector< database_api::extended_limit_order > wallet_api::get_open_orders( string owner ) +vector< database_api::extended_limit_order > wallet_api::get_open_orders( string owner ) ``` Параметр: -`owner` — пользователь, для которого отображается список заявок. +`owner` — пользователь, для которого отображается список заявок. + +Возвращает список заявок на внутренней бирже на покупку и продажу в сети GOLOS для указанного пользователя. -Возвращает список заявок на внутренней бирже на покупку и продажу в сети GOLOS для указанного пользователя. +## get\_ops\_in\_block\(\) -### get_ops_in_block() ```cpp vector< golos::plugins::operation_history::applied_operation > wallet_api::get_ops_in_block( uint32_t block_num, bool only_virtual -) +) ``` Параметры: -`num` — номер (позиция) блока; -`only_virtual` — только виртуальные операции. +`num` — номер \(позиция\) блока; +`only_virtual` — только виртуальные операции. Возвращает виртуальные операции в заданном блоке. -### get_order_book() +## get\_order\_book\(\) + ```cpp -market_history::order_book wallet_api::get_order_book(uint32_t limit) +market_history::order_book wallet_api::get_order_book(uint32_t limit) ``` Параметр: -`limit` — максимальное количество заказов для возврата заявок и запросов (максимальное значение — 1000). +`limit` — максимальное количество заказов для возврата заявок и запросов \(максимальное значение — 1000\). + +Возвращает список заявок на внутренней бирже на покупку и продажу в сети GOLOS. -Возвращает список заявок на внутренней бирже на покупку и продажу в сети GOLOS. +## get\_outbox\(\) -### get_outbox() ```cpp vector wallet_api::get_outbox( const std::string& from, time_point newest, uint16_t limit, std::uint64_t offset -) +) ``` Параметры: `from` — имя аккаунта, для которого запрашиваются исходящие от него сообщения; `newest` — время, с момента которого запрашиваются сообщения; `limit` — пороговое значение на количество запрашиваемых сообщений; -`offset` — смещение (в секундах) к заданному времени `newest`. +`offset` — смещение \(в секундах\) к заданному времени `newest`. Используется для просмотра исходящих личных сообщений для аккаунта с именем `from`, хранящихся в блокчейне. -### get_owner_history() +## get\_owner\_history\(\) + ```cpp vector< database_api::owner_authority_history_api_object > wallet_api::get_owner_history( string account -)const +)const ``` Параметры: -`account` — пользователь, история которого отображается. +`account` — пользователь, история которого отображается. -Возвращает историю полномочий (прав собственности) пользователя в блокчейне. +Возвращает историю полномочий \(прав собственности\) пользователя в блокчейне. + +## get\_private\_key\(\) -### get_private_key() ```cpp -fc::ecc::private_key get_private_key(const public_key_type pubkey)const +fc::ecc::private_key get_private_key(const public_key_type pubkey)const ``` Параметр: -`pubkey` — тип публичного ключа. +`pubkey` — тип публичного ключа. Используется для получения личного ключа в формате WIF, соответствующего публичному ключу. Личный ключ к этому моменту должен быть в кошельке. -Возвращает подтверждение о наличие ключа или его отсутствие. +Возвращает подтверждение о наличие ключа или его отсутствие. + +## get\_private\_key\_for\_account\(\) -### get_private_key_for_account() ```cpp fc::ecc::private_key get_private_key_for_account( const golos::api::account_api_object& account -)const +)const ``` Параметр: -`account` — имя аккаунта, получающего ключ. +`account` — имя аккаунта, получающего ключ. Возвращает данные ключа `active` в формате WIF. -### get_private_key_from_password() +## get\_private\_key\_from\_password\(\) + ```cpp pair wallet_api::get_private_key_from_password( string account, string role, string password -)const +)const ``` Параметры: `account` — имя аккаунта, который получает ключ; -`role` — тип ключа (`active` | `owner` | `posting` | `memo`); -`password` — пароль, который будет использоваться во время генерации ключа. +`role` — тип ключа \(`active` \| `owner` \| `posting` \| `memo`\); +`password` — пароль, который будет использоваться во время генерации ключа. Возвращает публичный ключ, соответствующий сгенерированному личному ключу, а также личный ключ в формате WIF. -### get_proposed_transactions() +## get\_proposed\_transactions\(\) + ```cpp std::vector get_proposed_transactions( std::string account, uint32_t from, uint32_t limit -) +) ``` Параметры: `account` — аккаунт, информацию о предложенных транзакциях которого необходимо получить; `from` — начальный номер транзакции; -`limit` — пороговое значение количества транзакций. +`limit` — пороговое значение количества транзакций. Используется для получения информации о всех предложенных транзакциях применительно к одному и тому же аккаунту. Для получения информации об ограниченном количестве транзакций, необходимо задать начальный номер транзакции `from` и пороговое значение `limit`. -### get_prototype_operation() +## get\_prototype\_operation\(\) + ```cpp -operation get_prototype_operation(string operation_type) +operation get_prototype_operation(string operation_type) ``` Параметр: -`operation_type` — тип операции. Операция должна быть определена в файле `steem/chain/operations.hpp`. +`operation_type` — тип операции. Операция должна быть определена в файле `steem/chain/operations.hpp`. -Используется для получения и заполнения шаблона для операции, создаваемой с помощью вызова `add_operation_to_builder_transaction()`. Возвращает неинициализированный объект в виде заданной последовательности операций. Созданный объект может быть дополнен любой операцией с помощью вызова `add_operation_to_builder_transaction()`. +Используется для получения и заполнения шаблона для операции, создаваемой с помощью вызова `add_operation_to_builder_transaction()`. Возвращает неинициализированный объект в виде заданной последовательности операций. Созданный объект может быть дополнен любой операцией с помощью вызова `add_operation_to_builder_transaction()`. + +## get\_transaction\(\) -### get_transaction() ```cpp -annotated_signed_transaction wallet_api::get_transaction(transaction_id_type id)const +annotated_signed_transaction wallet_api::get_transaction(transaction_id_type id)const ``` Параметр: -id — идентификатор транзакции. +id — идентификатор транзакции. + +Возвращает информацию о транзакции с указанном идентификатором. -Возвращает информацию о транзакции с указанном идентификатором. +## get\_wallet\_filename\(\) -### get_wallet_filename() ```cpp -string get_wallet_filename() +string get_wallet_filename() ``` Возвращает текущее имя файла кошелька. Данное имя файла используется при автоматическом сохранении кошелька. -### get_withdraw_routes() +## get\_withdraw\_routes\(\) + ```cpp vector< database_api::withdraw_vesting_route_api_object > wallet_api::get_withdraw_routes( string account, database_api::withdraw_route_type type -)const +)const ``` Параметры: `account` — пользователь, для которого запрашивается возврат; -`type` — тип возврата (задается строкой вида `incoming`, `outgoing` или `all`). +`type` — тип возврата \(задается строкой вида `incoming`, `outgoing` или `all`\). -Возвращает перечень переводов, осуществляющих на счет пользователя в зависимости от задаваемого типа возврата (входящий, исходящий или все). +Возвращает перечень переводов, осуществляющих на счет пользователя в зависимости от задаваемого типа возврата \(входящий, исходящий или все\). + +## get\_witness\(\) -### get_witness() ```cpp -optional < witness_api::witness_api_object > get_witness(string owner_account) +optional < witness_api::witness_api_object > get_witness(string owner_account) ``` Параметр: -`owner_account` — имя или идентификатор делегата. +`owner_account` — имя или идентификатор делегата. + +Возвращает информацию о заданном делегате, хранимую в блокчейне. -Возвращает информацию о заданном делегате, хранимую в блокчейне. +## gethelp\(\) -### gethelp() ```cpp -string wallet_api::gethelp(const string & method)const +string wallet_api::gethelp(const string & method)const ``` Параметр: -`method` — имя API команды, информация о которой запрашивается. +`method` — имя API команды, информация о которой запрашивается. Возвращает справочную информацию по отдельной команде API. -### help() +## help\(\) + ```cpp -string wallet_api::help()const +string wallet_api::help()const ``` Возвращает на терминал справочный перечень всех команд, поддерживаемых приложением wallet API. Информация содержит команды, их аргументы и возвращаемые типы. Для получения более подробной информации по отдельной команде следует использовать `get_help()`. -### get_withdraw_routes() +## get\_withdraw\_routes\(\) + ```cpp vector< database_api::withdraw_vesting_route_api_object > wallet_api::get_withdraw_routes( string account, database_api::withdraw_route_type type -)const +)const ``` Параметры: `account` — имя аккаунта, запрашивающего маршруты; -`type` — тип вывода (входящий, исходящий или все). +`type` — тип вывода \(входящий, исходящий или все\). Возвращает маршруты вывода средств для аккаунта. -### import_key() +## import\_key\(\) + ```cpp -bool import_key(string wif_key) +bool import_key(string wif_key) ``` Параметр: -`wif_key` — личный ключ в формате WIF. +`wif_key` — личный ключ в формате WIF. Используется для импорта личного ключа в формате WIF в кошелек для его дальнейшего использования аккаунтом при подписании транзакций. -Пример использования команды: -``` +Пример использования команды: + +```text import_key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 ``` -### info() + +## info\(\) + ```cpp -variant wallet_api::info()const +variant wallet_api::info()const ``` Возвращает актуальную информацию о блокчейне, в том числе: @@ -762,101 +830,110 @@ variant wallet_api::info()const `hardfork_version` — версию HF Golos; `head_block_num` — актуальный номер блока; `head_block_id` — идентификатор блока; -`head_block_age` — время жизни блока (в секундах); +`head_block_age` — время жизни блока \(в секундах\); `median_sbd_price` — медианное значение SBD; `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; `create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием; `create_account_min_delegation` — минимально возможное количество Силы Голоса при создании аккаунта с делегированием; -`create_account_delegation_time` — минимально возможное время (в секундах) «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием; -`min_delegation` — минимально возможное количество Силы Голоса для делегирования на аккаунт. +`create_account_delegation_time` — минимально возможное время \(в секундах\) «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием; +`min_delegation` — минимально возможное количество Силы Голоса для делегирования на аккаунт. + +## is\_locked\(\) -### is_locked() ```cpp -bool wallet_api::is_locked()const +bool wallet_api::is_locked()const ``` - Проверяет состояние кошелька: заблокирован или нет. Если кошелек находится в заблокированном состоянии, находящиеся в нем личные ключи использованы быть не могут. Состояние ключа изменяется вызовами `lock()` или `unlock()`. Возвращает “true”, если кошелек заблокирован. -### is_new() +## is\_new\(\) + ```cpp -bool wallet_api::is_new()const +bool wallet_api::is_new()const ``` -Проверяет состояние кошелька: новый (пароль еще не установлен) или нет. Установка пароля осуществляется с помощью вызова `set_password()`. Во время выполнении этой команды кошелек переводится в заблокированное состояние. +Проверяет состояние кошелька: новый \(пароль еще не установлен\) или нет. Установка пароля осуществляется с помощью вызова `set_password()`. Во время выполнении этой команды кошелек переводится в заблокированное состояние. Возвращает “true”, если кошелек новый. -### list_accounts() +## list\_accounts\(\) + ```cpp -vector< account_name_type > wallet_api::list_accounts(const string& lowerbound, uint32_t limit) +vector< account_name_type > wallet_api::list_accounts(const string& lowerbound, uint32_t limit) ``` Параметры: `lowerbound` — имя первого возвращаемого аккаунта. Если такое имя отсутствует, список будет начинаться с имени, непосредственно следующего за `lowerbound`; -`limit` — значение, ограничивающее количество выводимых на монитор имен аккаунтов. Максимальное значение — 1000. +`limit` — значение, ограничивающее количество выводимых на монитор имен аккаунтов. Максимальное значение — 1000. -Используется для получения списка всех аккаунтов, зарегистрированных в блокчейне. Задание параметров `lowerbound` и `limit` позволяет формировать страницу в удобной для просмотра форме. Для просмотра всего списка имен аккаунтов рекомендуется вначале значение `lowerbound` устанавливать в виде пустой строки (“”). Затем на каждой итерации параметру `lowerbound` передавать последнее возвращаемое имя аккаунта для следующего вызова `list_accaunt()`. +Используется для получения списка всех аккаунтов, зарегистрированных в блокчейне. Задание параметров `lowerbound` и `limit` позволяет формировать страницу в удобной для просмотра форме. Для просмотра всего списка имен аккаунтов рекомендуется вначале значение `lowerbound` устанавливать в виде пустой строки \(“”\). Затем на каждой итерации параметру `lowerbound` передавать последнее возвращаемое имя аккаунта для следующего вызова `list_accaunt()`. Возвращает список всех зарегистрированных в блокчейне имен аккаунтов с соответствующими им идентификаторами, отсортированный по именам в алфавитном порядке. -### list_keys() +## list\_keys\(\) + ```cpp -map wallet_api::list_keys() +map wallet_api::list_keys() ``` -Используется для выдачи (распечатки) всех личных ключей, принадлежащих кошельку. Данные ключей выдаются в формате WIF. Ключи могут быть импортированы в другой кошелек вызовом `import_key`. -Возвращает карту, содержащую личные ключи, индексированные по их публичному ключу. +Используется для выдачи \(распечатки\) всех личных ключей, принадлежащих кошельку. Данные ключей выдаются в формате WIF. Ключи могут быть импортированы в другой кошелек вызовом `import_key`. +Возвращает карту, содержащую личные ключи, индексированные по их публичному ключу. + +## list\_my\_accounts\(\) -### list_my_accounts() ```cpp -vector< golos::api::account_api_object > wallet_api::list_my_accounts() +vector< golos::api::account_api_object > wallet_api::list_my_accounts() ``` Используется для получения информации об аккаунтах с помощью личного ключа, имеющегося в кошельке. Кошелек должен быть предварительно разблокирован. Метод использует вызов `get_account()`. -### list_witnesses() +## list\_witnesses\(\) + ```cpp -vector< account_name_type > wallet_api::ist_witnesses(const string& lowerbound, uint32_t limit) +vector< account_name_type > wallet_api::ist_witnesses(const string& lowerbound, uint32_t limit) ``` Параметры: `lowerbound` — имя первого возвращаемого делегата. Если такое имя отсутствует, список будет начинаться с имени, непосредственно следующего за `lowerbound`; -`limit` — значение, ограничивающее количество выводимых на монитор имен делегатов. Максимальное значение — 1000. +`limit` — значение, ограничивающее количество выводимых на монитор имен делегатов. Максимальное значение — 1000. -Используется для получения списка всех имен делегатов, зарегистрированных в блокчейне. В списке также выделяются имена делегатов, голосующих на данный момент. Задание параметров `lowerbound` и `limit` позволяет формировать страницу в удобной для просмотра форме. Для просмотра всего списка имен делегатов рекомендуется вначале значение `lowerbound` устанавливать в виде пустой строки (“”). Затем на каждой итерации параметру `lowerbound` передавать последнее возвращаемое имя делегата для следующего вызова `list_witnesses()`. +Используется для получения списка всех имен делегатов, зарегистрированных в блокчейне. В списке также выделяются имена делегатов, голосующих на данный момент. Задание параметров `lowerbound` и `limit` позволяет формировать страницу в удобной для просмотра форме. Для просмотра всего списка имен делегатов рекомендуется вначале значение `lowerbound` устанавливать в виде пустой строки \(“”\). Затем на каждой итерации параметру `lowerbound` передавать последнее возвращаемое имя делегата для следующего вызова `list_witnesses()`. Возвращает список всех зарегистрированных в блокчейне имен делегатов с соответствующими им идентификаторами, отсортированный по именам в алфавитном порядке. -### load_wallet_file() +## load\_wallet\_file\(\) + ```cpp -bool wallet_api::load_wallet_file(string wallet_filename) +bool wallet_api::load_wallet_file(string wallet_filename) ``` Параметр: -`wallet_filename` — имя файла кошелька в формате JSON, который загружается. +`wallet_filename` — имя файла кошелька в формате JSON, который загружается. Используется для загрузки заданного кошелька платформы Graphene. Перед тем, как новый кошелек будет загружен, текущий кошелек закрывается. Если поле `wallet_filename` задано пустым, выполнится перезагрузка существующего файла кошелька. Возвращает “true”, если заданный кошелек успешно загружен. -### lock() +## lock\(\) + ```cpp void wallet_api::lock() ``` -Используется для немедленного блокирования кошелька. +Используется для немедленного блокирования кошелька. + +## normalize\_brain\_key\(\) -### normalize_brain_key() ```cpp -string normalize_brain_key(string s) +string normalize_brain_key(string s) ``` Параметр: -`s` — brain-ключ в оригинальном формате. +`s` — brain-ключ в оригинальном формате. Используется для преобразования формата brain-ключа с целью снижения риска возникновения ошибок при повторных вводах-выводах ключа из памяти. Оригинальный формат brain-ключа преобразуется в формат, используемый для генерации личных ключей. Новый формат содержит верхние регистры всех символов ASCII, а также упакованные последовательно идущие пробелы в один. Возвращает brain-ключ в нормализованном виде. -### post_comment() +## post\_comment\(\) + ```cpp annotated_signed_transaction wallet_api::post_comment( string author, @@ -866,33 +943,35 @@ annotated_signed_transaction wallet_api::post_comment( string title, string body, string json, bool broadcast -) +) ``` Параметры: `author` — имя аккаунта, являющего автором комментария; `permlink` — ссылка на комментарий; `parent_author` — имя аккаунта комментария верхнего уровня. Пустая строка означает верхний уровень комментария; -`parent_permlink` — категория ссылки (для случая, если `parent_author` — пустая строка); +`parent_permlink` — категория ссылки \(для случая, если `parent_author` — пустая строка\); `title` — заголовок комментария; `body` — тело комментария; `json` — метаданные комментария в формате JSON; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для публикации или обновления комментария. -Возвращает подписанную транзакцию. +Возвращает подписанную транзакцию. + +## preview\_builder\_transaction\(\) -### preview_builder_transaction() ```cpp -transaction preview_builder_transaction(transaction_handle_type handle) +transaction preview_builder_transaction(transaction_handle_type handle) ``` Параметр: -`handle` — уникальный номер получаемого конструктора. +`handle` — уникальный номер получаемого конструктора. + +Возвращает уникальный номер для очередного создаваемого конструктора транзакций. -Возвращает уникальный номер для очередного создаваемого конструктора транзакций. +## propose\_builder\_transaction\(\) -### propose_builder_transaction() ```cpp signed_transaction propose_builder_transaction( transaction_handle_type handle, @@ -902,7 +981,7 @@ signed_transaction propose_builder_transaction( time_point_sec expiration, time_point_sec review_period_time, bool broadcast -) +) ``` Параметры: @@ -912,162 +991,176 @@ signed_transaction propose_builder_transaction( `memo` — примечание, текст которого дополняет смысловое значение заголовка; `expiration` — время, по истечении которого прекращается подписание транзакции; `review_period_time` — период, выделенный для подписания транзакции; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. + +Используется для создания конструктора предлагаемых транзакций. Возвращает созданный конструктор транзакций под номером `handle`. -Используется для создания конструктора предлагаемых транзакций. Возвращает созданный конструктор транзакций под номером `handle`. +## publish\_feed\(\) -### publish_feed() ```cpp annotated_signed_transaction wallet_api::publish_feed( string witness, price exchange_rate, bool broadcast -) +) ``` Параметры: -`witness` — делегат, публикующий ценовой тариф (потолок котировок); +`witness` — делегат, публикующий ценовой тариф \(потолок котировок\); `exchange_rate` — предлагаемый курс обмена; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для публикации потолка котировок криптовалют. Делегат может публиковать потолок котировок криптовалют STEEM:SBD на бирже. Медианное значение этих котировок используется для обработки запросов на конвертацию SBD в STEEM. Возвращает подписанную транзакцию. -### quit() +## quit\(\) + ```cpp -void wallet_api::quit() +void wallet_api::quit() ``` -Ипользуется для выхода из кошелька. +Ипользуется для выхода из кошелька. + +## recover\_account\(\) -### recover_account() ```cpp annotated_signed_transaction wallet_api::recover_account( string account_to_recover, authority recent_authority, authority new_authority, bool broadcast -) +) ``` Параметры: -`account_to_recover` — имя аккаунта; у которого восстанавливаются полномочия; -`recent_authority` — недавние полномочия аккаунта; -`new_authority` — новые полномочия, которые задаются в запросе на восстановление; -`broadcast` — “true”, если транзакция пересылается на демон. +`account_to_recover` — имя аккаунта; у которого восстанавливаются полномочия; `recent_authority` — недавние полномочия аккаунта; `new_authority` — новые полномочия, которые задаются в запросе на восстановление; +`broadcast` — “true”, если транзакция пересылается на демон. + +Используется для восстановления полномочий \(авторизацию\) аккаунта с использованием запроса на восстановление, созданного самим аккаунтом. Синтаксис этой команды содержит сериализованный объект авторизации. Пример авторизации объекта показан в следующей строке: -Используется для восстановления полномочий (авторизацию) аккаунта с использованием запроса на восстановление, созданного самим аккаунтом. Синтаксис этой команды содержит сериализованный объект авторизации. Пример авторизации объекта показан в следующей строке: ```cpp recover_account "account_to_recover" { " weight_threshold": 1,"account_auths": [], "key_auths": [["old_public_key",1]] } - {"weight_threshold": 1,"account_auths": [], "key_auths": [["new_public_key",1]]} true -``` + {"weight_threshold": 1,"account_auths": [], "key_auths": [["new_public_key",1]]} true +``` + +## remove\_builder\_transaction\(\) -### remove_builder_transaction() ```cpp -void remove_builder_transaction(transaction_handle_type handle) +void remove_builder_transaction(transaction_handle_type handle) ``` + Параметр: -`handle` — уникальный номер конструктора транзакций. Этот номер уменьшается на единицу после каждого вызова метода. +`handle` — уникальный номер конструктора транзакций. Этот номер уменьшается на единицу после каждого вызова метода. + +Используется для удаления конструктора транзакций по заданному идентификационному номеру. -Используется для удаления конструктора транзакций по заданному идентификационному номеру. +## replace\_operation\_in\_builder\_transaction\(\) -### replace_operation_in_builder_transaction() ```cpp void replace_operation_in_builder_transaction( transaction_handle_type handle, unsigned op_index, const operation& new_op -) +) ``` Параметры: `handle` — уникальный номер конструктора; `op_index` — номер операции в конструкторе транзакций, которую необходимо заменить; -`op` — заменяющая операция. +`op` — заменяющая операция. + +Используется для замены операции под номером `op_index` в конструкторе транзакций на операцию `op`. -Используется для замены операции под номером `op_index` в конструкторе транзакций на операцию `op`. +## request\_account\_recovery\(\) -### request_account_recovery() ```cpp annotated_signed_transaction wallet_api::request_account_recovery( string recovery_account, string account_to_recover, authority new_authority, bool broadcast -) +) ``` Параметры: `recovery_account` — имя аккаунта, создающего запрос на восстановление; `account_to_recover` — имя аккаунта, который необходимо восстановить; `new_authority` — новая авторизация “owner” для восстанавливаемого аккаунта; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. + +Создает запрос на восстановление аккаунта. Синтаксис этой команды содержит сериализованный объект авторизации. Передача авторизации приведена в следующем примере: -Создает запрос на восстановление аккаунта. Синтаксис этой команды содержит сериализованный объект авторизации. Передача авторизации приведена в следующем примере: ```cpp request_account_recovery "recovery_account" "account_to_recover" {"weight_threshold": 1,"account_auths": [], "key_auths": [["new_public_key",1]]} true ``` -### save_wallet_file() + +## save\_wallet\_file\(\) + ```cpp -void wallet_api::save_wallet_file(string wallet_filename) +void wallet_api::save_wallet_file(string wallet_filename) ``` Параметр: -`wallet_filename` — имя нового файла формата JSON, в который сохраняется кошелек. +`wallet_filename` — имя нового файла формата JSON, в который сохраняется кошелек. -Используется для сохранения кошелька в файл с заданным именем. Если поле `wallet_filename` задается пустым, кошелек сохраняется в старый файл. Для выполнения операции «Сохранить как …» следует использовать вызов `set_wallet_filename()`. +Используется для сохранения кошелька в файл с заданным именем. Если поле `wallet_filename` задается пустым, кошелек сохраняется в старый файл. Для выполнения операции «Сохранить как …» следует использовать вызов `set_wallet_filename()`. + +## serialize\_transaction\(\) -### serialize_transaction() ```cpp -string wallet_api::serialize_transaction(signed_transaction tx)const +string wallet_api::serialize_transaction(signed_transaction tx)const ``` Параметр: -`tx` — подписанная транзакция для сериализации. +`tx` — подписанная транзакция для сериализации. Конвертирует подписанную транзакцию в формате JSON в ее бинарное представление. -Возвращает подписанную транзакцию в бинарном представлении, имеющую вид неструктурированной (бесформенной) строки, в которой могут содержаться нулевые символы. +Возвращает подписанную транзакцию в бинарном представлении, имеющую вид неструктурированной \(бесформенной\) строки, в которой могут содержаться нулевые символы. + +## set\_password\(\) -### set_password() ```cpp -void wallet_api::set_password(string password) +void wallet_api::set_password(string password) ``` Параметр: -`password`— новый пароль. +`password`— новый пароль. Используется для установки нового пароля для кошелька. Кошелек должен быть либо новым, либо предварительно открытым командой `unlocked()`. -### set_transaction_expiration() +## set\_transaction\_expiration\(\) + ```cpp -void set_transaction_expiration(uint32_t seconds) +void set_transaction_expiration(uint32_t seconds) ``` Параметр: -`seconds` — период времени в секундах. +`seconds` — период времени в секундах. -Возвращает заданный период времени (в секундах) в будущем, обозначающим срок действия транзакции. +Возвращает заданный период времени \(в секундах\) в будущем, обозначающим срок действия транзакции. + +## set\_voting\_proxy\(\) -### set_voting_proxy() ```cpp signed_transaction set_voting_proxy( string account_to_modify, string voting_account, bool broadcast -) +) ``` Параметры: `account_to_modify`— имя или идентификационный номер аккаунта, чьи полномочия в голосовании изменяются; -`voting_account` — имя аккаунта (заместитель), который наделяется полномочиями в голосовании. Пустая строка означает отсутствие заместителя; -`broadcast` — “true”, если транзакция пересылается на демон. +`voting_account` — имя аккаунта \(заместитель\), который наделяется полномочиями в голосовании. Пустая строка означает отсутствие заместителя; +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для установки полномочий в голосовании для аккаунта. Если пользователь не желает принимать активное участие в голосовании, он может разрешить другому аккаунту (заместителю) использовать его долю голоса при голосовании. Наделение полномочиями заместителя в голосовании не удаляет предыдущие голоса аккаунта из блокчейна, они будут сохранены, но игнорированы. Если аккаунт позже аннулирует полномочия заместителя в голосовании, его предыдущие голоса снова вступят в силу. +Используется для установки полномочий в голосовании для аккаунта. Если пользователь не желает принимать активное участие в голосовании, он может разрешить другому аккаунту \(заместителю\) использовать его долю голоса при голосовании. Наделение полномочиями заместителя в голосовании не удаляет предыдущие голоса аккаунта из блокчейна, они будут сохранены, но игнорированы. Если аккаунт позже аннулирует полномочия заместителя в голосовании, его предыдущие голоса снова вступят в силу. + +## set\_withdraw\_vesting\_route\(\) -### set_withdraw_vesting_route() ```cpp annotated_signed_transaction wallet_api::set_withdraw_vesting_route( string from, @@ -1075,53 +1168,57 @@ annotated_signed_transaction wallet_api::set_withdraw_vesting_route( uint16_t percent, bool auto_vest, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, с кошелька которого снимаются средства в виде VESTS; `to` — имя аккаунта, в кошелек которого возвращаются средства в виде VESTS или STEEM; -`percent` — процент отчисления от суммы возвращаемых средств аккаунту с именем “to”. Это значение должно устанавливаться в пределах от 1 до 100000 включительно (например, 100 составляет 1 %, 10000 составляет 100 %); +`percent` — процент отчисления от суммы возвращаемых средств аккаунту с именем “to”. Это значение должно устанавливаться в пределах от 1 до 100000 включительно \(например, 100 составляет 1 %, 10000 составляет 100 %\); `auto_vest` — “true”, если аккаунт с именем “from” должен получить средства в виде VESTS, и “false”, если в виде STEEM; -`broadcast` — “true”, если подписанную транзакцию необходимо переслать на демон. +`broadcast` — “true”, если подписанную транзакцию необходимо переслать на демон. Используется для настройки маршрута вывода средств, полученных по наделенным акциям. При возврате наделенных акций получаемые средства будут перенаправлены к аккаунтам с именами “from” и “to” в соответствии с указанными весовыми долями. -### sign_builder_transaction() +## sign\_builder\_transaction\(\) + ```cpp signed_transaction wallet_api::sign_builder_transaction( transaction_handle_type handle, bool broadcast -) +) ``` Параметры: `handle` — уникальный номер конструктора транзакций; -`broadcast` — “true”, если подписанные транзакции необходимо переслать на демон. +`broadcast` — “true”, если подписанные транзакции необходимо переслать на демон. + +Используется для подписания всех транзакций в конструкторе транзакций. Возвращает подписанные транзакции в конструкторе транзакций под номером `handle`. -Используется для подписания всех транзакций в конструкторе транзакций. Возвращает подписанные транзакции в конструкторе транзакций под номером `handle`. +## sign\_transaction\(\) -### sign_transaction() ```cpp -annotated_signed_transaction wallet_api::sign_transaction(signed_transaction tx, bool broadcast) +annotated_signed_transaction wallet_api::sign_transaction(signed_transaction tx, bool broadcast) ``` Параметры: `tx` — транзакция; предоставленная на подпись; -`broadcast` — “true”, если подписанную транзакцию необходимо переслать на демон. +`broadcast` — “true”, если подписанную транзакцию необходимо переслать на демон. Используется для предоставления на подпись полностью сформированную транзакцию. Транзакция подписывается необходимыми ключами и пересылается при необходимости на демон. Возвращает подписанную версию транзакции. -### suggest_brain_key() +## suggest\_brain\_key\(\) + ```cpp -brain_key_info wallet_api::suggest_brain_key()const +brain_key_info wallet_api::suggest_brain_key()const ``` Предлагает вариант безопасного brain-ключа для создания аккаунта. Используется для вызова метода `create_account_with_brain_key()`, который требует задания brain-ключа, а также длинную кодовую фразу, которая обеспечивает достаточную энтропию для генерации кипптографических ключей. Данный метод предложит сгенерированную случайным образом строку, которую следует сохранить. -Возвращает предложенный вариант brain-ключа. +Возвращает предложенный вариант brain-ключа. + +## transfer\(\) -### transfer() ```cpp annotated_signed_transaction wallet_api::transfer( string from, @@ -1129,19 +1226,20 @@ annotated_signed_transaction wallet_api::transfer( asset amount, string memo, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, с кошелька которого будут переводиться средства; `to` — имя аккаунта, в кошелек которого будут переводиться средства; -`amount` — сумма переводимых средств (например, 100.000 STEEM); +`amount` — сумма переводимых средств \(например, 100.000 STEEM\); `memo` — запись в транзакции, зашифрованная публичным ключом “memo”; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для перевода средств в виде STEEM или SBD с кошелька одного аккаунта в кошелек другого. -### transfer_from_savings() +## transfer\_from\_savings\(\) + ```cpp annotated_signed_transaction wallet_api::transfer_from_savings( string from, @@ -1150,7 +1248,7 @@ annotated_signed_transaction wallet_api::transfer_from_savings( asset amount, string memo, bool broadcast -) +) ``` Параметры: @@ -1159,11 +1257,12 @@ annotated_signed_transaction wallet_api::transfer_from_savings( `to` — имя аккаунта, которому передаются средства; `amount` — сумма средств, подлежащих передачи; `memo` — текст примечания в транзакции, зашифрованный с помощью ключа `memo`; -`broadcast` — "true", если транзакция пересылается на демон. +`broadcast` — "true", если транзакция пересылается на демон. Возвращает подписанную транзакцию. -### transfer_to_savings() +## transfer\_to\_savings\(\) + ```cpp annotated_signed_transaction wallet_api::transfer_to_savings( string from, @@ -1171,7 +1270,7 @@ annotated_signed_transaction wallet_api::transfer_to_savings( asset amount, string memo, bool broadcast -) +) ``` Параметры: @@ -1179,61 +1278,67 @@ annotated_signed_transaction wallet_api::transfer_to_savings( `to` — имя аккаунта, получающего перевод; `amount` — сумма переводимых средств; `memo` — запись в транзакции, зашифрованная ключом “memo” и оставленная аккаунтом, инициировавшим перевод; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для сбережения средств. Операция перевода средств на сбережение выполняется немедленно. Обратная операция (снятие сбережений) выполняется в течение 72 часов. +Используется для сбережения средств. Операция перевода средств на сбережение выполняется немедленно. Обратная операция \(снятие сбережений\) выполняется в течение 72 часов. Возвращает подписанную транзакцию. -### transfer_to_vesting() +## transfer\_to\_vesting\(\) + ```cpp annotated_signed_transaction wallet_api::transfer_to_vesting( string from, string to, asset amount, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, от которого поступают средства в виде STEEM; `to` — имя аккаунта, к которому поступают средства в виде VESTS; `amount` — сумма средств в виде STEEM, выделяемая в инвестиционный фонд; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для передачи средств в виде STEEM в инвестиционный фонд, представленный наделяющими акциями (VESTS). VESTS обязаны облагаться отчислениями в размере не менее одного “coin” в год и еженедельным снятием средств в течение последующих двух лет. +Используется для передачи средств в виде STEEM в инвестиционный фонд, представленный наделяющими акциями \(VESTS\). VESTS обязаны облагаться отчислениями в размере не менее одного “coin” в год и еженедельным снятием средств в течение последующих двух лет. Возвращает подписанную транзакцию. -### try_decrypt_message() +## try\_decrypt\_message\(\) + ```cpp - message_body wallet_api::try_decrypt_message(const message_api_obj& mo ) + message_body wallet_api::try_decrypt_message(const message_api_obj& mo ) ``` Параметр: -`mo` — объект API сообщения для расшифровки. +`mo` — объект API сообщения для расшифровки. Используется для получения текстовых сообщений, зашифрованных с помощью личного ключа “memo”. Выполняет проверку текстового сообщения на контрольную сумму. Возвращает расшифрованный текст в случае соответствия ключа. -### try_get_private_key() +## try\_get\_private\_key\(\) + ```cpp -optional try_get_private_key(const public_key_type& id)const +optional try_get_private_key(const public_key_type& id)const ``` Параметр: -`id` — идентификационный номер публичного ключа. +`id` — идентификационный номер публичного ключа. + +Возвращает личный ключ в формате WIF, соответствующий публичному с заданным идентификационным номером, если публичный ключ имеется. -Возвращает личный ключ в формате WIF, соответствующий публичному с заданным идентификационным номером, если публичный ключ имеется. +## unlock\(string password\) -### unlock(string password) ```cpp -void wallet_api::unlock(string password) +void wallet_api::unlock(string password) ``` Параметр: -`password` — пароль, который ранее был установлен с помощью вызова `set_password()`. +`password` — пароль, который ранее был установлен с помощью вызова `set_password()`. + +Используется для разблокирования кошелька. Кошелек остается открытым до завершения работы программы либо до появления команды `lock()`. + +## update\_account\(\) -Используется для разблокирования кошелька. Кошелек остается открытым до завершения работы программы либо до появления команды `lock()`. -### update_account() ```cpp annotated_signed_transaction wallet_api::update_account( string accountname, @@ -1243,22 +1348,23 @@ annotated_signed_transaction wallet_api::update_account( public_key_type posting, public_key_type memo, bool broadcast -)const +)const ``` Параметры: `accountname` — имя аккаунта; -`json_meta` — новые метаданные поля “json_meta”, относящиеся к аккаунту; +`json_meta` — новые метаданные поля “json\_meta”, относящиеся к аккаунту; `owner` — новый публичный ключ типа `owner` для аккаунта; `active` — новый публичный ключ типа `active` для аккаунта; `posting` — новый публичный ключ типа `posting` для аккаунта; `memo` — новый публичный ключ типа `memo` для аккаунта; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления метаданных и ключей существующего аккаунта. Возвращает подписанную транзакцию. -### update_account_auth_account() +## update\_account\_auth\_account\(\) + ```cpp annotated_signed_transaction wallet_api::update_account_auth_account( string account_name, @@ -1266,20 +1372,21 @@ annotated_signed_transaction wallet_api::update_account_auth_account( string auth_account, weight_type weight, bool broadcast -) +) ``` Параметры: -`account_name` — имя аккаунта, чьи полномочия (тип авторизации) следует обновить; -`type` — тип авторизации (`owner`, `active` или `posting`); +`account_name` — имя аккаунта, чьи полномочия \(тип авторизации\) следует обновить; +`type` — тип авторизации \(`owner`, `active` или `posting`\); `auth_account` — имя аккаунта, чьими полномочиями наделяется аккаунт с именем `account_name`; `weight` — вес, который должен иметь `auth_account` для авторизации. Вес «0» означает удаление `auth_account`; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления полномочий существующего аккаунта в соответствии с полномочиями указанного аккаунта. Возвращает подписанную транзакцию. -### update_account_auth_key() +## update\_account\_auth\_key\(\) + ```cpp annotated_signed_transaction wallet_api::update_account_auth_key( string account_name, @@ -1287,90 +1394,95 @@ annotated_signed_transaction wallet_api::update_account_auth_key( public_key_type key, weight_type weight, bool broadcast -) +) ``` Параметры: -`account_name` — имя аккаунта, чьи полномочия (тип авторизации) следует обновить; -`type` — тип авторизации (`owner`, `active` или `posting`); +`account_name` — имя аккаунта, чьи полномочия \(тип авторизации\) следует обновить; +`type` — тип авторизации \(`owner`, `active` или `posting`\); `key` — публичный ключ, который добавляется к авторизации аккаунта; `weight` — вес, который должен иметь публичный ключ в авторизации. Вес «0» означает удаление ключа; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления ключа авторизации для существующего аккаунта. Возвращает подписанную транзакцию. -### update_account_auth_threshold() +## update\_account\_auth\_threshold\(\) + ```cpp annotated_signed_transaction wallet_api::update_account_auth_threshold( string account_name, authority_type type, uint32_t threshold, bool broadcast -) +) ``` Параметры: -`account_name` — имя аккаунта, чьи полномочия (тип авторизации) следует обновить; -`type` — тип авторизации (`owner`, `active` или `posting`); +`account_name` — имя аккаунта, чьи полномочия \(тип авторизации\) следует обновить; +`type` — тип авторизации \(`owner`, `active` или `posting`\); `threshold` — пороговое значение веса, необходимое для авторизации; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления порогового значения веса авторизации для существующего аккаунта. Возвращает подписанную транзакцию. -### update_account_memo_key() +## update\_account\_memo\_key\(\) + ```cpp annotated_signed_transaction wallet_api::update_account_memo_key( string account_name, public_key_type key, bool broadcast - ) + ) ``` Параметры: `account_name` — имя аккаунта, чей ключ будет обновлен; `key` — новый публичный ключ `memo`; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления публичного ключа `memo` для существующего аккаунта. Возвращает подписанную транзакцию. -### update_account_meta() +## update\_account\_meta\(\) + ```cpp annotated_signed_transaction wallet_api::update_account_meta( string account_name, string json_meta, bool broadcast -) +) ``` Параметры: `account_name` — имя аккаунта, чьи метаданные будут обновлены; `json_meta` — новые метаданные JSON для аккаунта; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для обновления метаданных JSON для существующего аккаунта. Возвращает подписанную транзакцию. -### update_chain_properties() +## update\_chain\_properties\(\) + ```cpp annotated_signed_transaction wallet_api::update_chain_properties( string witness_account_name, const optional_chain_props& props, bool broadcast -) +) ``` Параметры: `witness_account_name` — имя делегата; `props` — перечень новых возможностей блокчейна, за которые голосует делегат; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для принятия новых возможностей блокчейна голосованием отдельного делегата. Возвращает подписанную транзакцию. -### update_witness() +## update\_witness\(\) + ```cpp annotated_signed_transaction wallet_api::update_witness( string witness_name, @@ -1378,19 +1490,20 @@ annotated_signed_transaction wallet_api::update_witness( public_key_type block_signing_key, optional props, bool broadcast -) -``` +) +``` + Параметры: `witness_name` — имя делегата; `url` — адрес URL, содержащий некоторую информацию о делегате. Пустая строка означает, что старая информация о делегате является актуальной; -`block_signing_key` — публичный ключ для подписи нового блока. Значение в виде пустой строки блокирует блок; +`block_signing_key` — публичный ключ для подписи нового блока. Значение в виде пустой строки блокирует блок; `props` — перечень новых возможностей блокчейна, за которые голосует делегат; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. -Используется для обновления объекта, принадлежащего делегату с именем `witness_name`. -Возвращает подписанную транзакцию. +Используется для обновления объекта, принадлежащего делегату с именем `witness_name`. Возвращает подписанную транзакцию. + +## vote\(\) -### vote() ```cpp annotated_signed_transaction wallet_api::vote( string voter, @@ -1398,7 +1511,7 @@ annotated_signed_transaction wallet_api::vote( string permlink, int16_t weight, bool broadcast -) +) ``` Параметры: @@ -1406,50 +1519,44 @@ annotated_signed_transaction wallet_api::vote( `author` — автор комментария, за который нужно проголосовать; `permlink` — ссылка на комментарий, за который нужно проголосовать; `weight` — вес голоса. Значение должно быть отличным от нуля и находиться в пределах от -100 до 100 включительно; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для голосования за комментарий, оплачиваемый в STEEM. Возвращает подписанную транзакцию. -### vote_for_witness() +## vote\_for\_witness\(\) + ```cpp annotated_signed_transaction wallet_api::vote_for_witness( string account_to_vote_with, string witness_to_vote_for, bool approve, bool broadcast -) +) ``` Параметры: `account_to_vote_with` — имя аккаунта, голосующего за делегата; `witness_to_vote_for` — делегат, за которого идет голосование; `approve` — “true”, если аккаунт голосует за делегата; -`broadcast` — “true”, если транзакция пересылается на демон. +`broadcast` — “true”, если транзакция пересылается на демон. Используется для голосования за конкретного делегата. По умолчанию считается, что аккаунт не отдал ни позитивный, ни негативный голос за делегата. Аккаунту предоставляется возможность отдать либо позитивный, либо негативный голос. Голосование продолжается до тех пор, пока не будет предложено новое голосование. -Возвращает подписанную транзакцию. +Возвращает подписанную транзакцию. + +## withdraw\_vesting\(\) -### withdraw_vesting() ```cpp annotated_signed_transaction wallet_api::withdraw_vesting( string from, asset vesting_shares, bool broadcast -) +) ``` Параметры: `from` — имя аккаунта, с кошелька которого снимаются средства в виде VESTS; -`vesting_shares` — сумма средств в виде VESTS, которая будет еженедельно сниматься с кошелька аккаунта в течение следующих двух лет (сумма / 104 акции) и зачисляться на депозит в виде VESTS; -`broadcast` — “true”, если транзакция пересылается на демон. - -Настраивает запрос на вывод средств. Запрос выполняется один раз в неделю в течение последующих двух лет. -Возвращает подписанную транзакцию. - -*** +`vesting_shares` — сумма средств в виде VESTS, которая будет еженедельно сниматься с кошелька аккаунта в течение следующих двух лет \(сумма / 104 акции\) и зачисляться на депозит в виде VESTS; +`broadcast` — “true”, если транзакция пересылается на демон. -**Полезные ссылки:** -https://wiki.golos.io/golosd/HardFork/New_HardFork-HF18.html -https://wiki.golos.io/golosd/HardFork/HF18_cli_wallet_changes-rus.html +Настраивает запрос на вывод средств. Запрос выполняется один раз в неделю в течение последующих двух лет. Возвращает подписанную транзакцию. -**** diff --git a/developers/basics/README.md b/developers/basics/README.md new file mode 100644 index 00000000..4105a518 --- /dev/null +++ b/developers/basics/README.md @@ -0,0 +1,15 @@ +# Основы + +Раздел с описанием API/объектов/структур в блокчейне, примеры кода для популярных вариантов использования, гайд для формирования транзакций. + +* [Операции и их типы](operations.md) +* [Объекты и структуры](object-structures.md) +* [Состояние \(стэйт\) системы](state.md) +* [Плагины и их API](plugins-api.md) +* [Библиотеки для работы](libraries.md) +* [Примеры кода](code-examples.md) +* [Формирование транзакций](transaction-formatting.md) +* [Пропускная способность](bandwidth.md) + +Полезно будет ознакомиться и с [документацией Steem](https://developers.steem.io/), которая во многом близка и для блокчейна Голос. + diff --git a/golosd/mechanics/bandwidth.md b/developers/basics/bandwidth.md similarity index 83% rename from golosd/mechanics/bandwidth.md rename to developers/basics/bandwidth.md index 78e18d2b..1865fc1c 100644 --- a/golosd/mechanics/bandwidth.md +++ b/developers/basics/bandwidth.md @@ -1,8 +1,8 @@ -# Bandwidth +# Пропускная способность -Блокчейн Голос является системой с нулевыми комиссиями за транзакции. Однако, объём информации, который можно записать в блокчейн в единицу времени, не бесконечен. Для контроля над расходованием общей пропускной способности был разработан специальный механизм её распределения. Данный механизм является защитой системы от атак по исчерпанию ресурсов системы. +Блокчейн Голос является системой с нулевыми комиссиями за транзакции. Однако, объём информации, который можно записать в блокчейн в единицу времени, не бесконечен. Для контроля над расходованием общей пропускной способности был разработан специальный механизм её распределения. -# Пропускная способность аккаунта +## Пропускная способность аккаунта Максимально доступная bandwidth аккаунта в системе напрямую зависит от количества Силы Голоса \(vesting shares\). @@ -12,7 +12,7 @@ 2. market bandwidth: ограничивает объём операций трансфера монет и выставления/отмены рыночных ордеров на внутренней бирже. 3. post bandwidth: штрафует аккаунт уменьшением выплаты за пост, если аккаунт постит слишком много постов. -# forum и market bandwidth +## forum и market bandwidth При превышении данного типа bandwidth возникает ошибка: _Account exceeded maximum allowed bandwidth per vesting share._ @@ -21,9 +21,9 @@ * forum bandwidth: 100 KB * market bandwidth: 10 KB -Время восстановления bandwidth от 0 до 100% определяется константой `STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS` и составляет 7 дней \(актуально для 0.17.0\). +Время восстановления bandwidth от 0 до 100% определяется константой `STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS` и составляет 7 дней \(актуально для 0.17.0\). -## Механизм вычисления bandwidth +### Механизм вычисления bandwidth В исходных текстах происходит в database.cpp в `bool database::update_account_bandwidth`. @@ -33,7 +33,7 @@ * `has_bandwidth`: результат сравнения, получается True если есть доступная полоса, и False если нет * `account_vshares` - Сила Голоса аккаунта в виде vesting shares -* `max_virtual_bandwidth` - максимальная виртуальная пропускная способность сети. См. раздел ""Глобальная пропускная способность" +* `max_virtual_bandwidth` - максимальная виртуальная пропускная способность сети. * `account_average_bandwidth` - показатель использования аккаунтом своей полосы * `total_vshares` - суммарное значение vesting shares всех аккаунтов в блокчейне @@ -41,7 +41,7 @@ В данной формуле все переменные являются легко доступными параметрами, кроме `account_average_bandwidth`. Для получения данного значения требуется провести ряд вычислений. -1. С помощью API-метода [`get_account_bandwidth`](/golosd/api/api-golos-ch1.md) можно получить значение bandwidth на момент последней совершённой транзакции. Данное значение не будет актуальным на текущий момент времени, так как bandwidth всё время восстанавливается \(уменьшается % потраченной пропускной способности\). **Note:** это же значение bandwidth можно получить с помощью API-вызова `get_accounts`, однако в этом случае bandwidth будет находиться в поле `'new_average_bandwidth'` \(а поле `'average_bandwidth'` следует проигнорировать, так как оно относится к устаревшему механизму контроля bandwidth и является deprecated\). +1. С помощью API-метода [`get_account_bandwidth`](https://github.com/golos-blockchain/wiki/tree/ac1bf1ca5f43039f31ab27d77195dbc63dae37a1/developers/api-dokumentatsiya/api-golos-ch1.md) можно получить значение bandwidth на момент последней совершённой транзакции. Данное значение не будет актуальным на текущий момент времени, так как bandwidth всё время восстанавливается \(уменьшается % потраченной пропускной способности\). **Note:** это же значение bandwidth можно получить с помощью API-вызова `get_accounts`, однако в этом случае bandwidth будет находиться в поле `'new_average_bandwidth'` \(а поле `'average_bandwidth'` следует проигнорировать, так как оно относится к устаревшему механизму контроля bandwidth и является deprecated\). 2. В результатах вышеупомянутого вызова так же присутствует поле `"last_bandwidth_update"`, оно показывает момент последнего обновления bandwidth. 3. Если с момента последнего обновления прошло больше времени чем `STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS`, то `account_average_bandwidth` автоматически становится 0, это означает, что аккаунт может воспользоваться всей своей доступной полосой пропускания. 4. Если же времени прошло меньше, то следует подсчитать, на сколько восстановилась bandwidth. Для этого применяется следующая формула: `new_bandwidth = ((STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS - elapsed_time) * account_average_bandwidth) / STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS`, где @@ -52,7 +52,7 @@ * `STEEMIT_BANDWIDTH_PRECISION` - константа, определяющая точность вычислений при работе с bandwidth 6. Вычисляется финальное значение `account_average_bandwidth = new_bandwidth + trx_bandwidth` -## Получение значений bandwidth в килобайтах +### Получение значений bandwidth в килобайтах Мы можем самостоятельно вычислять максимально доступную bandwidth аккаунта и потреблённую на текущий момент. @@ -65,7 +65,7 @@ Практическую реализацию вычисления bandwidth вы можете посмотреть в функции `get_bandwidth` в [functions.py](https://github.com/bitfag/golos-scripts/blob/master/functions.py), которая используется в скрипте [get\_bandwidth.py](https://github.com/bitfag/golos-scripts/blob/master/get_bandwidth.py). -# Глобальная пропускная способность +## Глобальная пропускная способность При общей высокой загруженности сети срабатывает механизм ограничения общей пропускной способности через снижение `max_virtual_bandwidth`. @@ -77,11 +77,9 @@ Таким образом, ограничение общей пропускной способности активируется, когда средний размер блока становится более 25% от текущего максимально размера блока. При этом ограничение срабатывает достаточно резко, т.к. `max_virtual_bandwidth` падает сразу в 2 раза. При этом, недостаток bandwidth сразу же могут испытать те пользователи, которые имеют потребление полосы выше 50%. Восстановление же общей доступной полосы после включения ограничения происходит плавно, в течение 3-4 дней. -# post bandwidth +## post bandwidth Является самостоятельным ограничителем и никак не связана с пропускной способностью сети. Предназначение - штрафовать аккаунт, который постит слишком часто. -Реализация в исходных текстах находится в steem\_evaluator.cpp в `void comment_evaluator::do_apply()`. - -Подробное описание вы можете прочитать в статье [https://goldvoice.club/@veritas/kak-ustroeno-ogranichenie-na-kolichestvo-publikacii-na-golose/](mailto:https://goldvoice.club/@veritas/kak-ustroeno-ogranichenie-na-kolichestvo-publikacii-na-golose/) +Реализация в исходных текстах находится в steem\_evaluator.cpp в `void comment_evaluator::do_apply()` diff --git a/developers/basics/code-examples.md b/developers/basics/code-examples.md new file mode 100644 index 00000000..7e560d5a --- /dev/null +++ b/developers/basics/code-examples.md @@ -0,0 +1,509 @@ +# Примеры кода + +Начинающим разработчикам всегда рекомендуется прочесть документации по той или иной библиотеке. Это помогает как понять работу библиотеки, так и запомнить возможности, которые можно использовать при разработке приложений. В данном разделе описаны наиболее популярные запросы в виде примеров. Наиболее используемая библиотека для приложений Golos — [golos-js](https://github.com/golos-blockchain/golos-js), поэтому примеры с её использованием. + +Подробная документация на английском с указанием всех методов и их аттрибутов [доступно по ссылке](https://github.com/golos-blockchain/golos-js/tree/master/doc). + +### Подключение библиотеки + +В зависимости от серверного \(nodejs\) или браузерного \(js\) использования библиотеку нужно подключать разными способами. + +Для nodejs актуальной инструкцией будет установка библиотеки через `npm install golos-classic-js --save` и подключением её в js файле через `var golos = require('golos-classic-js');`. + +Для js подключения можно либо самому собрать webpack библиотеки через консоль `npm build`, либо воспользоваться уже собранной библиотекой от [jsDelivr CND](https://cdn.jsdelivr.net/npm/golos-classic-js@latest/dist/golos.min.js) или [Unpkg CDN](https://unpkg.com/golos-classic-js@latest/dist/golos.min.js). Просто добавьте к файлу script и укажите url библиотеки: ``, после чего у вас будет доступ через консоль к глобальной переменной `golos`. + +### Использование публичной ноды + +Пока у вашего приложения нет большого потока пользователей, разумно использовать публичные API-ноды, список от делегатов [здесь](https://golos.id/nodes). + +В нём указаны адреса для JSON-RPC запросов через WebSocket over SSL, для запросов через HTTPS просто замените `wss` на `https`и уберите `ws` в конце. + +Пример настройки для работы с нодой `https://api.golos.blckchnd.com/`: + +```javascript +var api_gate='https://api.golos.blckchnd.com/'; +golos.config.set('websocket',api_gate); +``` + +### API-запросы + +В разделе [Плагины и их API](plugins-api.md) были перечислены основные плагины и запросы к ним — все они доступны в библиотеке. Для того, чтобы выполнить тот или иной запрос, достаточно перевести его название в [CamelCase](https://ru.wikipedia.org/wiki/CamelCase). + +Например, если вы решили выполнить запрос get\_database\_info к плагину database\_api, то вам необходимо выполнить код: + +```javascript +golos.api.getDatabaseInfo(function(err,response){ + if(!err){ + //получен ответ + console.log(response); + } + else{ + //ошибка + console.log(err); + } +}); +``` + +В случае, если запрос требует входных данных, то вы добавляете их в начало вызова. + +### Транслирование транзакций \(broadcast\) + +Для каждой операции из протокола Golos существует отдельный метод в библиотеке golos-js, который принимает приватный ключ \(для подписи транзакции\) и параметры операции. Название операции, аналогично API методам, должно быть переведено в [формат CamelCase](https://ru.wikipedia.org/wiki/CamelCase). Пример кода для трансляции \(broadcast\) операции `account_metadata` \(запись в блокчейн мета-данных аккаунта\): + +```javascript +var posting_key='5K...';//приватный ключ +var user_login='test';//логин аккаунта +var metadata={'name':'Тестовый аккаунт','photo':'https://cdn.pixabay.com/photo.jpg'}; +golos.broadcast.accountMetadata(posting_key,user_login,JSON.stringify(metadata),function(err,result){ + if(!err){ + //транзакция принята публичной нодой + console.log(result); + } + else{ + //нода не приняла транзакцию + console.log(err); + } +}); +``` + +### Динамические глобальные свойства сети + +Часть новичков хотят периодически опрашивать ноду и получать актуальные данные о DGP \(Dynamic Global Properties\), чтобы на основе этого показывать новые блоки, исполнять условия по необратимому блоку или подсвечивать в списке делегатов последнего, кто подписал блок. Для этого достаточно запрашивать данные по таймеру каждые 3 секунды \(время между блоками\): + +```javascript +var dgp={} +function update_dgp(auto=false){ + golos.api.getDynamicGlobalProperties(function(err,response){ + if(!err){ + dgp=response; + } + }); + if(auto){ + setTimeout("update_dgp(true)",3000); + } +} +update_dgp(true); +``` + +### Работа с ключами + +Криптографические ключи представляют собой координаты X и Y которые записаны в общепринятом формате DER на эллептической кривой secp256k1 \(в качестве хеш-функции служит SHA-256\). В библиотеке golos-js преобразования и работа с ключами относятся к модулю `golos.auth`. + +В Graphene экосистеме придумали механизм человекочитаемых паролей. По причинам перебора использовать их не рекомендуется, поэтому, чтобы усложнить множественный перебор приватных ключей к публичному пришли к определенным правилам формирования ключей в виде конкатенации строк: логин аккаунта, пароль \(сложный\), тип доступа. + +Часть приложений условились использовать эти правила, таким образом упрощая доступ пользователем к разным возможностям аккаунта по общему паролю. Например, пользователь test зарегистрирован используя общий пароль PK3452JENDK332. При авторизации в приложении используя эти логин и пароль, приложение может самостоятельно сформировать ключи нужного типа доступа, просто используя конкатенацию строк. Пользователь хочет перевести токены? Приложение формирует налету приватный активный ключ по строке testPK3452JENDK332active. Пользователь награждает кого-то? Приложение формирует приватный постинг ключ по строке testPK3452JENDK332posting. Это упрощает доступ для пользователя по общему паролю, но лишает гибкости и подвергает опасности аккаунт. Типы доступа имеют разные полномочия и при компрометации доверенного окружения доверенного окружения пользователя или сайта доступ к аккаунту может быть перехвачен. + +### Регистрация аккаунта + +Обычно, при регистрации пользователя, приложение генерирует пароль самостоятельно. Но бывает исключения, когда приложение позволяет использовать свой пароль для генерации ключей. Библиотека позволяет самостоятельно указать строки для генерации ключа в методе `golos.auth.toWif(account_login,general_pass,auth_type);`. В примере ниже представлена функция для генерации случайного пароля заданной длины и генерации ключа по нему без привязки к пользователю и типу доступа: + +```javascript +function pass_gen(length=100,to_wif=true){ + let charset='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-=_:;.,@!^&*$'; + let ret=''; + for (var i=0,n=charset.length;i В разделе [Объекты и структуры в блокчейне](object-structures.md) описана большая часть объектов, которые составляют состояние системы. + +## Dynamic global property object \(dgpo\) + +Данный объект хранит основные свойства сети, содержит информацию о токенах в обращении и другую важную информацию. В исходном коде он часто представлен в виде переменной dgp, нода модифицирует его состояние с каждой иттерацией, поэтому dynamic global property можно с уверенностью считать самой важной частью состояния системы. Рассмотрим его публичные свойства, доступные через метод get\_dynamic\_global\_properties при обращении к плагину database\_api: + +* **current\_witness** \(пример значения: "blockchained"\) — делегат актуального блока; +* **head\_block\_number** \(пример значения: 34939787\) — номер актуального блока; +* **head\_block\_id** \(пример значения: "0215238bf875e34e09a0c7335c3751c40520e73f"\) — идентификатор \(он же хэш\) актуального блока; +* **time** \(пример значения: "2020-02-19T11:40:57"\) — время генерации актуального блока; +* **last\_irreversible\_block\_num** \(пример значения: 34939769\) — номер последнего необратимого блока; +* **current\_supply** \(пример значения: "200739832.421 GOLOS"\) — общее количество токенов GOLOS в системе; +* **total\_vesting\_fund** \(пример значения: "80099681.756 GOLOS"\) — количество токенов GOLOS переведенных в долю сети \(GOLOS POWER\); +* **total\_vesting\_shares** \(пример значения: "251336005597.634797 GESTS"\) — общая количественная мера доли сети в GESTS; +* **total\_reward\_fund\_steem** \(пример значения: "255.357 GOLOS"\) — баланс пула наград; +* **total\_reward\_shares2** \(пример значения: "21280044314718424"\) — количественная мера конкуренции за пул наград; +* **current\_aslot** \(пример значения: 35108019\) — текущий номер слота делегата на подпись \(содержит в себе нумерацию слота от старта в сети, включая пропущенные делегатами блоки\); +* **recent\_slots\_filled** \(пример значения: "340282366920938463463374607431768211455"\) — используется для вычисления процента делегатов участвующих в подписи блоков; +* **participation\_count** \(пример значения: 128\) — необходимо разделить на 128, чтобы получить процент делегатов участвующих в подписи блоков; +* **maximum\_block\_size** \(пример значения: 65536\) — максимальный размер блока в байтах \(голосуемый параметр сети\); +* **average\_block\_size** \(пример значения: 209\) — средний размер блока, рассчитывается по формуле `average_block_size = (99 * average_block_size + new_block_size) / 100`, используется для обновления current\_reserve\_ratio для поддержания около 50% или меньше в пропускной способности сети; +* **max\_virtual\_bandwidth** \(пример значения: "5986734968066277376"\) — максимальная пропускная способность сети рассчитывается по формуле `maximum_block_size * CHAIN_BANDWIDTH_AVERAGE_WINDOW_SECONDS / CHAIN_BLOCK_INTERVAL`, максимальная виртуальная пропускная способность сети по формуле `max_bandwidth * current_reserve_ratio` +* **current\_reserve\_ratio** \(пример значения: 20000\) — Раз в 20 блоков \(1 минута\) происходит проверка `average_block_size <= 25% maximum_block_size`. Если оно выполняется, то данное значение увеличивается на 1 \(линейно, каждый блок\), но не более CHAIN\_MAX\_RESERVE\_RATIO \(20000\). Если условие не выполнено, то current\_reserve\_ratio делится пополам, что должно сразу снизить нагрузку на сеть, защищая ее от участников, использующих объемные транзакции. Другими словами уменьшение вдвое резервного соотношения не уменьшит вдвое использование сети, но ограничит пользователей которые уже попытаются превысить более 50% от их пропускной способности. Когда резервное соотношение падает вдвое от максимального значения \(10000 вместо 20000\), восстановление общей виртуальной пропускной способности займет около 7 суток. +* и другие... + +## Уникальность транзакций и TaPoS \(Transactions as Proof of Stake\) + +Нода проверяет все входящие транзакции на уникальность в пуле транзакций. После того как наступает expiration \(ограничено в настройках константой CHAIN\_MAX\_TIME\_UNTIL\_EXPIRATION в один час\), транзакция удаляется из пула. + +Все транзакции в GOLOS должны [соответствовать концепции TaPoS](https://github.com/super3/invictus.io/blob/master/assets/pdf/TransactionsAsProofOfStake10.pdf), то-есть ссылаться на один из прошлых блоков \(ref\_block\_num в 2 байтовом представлении \(бинарное «и» десятичного представления номера блока с hex `ffff`\) и ref\_block\_prefix состоящий из десятичного представления 5, 6, 7, 8 байтов от бинарного состояния хэша в обратном порядке\), что позволяет иницатору транзакции опираться на актуальное для него состояние системы не беспокоясь о необратимом блоке. В случае, если он опирался на состояние системы в случайном минорном форке, то транзакция не попадет в основную цепочку. Таким образом участники сети могут контролировать исполнение очереди транзакций и строить взаимодействие не дожидаясь необратимости блока. Это, в свою очередь, накладывает ограничение на финальный учет подобных действий, поэтому большинство важных транзакций должны находиться уже в необратимом состоянии для проверяющей стороны. + +Нода выделяет пространство block\_summary\_object с размерностью в 2 байта \(чтобы номер блока прошедший через операцию бинарного «и» с hex `ffff` умещался в диапазоне от 0 до 65536\) и принимая новые блоки перезаписывает по кругу идентификаторы \(хэши\) в этом пространстве \(и индексе block\_summary\_index\). 65537 блоков охватывают временной промежуток 196611 секунд \(примерно 2.27 суток\). Соответственно новые транзакции могут ссылаться только на блоки из этого пространства, чтобы нода могла сверить соответствие идентификатора блока \(из ref\_block\_num\) с контрольной суммой из ref\_block\_prefix. + diff --git a/developers/basics/transaction-formatting.md b/developers/basics/transaction-formatting.md new file mode 100644 index 00000000..fe6169c3 --- /dev/null +++ b/developers/basics/transaction-formatting.md @@ -0,0 +1,165 @@ +# Формирование транзакций + +Есть правила формирования транзакций, заложенные в протокол Golos. Данные, подписываемые криптографическим ключом, должны соответствовать всем структурам и правилам бинарного представления, заложенным в код. В данном разделе вы узнаете как кодируются ключи, как происходит бинарное представление данных или их подготовка. + +## Структура транзакции для подписи + +Структура данных, бинарное представление которой и нужно подписывать используя ключи соответствующих типов доступа используемых в аккаунтах вложенных операций, содержит следующие поля: + +* **chain\_id** — идентификатор цепи, в Golos это fc::sha256::hash от строки `GOLOS`: `782a3039b478c839e4cb0c941ff4eaeb7df40bdd68bd441afd444b9da763de12`. Стоит отметить, что fc::sha256::hash преобразует строку в c\_str, добавляя в начало ее hex значения `56495A` длину строки, в итоге sha256 рассчитывается от hex значения `0356495A`; +* **tapos\_link** — [Transactions as Proof of Stake концепция](state.md) заключается в том, чтобы каждая транзакция ссылалась на конкретный блок, который должен быть в цепи для ее работы. Бинарное представление является отображением параметров транзакции ref\_block\_num и ref\_block\_prefix. +* **expiration** — unixtime экспирации транзакции \(она должна быть включена в цепь до времени экспирации\); +* **operations** — массив операций находящихся в транзакции, бинарное представление каждой операции состоит из всех аттрибутов операции согласно протоколу; +* **extensions** — массив служебных расширений транзакции \(не используется, поэтому в бинарном формате представляет собой hex значение массива без элементов: `00`\); + +## Зачем необходим chain\_id + +Открытый и свободный код блокчейн систем основанных на Graphene позволяют запускать новые цепочки, как без изменений, так и полностью переработанные с собственными механиками и экономикой. Более того, множество проектов запускают публичные тестовые цепочки для проверки изменений. Чтобы ноды не путались и транзакции из одной сети нельзя было применять в форке \(или цепи с аналогичными аккаунтами и ключами\) — существует идентификатор цепи, который присутствует как метка в каждой транзакции и операции подписи. + +## Формат ключей + +Приватные и публичные ключи в Golos находятся по [алгоритму ESDCA](https://ru.wikipedia.org/wiki/ECDSA) \([теория](https://habr.com/ru/post/188958/)\), и используют криптографию для проверки подписей набора данных. Многие разработчики не являясь специалистами в криптографии просто используют специализированные библиотеки, не вдаваясь в подробности. + +Рассмотрим этапность преобразования приватного ключа \(состоящего из 32 байт\) в читаемый WIF формат: + +* Ключу добавляем бинарный префикс в hex представлении `80`; +* Вычисляем sha256 хэш от sha256 хэша бинарного представления ключа для контрольной суммы \(checksum\); +* Добавляем в конец ключа первые 8 байт от контрольной суммы; +* Кодируем полученный бинарный результат через base58 алгоритм с использованием алфавита: `123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`; + +Этапность преобразование публичного ключа \(состоящего из 32 байт\) в читаемый формат: + +* Получаем контрольную сумму хэшированием бинарного представления ключа [алгоритмом ripemd160](https://ru.wikipedia.org/wiki/RIPEMD-160); +* Добавляем в конец ключа первые 8 байт от контрольной суммы; +* Кодируем полученный бинарный результат через base58 алгоритм с использованием алфавита: `123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz`; +* Добавляем префикс сети \(строковое значение `GOLOS`\); + +В библиотеке golos-js используется модуль `auth` \([ссылка на GitHub](https://github.com/golos-blockchain/golos-js/blob/master/src/auth/index.js)\), который позволяет предустановленными методами работать с ключами и подписывать данные. + +## Представление разных типов данных в бинарном виде + +* **string** — строковое значение в бинарном виде представляет собой байт содержащий длину строки и саму строку \(например, строковое значение логина аккаунта `escrow` будет соответствовать hex значению `06657363726f77` в бинарном представлении\); +* **integer** — числовое значение переворачивается в бинарном представлении и пустая размерность заполняется нулями \(если задан тип значения\). Например, процент апвоута указываемый в операции `upvote` представляет собой uint16\_t, для передачи которого достаточно 2 байта. Если необходимо передать значением 10.00%, то в целочисленном значении это будет 1000, в hex представлении `03EB`, перевернутое значение которого будет `EB03`. +* **date** — поля дат из JSON представления записаны в ISO формате \(например, `2019-02-07T06:19:23` в часовом поясе UTC+0, он же GMT\). Для их бинарного значения записывается в десятичном формате unixtime по правилам представления **integer**. Пример `2019-02-07T06:19:23` в unixtime будет `1549520363` \(hex значение `5C5BCDEB`\), который в бинарном значении будет представлять собой hex: `EBCD5B5C`. +* **asset** — бинарное значение токенов GOLOS представляет собой последовательность значений: целочисленный integer размерностью 8 байт без точности \(0.012 будет представлять собой 12, 1.002 будет представлять собой 1002\). Например: `1.002 GOLOS` в JSON значении внутри операции будет иметь бинарное представление в hex: `EA030000000000000356495A`. +* **public\_key** — значение публичного ключа в бинарном представлении содержит 33 байта, первый байт — значение для восстанавления публичного ключа \([recovery id в ECDSA](https://crypto.stackexchange.com/questions/18105/how-does-recovering-the-public-key-from-an-ecdsa-signature-work)\), 16 байт — координаты точки публичного ключа по оси X, последние 16 байт по оси Y. Например, бинарное значение `026a1dbaacb805f145f9276025627102152840bb1aa09b7fac580f892d93b572b4` соответствует приватному ключу с recovery\_id равным `02` и точке с координатами X в hex представлении `6a1dbaacb805f145f927602562710215` и Y в hex представлении `2840bb1aa09b7fac580f892d93b572b4`. Что соответствует публичному ключу `GLS5hDwvV1PPUTmehSmZecaxo1ameBpCMNVmYHKK2bL1ppLGRvh85`. +* **operation\_type** — тип операции представляет собой целочисленное значение номера операции по протоколу GOLOS записанное в 1 байт \(подробнее читайте в разделе [Операции и их типы](operations.md)\). Например, операция `transfer` в бинарном виде будет иметь запись в hex `02`. + +## Пример структуры транзакции + +Разберем пример транзакции в формате JSON и её представление в бинарном виде: + +```javascript +{"ref_block_num":9023,"ref_block_prefix":1971875185,"expiration":"2019-02-07T06:19:23","operations":[["transfer",{"from":"test1","to":"test2","amount":"1.002 GOLOS","memo":"<3"}]],"extensions":[]} +``` + +* **ref\_block\_num** — ссылка на номер блока после побитового «и» с hex `ffff` \(например, число 9023 в hex представлении `233F`, согласно представлению integer должно быть перевернуто, получаем `3F23`\); +* **ref\_block\_prefix** — 4 байта \(5, 6, 7, 8\) от бинарного состояния идентификатора блока в десятичном формате, которое можно получить API запросом `get_block_header` с номером следующего блока \(9024\) к плагину database\_api. Ответ будет содержать поле `previous` с идентификатором `0000233F716D887523BB63AD3E6107C96EDCFD8A` искомого блока. Берем `716D8875` для бинарного представления, переворачиваем байты — `75886D71` и переводим в десятичный формат для JSON: `1971875185`. +* **expiration** — unixtime экспирации транзакции. `2019-02-07T06:19:23` в unixtime будет `1549520363` \(hex значение `5C5BCDEB`\), который в бинарном значении будет перевернут и представлять собой hex: `EBCD5B5C`. +* **operations** — массив операций \(так как в массиве один элемент, hex: `01`\); + * **transfer** — операция перевода токенов \(по нумерации операции в протоколе hex: `02`\); + * **from** — логин аккаунта отправителя \(длина строки `test1` и hex представление: `057465737431`\); + * **to** — логин аккаунта получателя \(длина строки `test2` и hex представление: `057465737432`\); + * **amount** — передаваемое количество токенов GOLOS \(`1.002 GOLOS` в hex: `EA030000000000000356495A00000000`\); + * **memo** — заметка для получателя \(длина строки `<3` и hex представление: `023C33`\); +* **extensions** — массив служебных расширений транзакции \(так как не используется и не имеет элементов, то имеет представление `00`\). + +Итоговое бинарное представление данных транзакции в hex: `3F23716D8875EBCD5B5C0102057465737431057465737432EA030000000000000356495A00000000023C3300`; + +Чтобы отправить транзакцию в блокчейн, необходимо дополнить данное представление **chain\_id** в начале и подписать приватным ключом. Полученную подпись необходимо добавить в JSON поле массив `signatures`, например: + +```javascript +{"ref_block_num":9023,"ref_block_prefix":1971875185,"expiration":"2019-02-07T06:19:23","operations":[["transfer",{"from":"test1","to":"test2","amount":"1.002 GOLOS","memo":"<3"}]],"extensions":[],"signatures":["1f500f2a5d721e45c53e76fca786d690c7c0556f1923aa07c944e26614b50481d353e88f82e731be74c18e3fb8d117dc992a475991974b6e1364a66f5ccb618f83"]} +``` + +И передать этот JSON через API запрос `broadcast_transaction` плагину `network_broadcast_api`. + +## Получение ref\_block\_num и ref\_block\_prefix для формирования транзакции + +Нода блокчейна хранит идентификаторы последних 65537 блоков \(подробнее читайте [про концепцию TaPoS](state.md)\). Обычно разработчики ссылаются на один из последних блоков, обычно, выполняя очередь действий: + +* Получают данные о состоянии системы через API запрос `get_dynamic_global_properties` к плагину `database_api`; +* Используя значение поля `head_block_number` минус 3 блока устанавливают для какого блока будут формировать ref\_block\_num и запрашивать его идентификатор; +* Получают идентификатор используемого блока, выполняя API запрос `get_block_header` к плагину `database_api`, запрашивая искомый блок плюс один блок \(так как заголовок каждого блока содержит ссылку на идентификатор прошлого блока, искомый идентификатор находится в следующем\); +* Из идентификатора формируют ref\_block\_prefix. + +Большинство библиотек которые содержат абстракции для упрощения вызовов и трансляции транзакции в блокчейн делают это самостоятельно. + +Пример получения `ref_block_num` и `ref_block_prefix` на PHP в [исходном коде библиотеки php-graphene-node-client](https://github.com/t3ran13/php-graphene-node-client/blob/d3521ad5ae8866771adb0cb5ffd4ccadf6c892dc/Tools/Transaction.php#L64). + +## Порядок сериализации данных в операции + +Все операции и их параметры записаны в протоколе GOLOS и находятся [в файле steem\_operations.hpp](https://github.com/golos-blockchain/golos/blob/master/libraries/protocol/include/golos/protocol/steem_operations.hpp). + +Именно там можно изучить типы параметров и их требуемый порядок в операции. **Внимание!** Порядок параметров в структуре операции не совпадает с порядком параметров в самой операции. Рассмотрим пример на операции `escrow_transfer_operation`, структура операции \(часто перед операцией присутствует комментарий её описывающий\): + +```cpp +/** + * The purpose of this operation is to enable someone to send money contingently to + * another individual. The funds leave the *from* account and go into a temporary balance + * where they are held until *from* releases it to *to* or *to* refunds it to *from*. + * + * In the event of a dispute the *agent* can divide the funds between the to/from account. + * Disputes can be raised any time before or on the dispute deadline time, after the escrow + * has been approved by all parties. + * + * This operation only creates a proposed escrow transfer. Both the *agent* and *to* must + * agree to the terms of the arrangement by approving the escrow. + * + * The escrow agent is paid the fee on approval of all parties. It is up to the escrow agent + * to determine the fee. + * + * Escrow transactions are uniquely identified by 'from' and 'escrow_id', the 'escrow_id' is defined + * by the sender. + */ +struct escrow_transfer_operation : public base_operation { + account_name_type from; + account_name_type to; + account_name_type agent; + uint32_t escrow_id = 30; + + asset token_amount = asset(0, TOKEN_SYMBOL); + asset fee; + + time_point_sec ratification_deadline; + time_point_sec escrow_expiration; + + string json_metadata; + + void validate() const; + + void get_required_active_authorities(flat_set &a) const { + a.insert(from); + } +}; +``` + +Порядок параметров в операции задается уже в конце файла методом: + +```cpp +FC_REFLECT((graphene::protocol::escrow_transfer_operation), (from)(to)(token_amount)(escrow_id)(agent)(fee)(json_metadata)(ratification_deadline)(escrow_expiration)); +``` + +Кроме описания структуры операции есть еще обработка параметров в методе `validate`, найти который можно [в файле steem\_operations.cpp](https://github.com/golos-blockchain/golos/blob/master/libraries/protocol/steem_operations.cpp#L588): + +```cpp +void escrow_transfer_operation::validate() const { + validate_account_name(from); + validate_account_name(to); + validate_account_name(agent); + FC_ASSERT(fee.amount >= 0, "fee cannot be negative"); + FC_ASSERT(token_amount.amount >= + 0, "tokens amount cannot be negative"); + FC_ASSERT(from != agent && + to != agent, "agent must be a third party"); + FC_ASSERT(fee.symbol == TOKEN_SYMBOL, "fee must be TOKEN_SYMBOL"); + FC_ASSERT(token_amount.symbol == + TOKEN_SYMBOL, "amount must be TOKEN_SYMBOL"); + FC_ASSERT(ratification_deadline < + escrow_expiration, "ratification deadline must be before escrow expiration"); + validate_json_metadata(json_metadata); +} +``` + +Большинство операций проверяют наличие подписи соответствующих полномочий, например в структуре `escrow_transfer_operation` присутствует проверка подписи инициатора операции \(поле `from`\) активных полномочий в методе `get_required_active_authorities`. + diff --git a/developers/hardforks/README.md b/developers/hardforks/README.md new file mode 100644 index 00000000..3d1d29d0 --- /dev/null +++ b/developers/hardforks/README.md @@ -0,0 +1,11 @@ +# HardForks + +* [HF18: Руководство по установке](hf18_instruction.md) +* [HF18: Новые возможности](hf18_release.md) +* [HF18: Изменения в API](hf18_api_changes.md) +* [HF18: Изменения в cli\_wallet](hf18_cli_wallet_changes.md) +* [SF18.4: Новые возможности](sf18.4_release.md) +* [HF19: Новые возможности](hf19_release.md) +* [HF20: Устранение критического бага](hf20_release.md) +* [HF22: Новые возможности](hf22_release.md) + diff --git a/developers/hardforks/hf18_api_changes.md b/developers/hardforks/hf18_api_changes.md new file mode 100644 index 00000000..2ea5ed74 --- /dev/null +++ b/developers/hardforks/hf18_api_changes.md @@ -0,0 +1,545 @@ +# HF18: Изменения в API + +В версии HF•18 реализованы новые функциональные и технические возможности, предоставляющие пользователям более удобное взаимодействие с системой, повышенную защиту от злоупотребления голосованием, а также повышающие быстродействие системы за счет более оптимального перераспределения методов между плагинами API. + +* [Новые функциональные возможности в HF•18](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#перечень-новых-функциональных-возможностей-в-hf18) +* [Новые технические возможности в HF•18](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#перечень-новых-технических-возможностей-в-hf18) +* [Измененные и новые плагины API в HF•18](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#измененные-и-новые-плагины-в-hf18): + * [private\_message](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#изменения-в-плагине-privatemessage) + * [witness\_api](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-плагин-witnessapi) + * [account\_history](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#изменения-в-плагине-accounthistory) + * [operation\_history](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-плагин-operationhistory) + * [social\_network](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#изменения-в-плагине-socialnetwork) + * [tags](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-плагин-tags) + * [follow](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#изменения-в-плагине-follow) + * [database\_api](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#изменения-в-плагине-databaseapi) + +## Перечень новых функциональных возможностей в HF•18 + +* Блокирование различного вида злоупотреблений делегированием Силы Голоса. +* Обеспечение более гибкой ценовой политики на бирже за счет удаления старых данных и использования актуальных в определении курса и соотношения крипто-валют. +* Возможность пользователям вносить изменения в профиль с использованием ключа posting. +* Возможность пользователям предлагать транзакцию на подписание, состоящей из нескольких операций. +* Возможность пользователям вносить изменения в посты и комментарии независимо от срока их публикации и придавать им актуальность. + +## Перечень новых технических возможностей в HF•18 + +* Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными. +* Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования. +* Применение фильтрации тегов для настройки ленты в более удобной для пользователя форме. +* Возможность постраничного вывода личных сообщений на экран пользователя. + +## Измененные и новые плагины в HF•18 + +### Изменения в плагине private\_message + +В данный плагин добавлена возможность постраничного вывода списка личных сообщений. Изменены следующие методы \(шрифтом bold выделены добавленные аргументы\): + +* get\_inbox\(string to, time\_point newest **, uint limit, uint offset**\) +* get\_outbox\(string from, time\_point newest **, uint limit, uint offset**\) + +Метод `get_inbox` возвращает список входящих сообщений начиная с даты, заданной в newest. +Метод `get_outbox` возвращает список исходящих сообщений начиная с даты, заданной в newest. +`limit` — ограничивает количество сообщений \(максимально допустимое значение — 100\). +`offset` — номер сообщения, с которого выполняется операция \(начиная с №\). + +### Новый плагин witness\_api + +Плагин `witness_api` образован перемещением части методов с часто используемыми полями из плагина `database_api`. В него вошли следующие методы: + +* get\_current\_median\_history\_price +* get\_feed\_history +* get\_miner\_queue +* get\_witness\_schedule +* get\_witnesses +* get\_witness\_by\_account +* get\_witnesses\_by\_vote +* get\_witness\_count +* lookup\_witness\_accounts +* get\_active\_witnesses // <- из выдаваемого результата удалены пустые строки + +Все методы перемещены `в witness_api` без изменений во входных параметрах и выдаваемых результатах. Исключение составляет метод `get_active_witnesses`, у которого из выдаваемого результата удалены пустые строки. + +### Изменения в плагине account\_history + +Плагин `account_history` дополнен следующим методом: + +* get\_account\_history + +Метод перемещен из `database_api` без изменений во входных параметрах и выдаваемых результатах. + +### Новый плагин operation\_history + +Плагин `operation_history` образован перемещением методов из плагина `database_api`. Создание данного плагина позволяет отделить индексирование операций в блокчейне от истории пользователей. Пользователь может запрашивать и получать информацию об операциях в транзакциях \(блоках\) без ведения истории по аккаунтам. Это обеспечивает снижение нагрузки на сервер и на потребляемую память. + +Плагин `operation_history` дополнен следующими методами: + +* get\_ops\_in\_block +* get\_transaction + +Методы перемещены из `database_api` без изменений во входных параметрах и выдаваемых результатах. + +### Изменения в плагине social\_network + +Часть методов из плагина `social_network` была перемещена во вновь созданный плагин `tags`. Перенос методов осуществлен для того, чтобы создание дополнительных индексов и поиск информации по ним проводились в отдельном плагине. В плагине `social_network` оставлены методы, обеспечивающие обращение к корневым элементам, а методы, обрабатывающие теги, перемещены в новый плагин `tags`. + +Введен опциональный параметр `vote_limit` для задания максимального количества проголосовавших в ответе пользователю. По умолчанию его значение принимается равным 10000. Например, количество комментариев к посту может достигать 1000 и более, что затрудняет их просмотр и поиск интересующей информации. Пользователь может с использованием тэга сформировать запрос на получение комментариев, выбранных \(отсортированных\) в соответствии с указанными в тэге признаками. Параметр `vote_limit` позволяет уменьшить размер отправляемого от сервера ответа. При этом в ответе добавляется дополнительное поле `active_votes_count`, информирующее об общем количестве проголосовавших \(без необходимости получать полный список\). + +Изменена результирующая структура: + +```javascript +struct discussion { + "active_votes_count": uint, // <— Добавлено. Общее количество голосов для vote_limit + ... +} +``` + +Изменения внесены в методы, возвращающие структуру `discussion` и массив `discussion`. В этот перечень вошли следующие методы: + +* get\_replies\_by\_last\_update\(string start\_parent\_author, string start\_permlink, uint limit `[, uint vote_limit]`\) +* get\_content\(string account, string permlink `[, uint vote_limit]`\) +* get\_content\_replies\(string author, string permlink `[, uint vote_limit]`\) +* get\_all\_content\_replies\(string author, string permlink `[, uint vote_limit]`\) +* get\_content\(string author, string permlink `[, uint32_t limit]`\) +* get\_active\_votes\(string account, string permlink `[, uint vote_limit]`\) +* get\_account\_votes\(string account `[, uint from, uint vote_limit]`\) + +Фоном выделены параметры, которыми были дополнены методы. + +Следующие методы, дублирующие функции плагина `tag`, были удалены из плагина `social_network`: + +* get\_trending\_categories +* get\_active\_categories +* get\_recent\_categories +* get\_best\_categories + +### Новый плагин tags + +В плагин `tags` перемещены методы, выполняющие операции с тэгами \(например, получение наиболее популярных тэгов; получение списка языков; получение тэгов, используемых автором\). Это позволяет сэкономить размер файла разделяемой памяти тем пользователям, которые не используют данную функциональность. + +Методы, которые перемещены из `social_network` без изменений: + +* get\_trending\_tags\(string start, uint limit\) +* get\_languages\(\) +* get\_tags\_used\_by\_author\(string\) +* get\_discussions\_by\_payout\(query\) +* get\_discussions\_by\_trending\(query\) +* get\_discussions\_by\_created\(query\) +* get\_discussions\_by\_active\(query\) +* get\_discussions\_by\_cashout\(query\) +* get\_discussions\_by\_votes\(query\) +* get\_discussions\_by\_children\(query\) +* get\_discussions\_by\_hot\(query\) +* get\_discussions\_by\_feed\(query\) +* get\_discussions\_by\_blog\(query\) +* get\_discussions\_by\_comments\(query\) +* get\_discussions\_by\_promoted\(query\) + +В метод `get_discussions_by_author_before_date` добавлен новый параметр `vote_limit` \(шрифтом bold выделен добавленный параметр\): + +* get\_discussions\_by\_author\_before\_date\(string author, string start\_permlink, datetime before\_date, uint limit **\[, uint vote\_limit\]**\) + + ```javascript + struct discussion_query { + limit: uint, + select_tags: [string], + filter_tags: [string] + select_languages: [string], + filter_languages : [string], + truncate_body: uint, + vote_limit: uint, // <— Новый параметр, по умолчанию принимает значение 10000 + select_authors : [string], + start_author: string, + start_permlink: string, + parent_author: string, + parent_permlink: string + } + ``` + + Изменена результирующая структура метода: + + ```javascript + struct discussion { + “reputation”: uint, // <- Поле отсутствует, если выключен плагин follow + "active_votes_count": uint, // <- Добавлено. Общее количество голосов для vote_limit + ... + } + ``` + +### Изменения в плагине follow + +В плагине `follow` изменена структура метода `get_account_reputations` в соответствии со следующим представлением: + +* get\_account\_reputations\(array accounts\) + * Результат array + +### Изменения в плагине database\_api + +Плагин `database_api` дополнен новыми методами для выполнения новых операций. + +Новые методы: + +* [get\_proposed\_transaction](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-метод-getproposedtransaction) +* [get\_database\_info](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-метод-getdatabaseinfo) +* [get\_vesting\_delegations](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-метод-getvestingdelegations) +* [get\_expiring\_vesting\_delegations](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новый-метод-getexpiringvestingdelegations) + +Новые операции: + +* [изменение или возврат делегирования Силы Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-изменение-или-возврат-делегирования-силы-голоса) +* [создание аккаунта с делегированием Силы Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-создание-аккаунта-с-делегированием-силы-голоса) +* [изменение json\_metadata аккаунта](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-изменение-jsonmetadata--аккаунта) +* [предложение на транзакцию](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-предложение-на-транзакцию) +* [обновление предложенной транзакции](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-обновление-предложенной-транзакции) +* [удаление предложенной транзакции](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-удаление-предложенной-транзакции) +* [изменение параметров блокчейна](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-изменение-параметров-блокчейна) + +#### Неизменяемая часть database\_api + +Часть методов из `database_api` перемещена в плагины `witness_api`, `account_history`, `operationt_history` и `follow`. Сохраненными в `database_api` без изменений остались следующие методы: + +* get\_block\_header +* get\_block +* set\_block\_applied\_callback +* get\_config +* get\_dynamic\_global\_properties +* get\_chain\_properties +* get\_hardfork\_version +* get\_next\_scheduled\_hardfork +* get\_account\_count +* get\_owner\_history +* get\_recovery\_request +* get\_escrow +* get\_withdraw\_routes +* get\_account\_bandwidth +* get\_savings\_withdraw\_from +* get\_savings\_withdraw\_to +* get\_conversion\_requests +* get\_transaction\_hex +* get\_required\_signatures +* get\_potential\_signatures +* verify\_authority +* verify\_account\_authority +* lookup\_account\_names +* lookup\_accounts + +### Изменения в методах database\_api + +Поля `average_bandwidth` и `average_market_bandwidth` были удалены из плагина `database_api` как неиспользуемые. Заменяемые их в выполнении операций поля `new_average_bandwidth`, `new_average_market_bandwidth` были переименованы в первоначальные их имена `average_bandwidth` и `average_market_bandwidth` соответственно. + +Поле `lifetime_bandwidth` было удалено и заменено на вновь созданное одноименное поле `lifetime_bandwidth`, зависящее от новых значений, а также поле `lifetime_market_bandwidth` для использования в маркетинговых операциях. + +Из описания типа `bandwidth_type`, используемого в вызове метода `get_account_bandwidth`, удалены поля `old_forum` и `old_market`. + +В поле `lifetime_bandwidth` хранится суммарное значение `bandwidth`, используемое аккаунтом за все время его работы. В поле `average_bandwidth` хранится среднее значение `bandwidth`, по которому определяется порог чрезмерной активности аккаунта. + +#### Внесены изменения в выдаваемый результат следующего метода: + +* get\_accounts + + ```javascript + struct account { + reputation, // <- Поле отсутствует, если выключен плагин follow + transfer_history, // <- Удалено + market_history, // <- Удалено + post_history, // <- Удалено + vote_history, // <- Удалено + other_history, // <- Удалено + tags_usage, // <- Удалено + guest_bloggers, // <- Удалено + blog_category, // <- Удалено + ... + } + ``` + + Удаление полей из структуры account обусловлено тем, что ранее эти поля никогда не использовались. + +#### Новый метод get\_proposed\_transaction + +Этот метод обрабатывает запрос на выдачу списка предложенных для подписания транзакций, поступивший от какого-либо аккаунта. Метод возвращает массив транзакций, в который входят транзакции, созданные непосредственно данным аккаунтом, а также транзакции, которые ему необходимо подписать. + +* get\_proposed\_transaction\(account: string\) + + ```javascript + struct proposal_object { + author: string, + title: string, + memo: string, + expiration_time: datetime, + review_period_time: datetime, // может отсутствовать + proposed_operations: [ operation ], + required_active_approvals: [ string ], + available_active_approvals: [ string ], + required_owner_approvals: [ string ], + available_owner_approvals: [ string ], + required_posting_approvals: [ string ], + available_posting_approvals: [ string ], + available_key_approvals: [ string ] + }; + ``` + +#### Новый метод get\_database\_info + +Этот метод возвращает информацию о текущем статусе разделяемой памяти, в том числе: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти \(название индекса, количество записей\). + +* get\_database\_info\(\) + + ```text + struct database_info { + total_size: uint, + free_size: uint, + reserved_size: uint, + used_size: uint + + index_list: [ + { + name: string, + record_count: uint + }, + ] + }; + ``` + +#### Новый метод get\_vesting\_delegations + +Этот метод возвращает массив значений с описанием операции делегирования \(далее — блок делегирования\) аккаунта \(делегированный другим аккаунтам или же полученный от других аккаунтов\). + +* get\_vesting\_delegations + + ```text + get_vesting_delegations( + string account, + string from, uint32_t limit = 100, + delegations type = delegated + ) + ``` + + `account` — аккаунт, по запросу от которого выдается блок делегирования. Отправитель\*/получатель определяется аргументом `type`. + + `from` — начальный аккаунт, парный в операции делегирования. Получатель/отправитель - задается аргументом `type` \(для пагинации\). + + `limit` — количество возвращаемых элементов \(для пагинации\). По умолчанию принимается равным 100. Максимальное значение равно 1000. + + `type` — тип запрашиваемого блока делегирования: "delegated" \(делегированный\), "received" \(полученный\). По умолчанию принимает значение "delegated". + +Пример возвращаемого блока делегирования: `массив vesting_delegation_api_object [{id: 0, delegator: "zzz", delegatee: "zxcat", vesting_shares: "90.000000 GESTS", min_delegation_time: "2018-04-25T21:48:15"}]`. + +#### Новый метод get\_expiring\_vesting\_delegations + +Этот метод используется для получения списка возвращаемых \(отозванных и «замороженных»\) делегированных средств аккаунта. Метод возвращает результат в виде массива значений с описанием операции возврата делегированных средств \(далее — блок отозванного делегирования\) + +* get\_expiring\_vesting\_delegations + + ```text + get_expiring_vesting_delegations( + string account, + time_point_sec from, + uint32_t limit = 100) + ``` + + `account` — аккаунт, возвращающий делегированные средства. + + `from` — начальное время возврата делегированных средств \(для пагинации\). + + `limit` — количество возвращаемых элементов \(для пагинации\). По умолчанию принимается равным 100. Максимальное значение равно 1000. + +Пример возвращаемого модулем блока отозванного делегирования: `массив vesting_delegation_expiration_api_object, [{id: 0, delegator: "zxcat", vesting_shares: "123.000000 GESTS", expiration: "2018-05-25T11:18:45"}]`. + +#### Новая операция: изменение или возврат делегирования Силы Голоса + +Эта операция позволяет изменять количество делегированного, а также осуществлять возврат делегированного в полном объеме. Для выполнения этих операций необходима подпись ключом `active`. Операции выполняются с использованием следующей процедуры: + +```javascript +delegate_vesting_shares +{ + delegator: string, // делегирующий аккаунт + delegatee: string, // аккаунт-получатель + vesting_shares: asset // новое количество делегируемой Силы Голоса +} +``` + +Для выполнения этой опирации требуется подпись ключом `active`. + +Для изменения количества делегирования Силы Голоса в поле `vesting_shares` следует задать новое значение. Для полного возврата делегированной части Силы Голоса в поле `vesting_shares` следует задать значение вида “0.000000 GESTS”. При изменении значения в сторону уменьшения делегированная Сила Голоса сразу снимется с аккаунта-получателя и переходит в «замороженное» состояние сроком на семь дней \(в случае создания аккаунта с делегированием этот период определяется параметром `create_account_delegation_time`\). + +Минимальное количество Силы Голоса, необходимое для делегирования, определяется по результатам голосования делегатов. + +#### Новая операция: создание аккаунта с делегированием Силы Голоса + +Операция выполняется с использованием следующей процедуры: + +```javascript +account_create_with_delegation +{ + fee: asset, // комиссия, в GOLOS + delegation: asset, // делегируемая доля, в GESTS + creator: string, + new_account_name: string, + owner: authority, + active: authority, + posting, authority, + memo_key: string, + json_metadata: string, + extensions: extensions_type // Не используется, исходное значение — пусто +} +``` + +Для выполнения этой опирации требуется подпись ключом `active`. + +Для создания аккаунта с делегированием необходимо, чтобы выполнялись следующие два условия: + +```text + 1. fee ≥ create_account_min_golos_fee + 2. (delegation) ≥ (create_account_min_delegation) +``` + +где +`fee` — размер комиссионных отчислений; +`create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием; +`delegation` — делегированная часть Силы Голоса; +`create_account_min_delegation` — минимальное количество Силы Голоса, необходимое для создания аккаунта с делегированием. + +При создании аккаунта с делегированием бо́льшую часть комиссии можно оплатить с «заморозкой» на период, определяемый параметром `create_account_delegation_time`. Делегированная Сила Голоса может быть отозвана в любой момент \(например, в случае злоупотребления полученной делегированной частью новым аккаунтом\). При этом делегированная Сила Голоса будет снята с нового аккаунта сразу, а на делегирующий аккаунт будет возвращена по истечении срока «заморозки». Время «заморозки» является параметром, определяемым по результатам голосования. Его значение выбирается по медиане из списка всех значений, полученных от делегатов с помощью операции `chain_properties_update_operation`. + +#### Новая операция: изменение json\_metadata аккаунта + +Пользователю предоставляется возможность изменять метаданные своего профиля без использования ключа `active`. Поля профиля хранятся в `json_metadata`. Для изменения любого поля профиля требовалась подпись только ключом `active`, что не всегда было приемлемым. + +Было принято решение разделить поля на две группы. В состав первой группы вошли поля с наиболее значимыми данными профиля \(ключи: `posting`, `active`, `owner` и `memo`\), а в другую — с менее значимыми, но часто используемыми \(аватар, пол, местонахождение и пр.\). Процедура изменения полей первой группы сохранена и требует подписи только ключом `active`. В версии HF•18 вносить изменения в поля второй группы стало возможным с использованием ключа `posting` для подписи. + +Операция выполняется с использованием следующей процедуры: + +```javascript +account_metadata +{ + account: string, // изменяемый аккаунт + json_metadata: string // новое значение json_metadata +} +``` + +Для выполнения этой опирации требуется подпись ключом `posting`. + +#### Новая операция: предложение на транзакцию + +Пользователю предоставляется возможность предлагать транзакцию на блокчейне с несколькими отдельными операциями, требующих одобрения от пользователей на их выполнение. + +Операция выполняется с использованием следующей процедуры: + +```javascript +proposal_create_operation +{ + author: string, // автор предлагаемой транзакции + title: string, // заголовок предложенной транзакции. + memo: string, // примечание + proposed_operations: [ operation ], // список операций в предлагаемой транзакции + expiration_time: datetime, // максимальное время, отведенное на транзакцию + review_period_time: datetime, // время на принятие решения участников транзакции. Опциональный параметр + extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто +} +``` + +Для выполнения этой опирации требуется подпись ключом `active`. + +Создаваемая транзакция должна быть уникальной по сочетанию полей author-title. По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления. + +В поле `proposed_operations` задается список операций для выполнения их в транзакции \(например, `{["delete_comment_operation":{"autor":"jim", "permlink":"hello"}}]`\). На каждую операцию из этого списка должна быть получена подпись автора, которому она предназначена. Право проставления подписи на выполнение любой операции из списка имеет также каждый из участников транзакции. Например, операция публикации поста назначается одному автору, а операция перечисления вознаграждения за нее — другому. В случае несогласия другого автора с выполнением второй операции он может удалить подпись на выполнение первой операции предложенной транзакции. + +В поле `review_period_time` проставляется время, отводимое на принятие решений участников транзакции. Этот период должен быть меньше максимального времени из поля `expiration_time`, которое отводится на транзакцию. По истечении этого периода подписи в транзакции могут быть только удаляться. + +Если параметр `review_period_time` не задан, то транзакция будет сразу выполняться после сбора всех необходимых подписей. + +#### Новая операция: обновление предложенной транзакции + +Автору, а также участникам транзакции, предоставляется возможность менять свое решение и обновлять подписи до истечения времени, отводимого на транзакцию. + +Если транзакция не получает одобрения на выполнение какой-либо из операций, эта транзакция не отменяется и ее актуальность будет сохраняться до отведенного на ее выполнение времени. После получения всех необходимых подписей транзакция сразу будет выполняться и все последующие обновления будут считаться недействительными. + +Операция выполняется с использованием следующей процедуры: + +```javascript +proposal_update_operation +{ + author: string, // автор предложенной транзакции + title: string, // заголовок предложенной транзакции. + active_approvals_to_add: [string], // список аккаунтов для подписи. Транзакция должна быть + // подписана ключом active + active_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной + // транзакции. Транзакция должна быть подписана ключом active + owner_approvals_to_add: [string], // список аккаунтов для подписи на операции в предложенной + // транзакции. Транзакция должна быть подписана ключом owner + owner_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной + //транзакции. Транзакция должна быть подписана ключом owner + posting_approvals_to_add: [string], // список аккаунтов для подписи на операции в предложенной + // транзакции. Транзакция должна быть подписана ключом posting + posting_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной + // транзакцию. Транзакция должна быть подписана ключом posting + key_approvals_to_add: [string], // список ключей public для проставления подписей в предложенной + // транзакции + key_approvals_to_remove: [string], // список ключей public для удаления подписей из предложенной + // транзакции + extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто +} +``` + +Подпись зависит от списка операций, предлагаемых на подписание. + +По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления. Поля, в которые записывается псевдоним для подписи транзакции, выбираются в зависимости от типа операций в предложенной транзакции. + +#### Новая операция: удаление предложенной транзакции + +В случае отказа кого-либо из участников транзакции в выполнении операции он может сформировать запрос на удаление предложенной транзакции. Идентификация транзакции осуществляется по паре author-title. + +Операция выполняется с использованием следующей процедуры: + +```javascript +proposal_delete_operation +{ + author: string, // автор предложенной транзакции + title: string, // заголовок предложенной транзакции + requester: string, // псевдоним запросившего удаление транзакции или автор предложенной транзакции + extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто +} +``` + +Для выполнения этой опирации требуется подпись ключом `active`. + +Удалить предложенную транзакцию может как ее автор, так и любой участник, от которого требуется подпись. Если хотя бы один из участников запрашивает удаление транзакции, то, независимо от подписей остальных участников, данная транзакция будет удалена. + +#### Новая операция: изменение параметров блокчейна + +Предыдущие версии блокчейна обеспечивают поддержку операции `witness_update`, которая позволяет делегатам Голоса изменять по результатам голосования значения следующих параметров: + +* `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; +* `maximum_block_size` — максимальный размер блока блокчейна; +* `sbd_interest_rate` — процент, начисляемый на SBD. + +Ввиду того, что `witness_update` не позволяет расширить перечень параметров, значения которых определяются голосованием, в версии HF•18 реализована новая операция `chain_properties_update`, которая поддерживает более расширенный перечень таких параметров и позволяет наращивать его в будущем. В версии HF•18 операция `chain_properties_update` поддерживает следующий перечень параметров, значения которых определяются голосованием: + +* `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; +* `maximum_block_size` — максимальный размер блока блокчейна; +* `sbd_interest_rate` — процент, начисляемый на SBD; +* `create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием \(по умолчанию принимает значение "1.000 GOLOS", см. операцию [account\_create\_with\_delegation](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)\); +* `create_account_min_delegation` — устанавливает минимально возможное количество Силы Голоса при создании аккаунта с делегированием \(по умолчанию принимает значение "5.000 GOLOS", см. операцию [account\_create\_with\_delegation](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)\); +* `create_account_delegation_time` — устанавливает минимально возможное время \(в секундах\) «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием \(по умолчанию принимает значение за период в 30 дней, см. операцию [account\_create\_with\_delegation](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)\); +* `min_delegation` — устанавливает минимально возможное количество Силы Голоса для делегирования на аккаунт \(по умолчанию принимает значение "10.000 GOLOS", см. операцию [delegate\_vesting\_shares](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/new_hardfork-hf18.md#новая-операция-изменение-или-возврат-делегирования-силы-голоса)\). + +Операция выполняется с использованием следующей процедуры: + +```javascript +chain_properties_update_operation +{ + owner: string, // автор изменения + props: { + account_creation_fee: asset, + maximum_block_size: uint, + sbd_interest_rate: uint, + create_account_min_golos_fee: uint, + create_account_min_delegation: uint, + create_account_delegation_time: uint, + min_delegation: uint + } +} +``` + +Для выполнения этой опирации требуется подпись ключом `active`. + diff --git a/golosd/HardFork/HF18_cli_wallet_changes-rus.md b/developers/hardforks/hf18_cli_wallet_changes.md similarity index 71% rename from golosd/HardFork/HF18_cli_wallet_changes-rus.md rename to developers/hardforks/hf18_cli_wallet_changes.md index 389efa66..5eeefe24 100644 --- a/golosd/HardFork/HF18_cli_wallet_changes-rus.md +++ b/developers/hardforks/hf18_cli_wallet_changes.md @@ -1,73 +1,71 @@ -# HF·18: изменения в cli_wallet -***Эта страница содержит информацию об изменениях в клиентском приложении cli_wallet, предоставляющих возможность создания транзакции произвольного вида в ручном режиме.*** - +# HF18: Изменения в cli\_wallet +_**Эта страница содержит информацию об изменениях в клиентском приложении cli\_wallet, предоставляющих возможность создания транзакции произвольного вида в ручном режиме.**_ -*** -## Общее -Клиентское приложение `cli_wallet` (виртуальный кошелек) поставляется вместе с программой-эмулятором демоном (от англ. daemon). Данное приложение является одним из основных программных устройств, широко используемым участниками биржевых торгов. Приложение обеспечивает выполнение балансовых операций со счетами виртуальных кошельков клиентов, а также создание постов, голосование за посты и пр. +Клиентское приложение `cli_wallet` \(виртуальный кошелек\) поставляется вместе с программой-эмулятором демоном \(от англ. daemon\). Данное приложение является одним из основных программных устройств, широко используемым участниками биржевых торгов. Приложение обеспечивает выполнение балансовых операций со счетами виртуальных кошельков клиентов, а также создание постов, голосование за посты и пр. +Целью доработок `cli_wallet` в HF·18 являлось создание удобного программного инструмента, обеспечивающего создание транзакции произвольного вида в ручном режиме. -Целью доработок `cli_wallet` в HF·18 являлось создание удобного программного инструмента, обеспечивающего создание транзакции произвольного вида в ручном режиме. - - -В предыдущих версиях блокчейна создание транзакции выполнялось только в автоматическом режиме с подключением JS-, Python- и GO-библиотек. Главными достоинствами автоматического создания транзакции являлись быстрота и избавление пользователей от трудоемких операций. Недостатком такой реализации являлось наличие фиксированного набора команд, ограничивающего пользователей в возможности манипулирования параметрами. - - -В версии HF·18 создан конструктор, обеспечивающий формирование транзакций с произвольным набором выполняемых операций. С помощью конструктора пользователь может задать перечень операций с их описанием. Пользователь также может добавлять, изменять и редактировать операции в создаваемой транзакции. Каждая отдельная операция выполняется отдельным методом, входящим в состав методов `cli_wallet`. +В предыдущих версиях блокчейна создание транзакции выполнялось только в автоматическом режиме с подключением JS-, Python- и GO-библиотек. Главными достоинствами автоматического создания транзакции являлись быстрота и избавление пользователей от трудоемких операций. Недостатком такой реализации являлось наличие фиксированного набора команд, ограничивающего пользователей в возможности манипулирования параметрами. +В версии HF·18 создан конструктор, обеспечивающий формирование транзакций с произвольным набором выполняемых операций. С помощью конструктора пользователь может задать перечень операций с их описанием. Пользователь также может добавлять, изменять и редактировать операции в создаваемой транзакции. Каждая отдельная операция выполняется отдельным методом, входящим в состав методов `cli_wallet`. Доработка заключается в добавлении необходимых методов в `cli_wallet` и выполнена в соответствии с требованиями поставленной задачи №542. -## Новые методы в cli_wallet для расширения возможностей API -Клиентское приложение `cli_wallet` дополнено новыми методами, реализующими новый программный компонент — конструктор транзакций. В отличие от предыдущих версий блокчейна пользователь с помощью конструктора может формировать транзакцию произвольного вида по своему усмотрению. Кроме этого, конструктор позволяет создавать несколько транзакций для одновременного выполнения операций и идентифицировать каждую отдельную транзакцию. Доработка не вносит изменения в работу API, а только расширяет его возможности. Только два метода — `create_account` и `create_account_with_keys`, входящие в прежний состав методов приложения `cli_wallet` были незначительно модифицированы. -### Метод create_account_delegated -Этот метод позволяет создавать публичные ключи `owner`, `active`, `posting` и `memo` для нового аккаунта. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька создателя аккаунта (автора) снимается определенная сумма `fee`. Величина этих отчислений не может быть меньше значения параметра `account_creation_fee`, устанавливаемого по результатам голосования делегатов. Параметр `fee` показывает изначальный базовый баланс кошелька аккаунта, необходимый для его существования в системе. С баланса кошелька создателя аккаунта снимается криптовалюта в виде Голоса (Golos) и зачисляется на баланс кошелька нового аккаунта в виде Силы Голоса (VESTS). Размер комиссионных отчислений, а также другую информацию от блокчейна, можно найти в выдаче команды `wallet`, имеющей вид `“account_creation_fee”:”X.000 GOLOS”`. +## Новые методы в cli\_wallet для расширения возможностей API +Клиентское приложение `cli_wallet` дополнено новыми методами, реализующими новый программный компонент — конструктор транзакций. В отличие от предыдущих версий блокчейна пользователь с помощью конструктора может формировать транзакцию произвольного вида по своему усмотрению. Кроме этого, конструктор позволяет создавать несколько транзакций для одновременного выполнения операций и идентифицировать каждую отдельную транзакцию. Доработка не вносит изменения в работу API, а только расширяет его возможности. Только два метода — `create_account` и `create_account_with_keys`, входящие в прежний состав методов приложения `cli_wallet` были незначительно модифицированы. -Затрачиваемое на создание аккаунта количество криптовалюты не может быть возвращено обратно в кошелек создателя. +### Метод create\_account\_delegated +Этот метод позволяет создавать публичные ключи `owner`, `active`, `posting` и `memo` для нового аккаунта. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька создателя аккаунта \(автора\) снимается определенная сумма `fee`. Величина этих отчислений не может быть меньше значения параметра `account_creation_fee`, устанавливаемого по результатам голосования делегатов. Параметр `fee` показывает изначальный базовый баланс кошелька аккаунта, необходимый для его существования в системе. С баланса кошелька создателя аккаунта снимается криптовалюта в виде Голоса \(Golos\) и зачисляется на баланс кошелька нового аккаунта в виде Силы Голоса \(VESTS\). Размер комиссионных отчислений, а также другую информацию от блокчейна, можно найти в выдаче команды `wallet`, имеющей вид `“account_creation_fee”:”X.000 GOLOS”`. -Создатель аккаунта может делегировать часть Силы Голоса на новый аккаунт. В этом случае делегированная часть будет также списана с баланса Силы Голоса его кошелька и зачислена на баланс Силы Голоса нового аккаунта. Делегированная Сила Голоса может быть возвращена в кошелек создателя через определенный период, длительность которого определяется голосованием. +Затрачиваемое на создание аккаунта количество криптовалюты не может быть возвращено обратно в кошелек создателя. +Создатель аккаунта может делегировать часть Силы Голоса на новый аккаунт. В этом случае делегированная часть будет также списана с баланса Силы Голоса его кошелька и зачислена на баланс Силы Голоса нового аккаунта. Делегированная Сила Голоса может быть возвращена в кошелек создателя через определенный период, длительность которого определяется голосованием. Метод имеет следующий вид: -``` + +```text annotated_signed_transaction create_account_delegated( - string creator, - asset steem_fee, - asset delegated_vests, - string new_account_name, - string json_meta, - bool broadcast + string creator, + asset steem_fee, + asset delegated_vests, + string new_account_name, + string json_meta, + bool broadcast ); ``` + где: -`creator` — пользователь, который создает новый аккаунт; +`creator` — пользователь, который создает новый аккаунт; `steem_fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть возвращена обратно в кошелек создателя аккаунта; `delegated_vests` — сумма комиссионных отчислений в криптовалюте Сила Голоса, снимаемая с баланса кошелька пользователя за операцию делегирования и зачисляемая на баланс кошелька нового аккаунта в криптовалюте Сила Голоса. Эта сумма может быть возвращена обратно в кошелек создателя аккаунта по истечении определенного периода, устанавливаемого голосованием делегатов; `new_account_name` — имя нового аккаунта; `json_meta` — метаданные профиля нового аккаунта поля `json_metadata`; `broadcast` — ‘true’, если транзакция пересылается на демон; ‘false’, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. -### Метод create_account_with_keys_delegated -Этот метод используется для создания новых аккаунтов через вызов операции `account_create`. В отличие от метода `create_account`, который обеспечивает генерацию ключей для нового аккаунта автоматически, метод `create_account_with_keys_delegated` требует явного задания ключей для нового аккаунта. Создатель аккаунта обязан иметь соответствующий ключ. +### Метод create\_account\_with\_keys\_delegated + +Этот метод используется для создания новых аккаунтов через вызов операции `account_create`. В отличие от метода `create_account`, который обеспечивает генерацию ключей для нового аккаунта автоматически, метод `create_account_with_keys_delegated` требует явного задания ключей для нового аккаунта. Создатель аккаунта обязан иметь соответствующий ключ. Созданный аккаунт не может контролироваться его кошельком. С баланса кошелька создателя снимается сумма комиссионных отчислений в криптовалюте Голос и зачисляется на баланс кошелька нового аккаунта в криптовалюте Сила Голоса. Метод имеет следующий вид: -``` + +```text annotated_signed_transaction create_account_with_keys_delegated( - string creator, - asset steem_fee, - asset delegated_vests, - string newname, - string json_meta, - public_key_type owner, - public_key_type active, - public_key_type posting, - public_key_type memo, - bool broadcast + string creator, + asset steem_fee, + asset delegated_vests, + string newname, + string json_meta, + public_key_type owner, + public_key_type active, + public_key_type posting, + public_key_type memo, + bool broadcast ) const; ``` + где: `creator` — пользователь, который создает новый аккаунт; `steem_fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть возвращена обратно в кошелек создателя аккаунта; @@ -79,108 +77,142 @@ annotated_signed_transaction create_account_with_keys_delegated( `posting` — значение публичного ключа `posting` нового аккаунта; `memo` — значение публичного ключа `memo` нового аккаунта; `broadcast` — ‘true’, если транзакция пересылается на демон. -### Метод delegate_vesting_shares + +### Метод delegate\_vesting\_shares + Метод обеспечивает делегирование части криптовалюты Силы Голоса с одного аккаунта на другой. Метод имеет следующий вид: -``` + +```text annotated_signed_transaction delegate_vesting_shares( - string delegator, - string delegatee, - asset vesting_shares, - bool broadcast + string delegator, + string delegatee, + asset vesting_shares, + bool broadcast ); ``` + где: `delegator` — имя аккаунта, который делегирует Силу Голоса; `delegatee` — имя аккаунта, на который делегируется Сила Голоса; `vesting_shares` — сумма делегирования; `broadcast` — ‘true’, если транзакция пересылается на демон. -### Метод begin_builder_transaction + +### Метод begin\_builder\_transaction + Метод вызывает операцию создания конструктора транзакций и возвращает уникальный номер созданного конструктора. Начальное значение уникального номера принимается равным «0» и увеличивается на единицу с каждым вызовом метода. Метод имеет следующий вид: -``` + +```text transaction_handle_type begin_builder_transaction(); ``` -### Метод get_prototype_operation -Метод используется для получения и заполнения шаблона для операции, создаваемой с помощью другого метода `add_operation_to_builder_transaction`. Метод возвращает неинициализированный объект в виде заданной последовательности операций. Созданный объект может быть дополнен любой операцией с помощью вызова `add_operation_to_builder_transaction()`. +### Метод get\_prototype\_operation + +Метод используется для получения и заполнения шаблона для операции, создаваемой с помощью другого метода `add_operation_to_builder_transaction`. Метод возвращает неинициализированный объект в виде заданной последовательности операций. Созданный объект может быть дополнен любой операцией с помощью вызова `add_operation_to_builder_transaction()`. Предварительно необходимо определить json-формат данных операции, чтобы получить соответствующий шаблон. Метод имеет следующий вид: -``` + +```text operation get_prototype_operation( - string operation_type + string operation_type ); ``` + где: `operation_type` — тип операции. Операция должна быть определена в файле `steem/chain/operations.hpp`. -### Метод add_operation_to_builder_transaction + +### Метод add\_operation\_to\_builder\_transaction + Этот метод используется для добавления операции в список операций конструктора транзакций. Метод имеет следующий вид: -``` + +```text void add_operation_to_builder_transaction( - transaction_handle_type handle, - const operation& op + transaction_handle_type handle, + const operation& op ); ``` + где: `handle` — уникальный номер конструктора; `op` — добавляемая операция. -### Метод add_operation_copy_to_builder_transaction -Метод обеспечивает копирование операции между конструкторами транзакций. Каждый их конструкторов идентифицируется значением параметра `handler`, возвращаемого методом `begin_builder_transaction()`. Метод имеет следующий вид: -``` + +### Метод add\_operation\_copy\_to\_builder\_transaction + +Метод обеспечивает копирование операции между конструкторами транзакций. Каждый их конструкторов идентифицируется значением параметра `handler`, возвращаемого методом `begin_builder_transaction()`. Метод имеет следующий вид: + +```text void add_operation_copy_to_builder_transaction( - transaction_handle_type src_handle, - transaction_handle_type dst_handle, - uint32_t op_index + transaction_handle_type src_handle, + transaction_handle_type dst_handle, + uint32_t op_index ); ``` + где: `src_handle` — уникальный номер конструктора, из которого копируется операция; `dst_handle` — уникальный номер конструктора, на который копируется операция; `op_index` — номер копируемой операции. -### Метод replace_operation_in_builder_transaction + +### Метод replace\_operation\_in\_builder\_transaction + Метод обеспечивает замену операции в конструкторе транзакций под номером `op_index` на операцию `op`. Метод имеет следующий вид: -``` + +```text void replace_operation_in_builder_transaction( - transaction_handle_type handle, - unsigned op_index, - const operation& op + transaction_handle_type handle, + unsigned op_index, + const operation& op ); ``` + где: `handle` — уникальный номер конструктора; `op_index` — номер операции в конструкторе транзакций, которую необходимо заменить; `op` — заменяющая операция. -### Метод preview_builder_transaction + +### Метод preview\_builder\_transaction + Метод обеспечивает поиск и получение конструктора транзакций по заданному идентификационному номеру из списка конструкторов. Метод имеет следующий вид: -``` + +```text transaction preview_builder_transaction( - transaction_handle_type handle + transaction_handle_type handle ); ``` + где: `handle` — уникальный номер получаемого конструктора. -### Метод sign_builder_transaction + +### Метод sign\_builder\_transaction + Метод используется для подписания всех транзакций в конструкторе транзакций. Метод имеет следующий вид: -``` + +```text signed_transaction sign_builder_transaction( - transaction_handle_type handle, - bool broadcast + transaction_handle_type handle, + bool broadcast ); ``` + где: `handle` — уникальный номер конструктора транзакций; `broadcast` — ‘true’, если подписанные транзакции необходимо переслать на демон. -### Метод propose_builder_transaction + +### Метод propose\_builder\_transaction + Метод используется для создания конструктора предлагаемых транзакций. Метод имеет следующий вид: -``` + +```text signed_transaction propose_builder_transaction( - transaction_handle_type handle, - std::string author, - std::string title, - std::string memo, - time_point_sec expiration = time_point::now() + fc::minutes(1), - time_point_sec review_period_time = time_point::min(), - bool broadcast + transaction_handle_type handle, + std::string author, + std::string title, + std::string memo, + time_point_sec expiration = time_point::now() + fc::minutes(1), + time_point_sec review_period_time = time_point::min(), + bool broadcast ); ``` + где: `handle` — уникальный номер создаваемого конструктора транзакций; `author` — автор предлагаемой транзакции; @@ -189,145 +221,167 @@ signed_transaction propose_builder_transaction( `expiration` — время, по истечении которого прекращается подписание транзакции; `review_period_time` — период, выделенный для подписания транзакции; `broadcast` — ‘true’, если транзакция пересылается на демон. -### Метод remove_builder_transaction + +### Метод remove\_builder\_transaction + Метод обеспечивает удаление конструктора транзакций по заданному идентификационному номеру. Метод имеет следующий вид: -``` + +```text void remove_builder_transaction( - transaction_handle_type handle + transaction_handle_type handle ); ``` + где: `handle` — уникальный номер конструктора транзакций. Этот номер уменьшается на единицу после каждого вызова метода. -### Метод approve_proposal -Метод обеспечивает проверку и сбор подписей на предложенную транзакцию. Метод возвращает подписанную версию транзакции. +### Метод approve\_proposal + +Метод обеспечивает проверку и сбор подписей на предложенную транзакцию. Метод возвращает подписанную версию транзакции. + +Поскольку для подписи транзакции используются три типа ключей \(`owner`, `active` и `posting`\), подсчет подписей каждого типа ключей выполняется отдельно. Для этого в методе находится специальный структурный параметр `delta`, в котором содержатся актуальные данные результатов голосования по каждому типу ключей. Структура параметра имеет следующий вид: -Поскольку для подписи транзакции используются три типа ключей (`owner`, `active` и `posting`), подсчет подписей каждого типа ключей выполняется отдельно. Для этого в методе находится специальный структурный параметр `delta`, в котором содержатся актуальные данные результатов голосования по каждому типу ключей. Структура параметра имеет следующий вид: ```javascript struct approval_delta { - vector active_approvals_to_add; // список необходимых аккаунтов, которые должны - // поставитьподпись вида «active» для одобрения предложенной транзакции - vector active_approvals_to_remove; // список необходимых аккаунтов, чьи подписи - // вида «active» должны быть удалены из списка подписей, которые одобрили - // транзакцию - vector owner_approvals_to_add; // список необходимых аккаунтов, которые должны - // поставить подпись вида «owner» для одобрения предложенной транзакции - vector owner_approvals_to_remove; // список необходимых аккаунтов, чьи подписи - // вида «owner» должны быть удалены из списка подписей, которые одобрили - // транзакцию - vector posting_approvals_to_add; // список необходимых аккаунтов, которые должны - // поставить подпись вида «posting» для одобрения предложенной транзакции - vector posting_approvals_to_remove; // список необходимых аккаунтов, чьи подписи - // вида «posting» должны быть удалены из списка подписей, которые одобрили - // транзакцию - vector key_approvals_to_add; // список подписей вида «public», которые необходимо - // получить для одобрения транзакции - vector key_approvals_to_remove; // список подписей вида «public», которые необходимо - // удалить из списка подписей, которые одобрили транзакцию + vector active_approvals_to_add; // список необходимых аккаунтов, которые должны + // поставитьподпись вида «active» для одобрения предложенной транзакции + vector active_approvals_to_remove; // список необходимых аккаунтов, чьи подписи + // вида «active» должны быть удалены из списка подписей, которые одобрили + // транзакцию + vector owner_approvals_to_add; // список необходимых аккаунтов, которые должны + // поставить подпись вида «owner» для одобрения предложенной транзакции + vector owner_approvals_to_remove; // список необходимых аккаунтов, чьи подписи + // вида «owner» должны быть удалены из списка подписей, которые одобрили + // транзакцию + vector posting_approvals_to_add; // список необходимых аккаунтов, которые должны + // поставить подпись вида «posting» для одобрения предложенной транзакции + vector posting_approvals_to_remove; // список необходимых аккаунтов, чьи подписи + // вида «posting» должны быть удалены из списка подписей, которые одобрили + // транзакцию + vector key_approvals_to_add; // список подписей вида «public», которые необходимо + // получить для одобрения транзакции + vector key_approvals_to_remove; // список подписей вида «public», которые необходимо + // удалить из списка подписей, которые одобрили транзакцию } ``` - Метод имеет следующий вид: -``` + +```text signed_transaction approve_proposal( - std::string author, - std::string title, - approval_delta delta, - bool broadcast + std::string author, + std::string title, + approval_delta delta, + bool broadcast ); ``` + где: `author` — автор, предложенной транзакции; `title` — заголовок предложенной на подпись транзакции; -`delta` — список подписей, необходимых для одобрения транзакции. В JSON-формате список может быть пустым; -`broadcast` — ‘true’, если транзакция пересылается на демон; ‘false’, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. -### Метод get_proposed_transactions +`delta` — список подписей, необходимых для одобрения транзакции. В JSON-формате список может быть пустым; +`broadcast` — ‘true’, если транзакция пересылается на демон; ‘false’, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. + +### Метод get\_proposed\_transactions + Метод обеспечивает получение информации о всех предложенных транзакция, применительно к одному и тому же аккаунту. Для получения информации об ограниченном количестве транзакций, необходимо задать начальный номер транзакции и пороговое значение `limit`. Метод имеет следующий вид: -``` + +```text std::vector get_proposed_transactions( - std::string account, - uint32_t from, - uint32_t limit + std::string account, + uint32_t from, + uint32_t limit ); ``` + где: `account` — аккаунт, информацию о предложенных транзакциях которого необходимо получить; `from` — начальный номер транзакции; `limit` — пороговое значение количества транзакций. -## Модифицированные методы в приложении cli_wallet + +## Модифицированные методы в приложении cli\_wallet + Следующие методы не являются новыми в приложении `cli_wallet` и уже использовались в предыдущих версиях блокчейна. Они изменены незначительно. -### Метод create_account + +### Метод create\_account + Метод обеспечивает создание аккаунта с автоматической генерацией ключей. Метод использует операцию `account_create` и возвращает созданный аккаунт. Доработка состоит из добавления параметра `fee`. Метод имеет следующий вид: -``` + +```text annotated_signed_transaction create_account( - string creator, - string new_account_name, - string json_meta, - asset fee, - bool broadcast + string creator, + string new_account_name, + string json_meta, + asset fee, + bool broadcast ); ``` + где: `creator` — пользователь, создающий новый акаунт; `new_account_name` — имя нового аккаунта; `json_meta` — метаданные профиля нового аккаунта поля `json_metadata`; `fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть меньше значения `account_creation_fee`, устанавливаемого по результатам голосования делегатов; `broadcast` — ‘true’, если транзакция пересылается на демон; ‘false’, если выполняется базовый контроль с выдачей подписанной транзакции на консоль. -### Метод create_account_with_keys -Метод обеспечивает создание аккаунта и требует явного задания ключей. Доработка состоит из добавления параметра `fee`. Метод имеет следующий вид: -``` + +### Метод create\_account\_with\_keys + +Метод обеспечивает создание аккаунта и требует явного задания ключей. Доработка состоит из добавления параметра `fee`. Метод имеет следующий вид: + +```text annotated_signed_transaction create_account_with_keys( - string creator, - string newname, - string json_meta, - asset fee, - public_key_type owner, - public_key_type active, - public_key_type posting, - public_key_type memo, - bool broadcast -) const; + string creator, + string newname, + string json_meta, + asset fee, + public_key_type owner, + public_key_type active, + public_key_type posting, + public_key_type memo, + bool broadcast +) const; ``` + где: `creator` — пользователь, который создает новый аккаунт; `newname` — имя нового аккаунта; -`json_meta` — метаданные профиля нового аккаунта поля json_metadata; +`json_meta` — метаданные профиля нового аккаунта поля json\_metadata; `fee` — сумма комиссионных отчислений в криптовалюте Голос, снимаемая с баланса кошелька пользователя за создание нового аккаунта и зачисляемая на баланс кошелька созданного аккаунта в криптовалюте Сила Голоса. Эта сумма не может быть меньше значения `account_creation_fee`, устанавливаемого по результатам голосования делегатов; `owner` — значение публичного ключа `owner` нового аккаунта; `active` — значение публичного ключа `active` нового аккаунта; `posting` — значение публичного ключа `posting` нового аккаунта; `memo` — значение публичного ключа `memo` нового аккаунта; -`broadcast` — ‘true’, если транзакция пересылается на демон. -## Этапы создания транзакций произвольной формы -Процедура создания транзакций, подписания и передача их на демон в ручном режиме включает в себя следующие основные этапы: - +`broadcast` — ‘true’, если транзакция пересылается на демон. -**1. Создание конструктора транзакций.** На начальном этапе необходимо по API вызвать метод `begin_builder_transaction`. В результате вызова будет получено значение параметра `HANDLE` — идентификационный номер конструктора транзакций. По этому номеру будет вызываться созданный конструктор для формирования транзакций. +## Этапы создания транзакций произвольной формы +Процедура создания транзакций, подписания и передача их на демон в ручном режиме включает в себя следующие основные этапы: -**2. Создание набора операций.** На этом этапе создается набор необходимых для выполнения в транзакции операций с помощью вызова `add_operation_to_builder_transaction $HANDLE [opID, {operation}]` по API. Полученный на начальном этапе конструктор позволяет создать произвольный набор операций в ручном режиме, а также изменять и редактировать их. Каждая из операций будет доступна по присвоенному ей идентификационному номеру `opID`, получаемого с помощью вызова `get_prototype_operation `. Конструктор обеспечивает построение нескольких транзакций параллельно. +**1. Создание конструктора транзакций.** На начальном этапе необходимо по API вызвать метод `begin_builder_transaction`. В результате вызова будет получено значение параметра `HANDLE` — идентификационный номер конструктора транзакций. По этому номеру будет вызываться созданный конструктор для формирования транзакций. +**2. Создание набора операций.** На этом этапе создается набор необходимых для выполнения в транзакции операций с помощью вызова `add_operation_to_builder_transaction $HANDLE [opID, {operation}]` по API. Полученный на начальном этапе конструктор позволяет создать произвольный набор операций в ручном режиме, а также изменять и редактировать их. Каждая из операций будет доступна по присвоенному ей идентификационному номеру `opID`, получаемого с помощью вызова `get_prototype_operation `. Конструктор обеспечивает построение нескольких транзакций параллельно. **3. Формирование суммы необходимых комиссионных отчислений.** На этом этапе определяется сумма комиссионных отчислений за сформированный набор операций для каждой из транзакций. Пользователь может либо определить размер комиссионных отчислений за каждую операцию в отдельности, либо воспользоваться вызовом метода `set_fees_on_builder_transaction` для автоматического определения общей суммы комиссионных отчислений. -Метод `set_fees_on_builder_transaction` не дорабатывался и вызывается так же как и в предыдущей версии блокчейна. - +Метод `set_fees_on_builder_transaction` не дорабатывался и вызывается так же как и в предыдущей версии блокчейна. **4. Подписание и передача на демон предложенной транзакции.** На заключительном этапе необходимо вызвать `sign_builder_transaction $HANDLE true`. Предложенная транзакция будет автоматически отправлена на подпись и затем передана на демон. **Note** -Из-за доработки `cli_wallet` изменилась выдача метода `get_ops_in_block`. В предыдущих версиях выдача этого метода имела следующий вид: -``` +Из-за доработки `cli_wallet` изменилась выдача метода `get_ops_in_block`. В предыдущих версиях выдача этого метода имела следующий вид: + +```text vector get_ops_in_block( - uint32_t
        _num, - bool only_virtual + uint32_t
        _num, + bool only_virtual ); ``` -Вид измененной выдачи get_ops_in_block: -``` + +Вид измененной выдачи get\_ops\_in\_block: + +```text vector get_ops_in_block( - uint32_t block_num, - bool only_virtual + uint32_t block_num, + bool only_virtual ); ``` -*** + diff --git a/golosd/HardFork/HF18_BuildInstruction-rus.md b/developers/hardforks/hf18_instruction.md similarity index 53% rename from golosd/HardFork/HF18_BuildInstruction-rus.md rename to developers/hardforks/hf18_instruction.md index 9a4f10a9..932a127e 100644 --- a/golosd/HardFork/HF18_BuildInstruction-rus.md +++ b/developers/hardforks/hf18_instruction.md @@ -1,261 +1,250 @@ -# H18: Руководство по установке -## Аннотация -Настоящее руководство предназначено для [делегатов](#bld_44) и [майнеров](#bld_47) блокчейна Golos, а также персонала, занимающегося разработкой скриптов для взаимодействия с [блокчейном](#bld_42) по API-запросам и использования их для биржевых целей. +# HF18: Руководство по установке +Документ содержит инструкцию по начальной установке и запуску, а также обновлению программного продукта GolosChain на сервере под управлением операционной системы Ubuntu 16.04 либо иной системы семейства Linux с помощью программного обеспечения Docker. -Документ содержит инструкцию по начальной установке и запуску, а также обновлению программного продукта GolosChain на сервере под управлением операционной системы Ubuntu 16.04 либо иной системы семейства Linux с помощью программного обеспечения Docker. - - -Стиль изложения руководства предполагает, что персонал имеет навыки работы с компьютерным оборудованием и знаком с блокчейн-технологией. - - - - - -*** -## Раздел_1 Общее -### Назначение -Программный продукт GolosChain версии HF•18 (далее — HF•18) предназначен для поддержки блокчейна Golos, используемого для обработки блоков публикуемой информации и проведения криптовалютных операций. -### Отличия версии HF•18 от предыдущих -В версии HF•18 устранены недостатки, выявленные в предыдущих версиях, и реализованы новые функциональные возможности. ### Способы установки HF•18 + Установку HF•18 на сервер можно выполнить в одном из следующих вариантов: -1. установка с использованием доступной платформы [Docker](#bld_412); +1. установка с использованием доступной платформы [Docker](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_412); 2. изначальное построение непосредственно из исходников golosd под управлением операционной системы Ubuntu; -3. обновление GolosChain до версии HF•18 из исходников golosd под управлением операционной системы Ubuntu. - +3. обновление GolosChain до версии HF•18 из исходников golosd под управлением операционной системы Ubuntu. -Инструкции по установке HF•18 в вариантах 1-3 изложены в разделах [2](#bld_2), [3](#bld_3) и [4](#bld_4) соответственно. +Инструкции по установке HF•18 в вариантах 1-3 изложены в разделах [2](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_2), [3](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_3) и [4](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_4) соответственно. +Рекомендуется установку HF•18 выполнять в варианте 1, поскольку использование платформы Docker обеспечивает: -Рекомендуется установку HF•18 выполнять в варианте 1, поскольку использование платформы Docker обеспечивает: * создание необходимого программного окружения, в том числе необходимого перечня библиотек, независимо от версии операционной системы; * создание среды, изолированной от ненужных временных файлов, сохраняемых системой в строящемся пространстве. ### Рекомендации к характеристикам аппаратных и программных средств -Сервер, на который устанавливается HF•18, должен иметь характеристики не хуже: + +Сервер, на который устанавливается HF•18, должен иметь характеристики не хуже: + * объем оперативной памяти: - * 16 ГБ для [делегатского Узла](#bld_410) в варианте конфигурации LOWMEM; - * 64 ГБ для [API Узла](#bld_411) в полной конфигурации; + * 16 ГБ для [делегатского Узла](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_410) в варианте конфигурации LOWMEM; + * 64 ГБ для [API Узла](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_411) в полной конфигурации; * объем дисковой памяти: 80 ГБ для API Узла в полной конфигурации; * операционная система: - * Ubuntu версии 16.04 (или более поздней); - * Linux-система (для установки HF•18 с использованием платформы Docker). + * Ubuntu версии 16.04 \(или более поздней\); + * Linux-система \(для установки HF•18 с использованием платформы Docker\). + +Программный код golosd поддерживает следующие программные обеспечения: -Программный код golosd поддерживает следующие программные обеспечения: * базовая библиотека: boost версии 1.58; -* компилятор GCC версии 5.х (с поддержкой стандарта С++14). +* компилятор GCC версии 5.х \(с поддержкой стандарта С++14\). ### Иные рекомендации -Перед началом выполнения приведенных в руководстве действий настоятельно рекомендуется: + +Перед началом выполнения приведенных в руководстве действий настоятельно рекомендуется: + * сохранить код личного ключа; -* отключить функцию подписания блоков отключением [плагина](#bld_48) witness; -* остановить и удалить предыдущую версию GolosChain (только для обновления версии), используя следующие команды: -``` -docker stop golos-default -docker rm golos-default -``` +* отключить функцию подписания блоков отключением [плагина](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_48) witness; +* остановить и удалить предыдущую версию GolosChain \(только для обновления версии\), используя следующие команды: - -## Раздел_2 Установка HF•18 с использованием платформы Docker - -Для построения HF•18 требуется сервер с операционной системой Ubuntu 16.04 и определенным набором библиотек. -В случае отсутствия сервера с требуемой операционной системой следует воспользоваться сервером с операционной системой семейства Linux. -Имеется возможность установки HF•18 на такой сервер с помощью платформы Docker, обеспечивающий создание необходимого окружения, независимо от версии системы Linux. + ```text + docker stop golos-default + docker rm golos-default + ``` +## Раздел\_2 Установка HF•18 с использованием платформы Docker -Установка и функционирование HF•18 на сервер под управлением каких-либо иных классов систем не поддерживается. +Для построения HF•18 требуется сервер с операционной системой Ubuntu 16.04 и определенным набором библиотек. В случае отсутствия сервера с требуемой операционной системой следует воспользоваться сервером с операционной системой семейства Linux. Имеется возможность установки HF•18 на такой сервер с помощью платформы Docker, обеспечивающий создание необходимого окружения, независимо от версии системы Linux. +Установка и функционирование HF•18 на сервер под управлением каких-либо иных классов систем не поддерживается. Для установки HF•18 на сервер с использованием платформы Docker необходимо выполнить следующие операции: -1. сконфигурировать [Docker-образ](#bld_413) в отдельном пространстве; -2. создать [контейнер](#bld_46) с использованием Docker-образа. Контейнер можно размещать как на локальном компьютере, так и на удаленном или виртуальном; -3. [воспроизвести блокчейн](#bld_43). +1. сконфигурировать [Docker-образ](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_413) в отдельном пространстве; +2. создать [контейнер](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_46) с использованием Docker-образа. Контейнер можно размещать как на локальном компьютере, так и на удаленном или виртуальном; +3. [воспроизвести блокчейн](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_43). ### Конфигурирование Docker-образа -**1.** Создать репозиторий `golosd` в отдельном пространстве и установить значения переменных в конфигурационных файлах. +**1.** Создать репозиторий `golosd` в отдельном пространстве и установить значения переменных в конфигурационных файлах. +**2.** В командном окне войти в директорию, в которой будет создан Docker-образ, и исполнить: -**2.** В командном окне войти в директорию, в которой будет создан Docker-образ, и исполнить: -``` +```text git clone https://github.com/GolosChain/golos.git ``` -В пространство, из которого была исполнена команда, должен скопироваться каталог `golos` с его содержимым. В процессе копирования не должны появляться сообщения об ошибках. +В пространство, из которого была исполнена команда, должен скопироваться каталог `golos` с его содержимым. В процессе копирования не должны появляться сообщения об ошибках. -**3.** Создать отдельную директорию для конфигурационных файлов, исполнив: -``` +**3.** Создать отдельную директорию для конфигурационных файлов, исполнив: + +```text sudo mkdir -p /etc/golosd ``` + **4.** В созданную директорию `/etc/golosd` скопировать конфигурационные файлы. Используемые для копирования команды: -``` + +```text cd golos sudo cp share/golosd/seednodes /etc/golosd/ sudo cp share/golosd/config/config.ini /etc/golosd/ ``` -В директории `golosd` находятся несколько конфигурационных файлов, данные которых можно использовать в качестве базовых для создания необходимого окружения. В следующей таблице приведен перечень основных конфигурационных файлов и их назначение. - - -Конфигурационный файл | Назначение -:-----------|:------- -share/golosd/config/config.ini | Содержит набор переменных для создания API Узла в полной его конфигурации со всеми включенными плагинами -share/golosd/config/config_witness.ini | Содержит набор переменных для создания делегатского Узла в конфигурации по умолчанию. Используется делегатами для подписания блоков -share/golosd/config/config_stock_exchange.ini | Содержит набор переменных для создания Узла для биржевых операций в конфигурации по умолчанию - +В директории `golosd` находятся несколько конфигурационных файлов, данные которых можно использовать в качестве базовых для создания необходимого окружения. В следующей таблице приведен перечень основных конфигурационных файлов и их назначение. -Поскольку golosd обрабатывает конфигурационный файл только с именем `config.ini`, то в зависимости от решаемой задачи следует выбрать необходимый конфигурационный файл и скопировать значения его переменных окружения в `share/golosd/config/config.ini`. +| Конфигурационный файл | Назначение | +| :--- | :--- | +| share/golosd/config/config.ini | Содержит набор переменных для создания API Узла в полной его конфигурации со всеми включенными плагинами | +| share/golosd/config/config\_witness.ini | Содержит набор переменных для создания делегатского Узла в конфигурации по умолчанию. Используется делегатами для подписания блоков | +| share/golosd/config/config\_stock\_exchange.ini | Содержит набор переменных для создания Узла для биржевых операций в конфигурации по умолчанию | +Поскольку golosd обрабатывает конфигурационный файл только с именем `config.ini`, то в зависимости от решаемой задачи следует выбрать необходимый конфигурационный файл и скопировать значения его переменных окружения в `share/golosd/config/config.ini`. -В следующей таблице приведен рекомендуемый перечень переменных окружения, значения которых необходимо установить. +В следующей таблице приведен рекомендуемый перечень переменных окружения, значения которых необходимо установить. -Переменная окружения | Назначение -:---------- |:------- -witness | Устанавливает имя [аккаунта](#bld_41) делегата (для делегатского Узла) -private-key | Задает код личного ключа `active` (для делегатского Узла). Тип ключа может быть отличным от `active` -plugin | Определяет перечень плагинов. Неиспользуемые плагины могут быть удалены +| Переменная окружения | Назначение | +| :--- | :--- | +| witness | Устанавливает имя [аккаунта](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_41) делегата \(для делегатского Узла\) | +| private-key | Задает код личного ключа `active` \(для делегатского Узла\). Тип ключа может быть отличным от `active` | +| plugin | Определяет перечень плагинов. Неиспользуемые плагины могут быть удалены | - -Количество задаваемых плагинов в переменной `plugin` влияет на объем используемой памяти, а также быстродействие Узла. Минимальный набор плагинов приведен в файле `config_witness.ini`. +Количество задаваемых плагинов в переменной `plugin` влияет на объем используемой памяти, а также быстродействие Узла. Минимальный набор плагинов приведен в файле `config_witness.ini`. **5.** Создать директорию для размещения в ней блокчейна, исполнив: -``` + +```text sudo mkdir -p /var/lib/golosd/ ``` + **6.** В созданную директорию скопировать исходный genesis-файл, исполнив: -``` + +```text sudo cp share/golosd/snapshot5392323.json /var/lib/golosd/ ``` ### Запуск Docker-образа из GolosCore -Docker-образ размещается на общедоступном реестре Docker Hub либо создается локально из исходников GolosCore. Из Docker-образа можно создать контейнер на физическом устройстве, на котором установлен Docker. Docker-образ представляет собой тиражируемый образ некоторого объекта, а создаваемый контейнер является самим объектом, который можно запускать и останавливать. Контейнер является изолированным от внешней среды со своими переменными окружения и параметрами запуска. В среде контейнера исполняется [Узел](#bld_49). Для запуска одного и того же Узла требуется создание другого контейнера. +Docker-образ размещается на общедоступном реестре Docker Hub либо создается локально из исходников GolosCore. Из Docker-образа можно создать контейнер на физическом устройстве, на котором установлен Docker. Docker-образ представляет собой тиражируемый образ некоторого объекта, а создаваемый контейнер является самим объектом, который можно запускать и останавливать. Контейнер является изолированным от внешней среды со своими переменными окружения и параметрами запуска. В среде контейнера исполняется [Узел](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_49). Для запуска одного и того же Узла требуется создание другого контейнера. -Для запуска Docker-образа из GolosCore и создания контейнера исполнить следующую командную строку: -``` +Для запуска Docker-образа из GolosCore и создания контейнера исполнить следующую командную строку: + +```text sudo docker run -d \ - -p 4243:4243 \ - -p 8090:8090 \ - -p 8091:8091 \ - -v /etc/golosd:/etc/golosd \ - -v /var/lib/golosd:/var/lib/golosd \ - --name golos-default goloschain/golos:latest + -p 4243:4243 \ + -p 8090:8090 \ + -p 8091:8091 \ + -v /etc/golosd:/etc/golosd \ + -v /var/lib/golosd:/var/lib/golosd \ + --name golos-default goloschain/golos:latest ``` + где: - `-d` — устанавливает запуск контейнера в фоновом режиме; - `-p` — устанавливает привязку конкретных портов хоста к портам контейнера; - `--name` — задает имя контейнера (`golos-default`); - `latest` — задает последнюю официальную версию golosd. - - +`-d` — устанавливает запуск контейнера в фоновом режиме; +`-p` — устанавливает привязку конкретных портов хоста к портам контейнера; +`--name` — задает имя контейнера \(`golos-default`\); +`latest` — задает последнюю официальную версию golosd. + Для проверки успешного запуска контейнера исполнить команду -``` + +```text sudo docker ps ``` + Создание контейнера считается успешным, если в тексте лог-файла не было сообщений об ошибках и в выдаче этой команды появится имя контейнера golos-default с соответствующими портами. ### Воспроизведение блокчейна -Перед тем, как приступить к непосредственному воспроизведению блокчейна, убедиться в наличии файлов `/var/lib/golosd/blockchain/block_log` и `/var/lib/blockchain/block_log.index`. - - -В файле `block_log` хранится список подписанных блоков с транзакциями. В каждой из транзакций содержится перечень операций, которые необходимо выполнить для восстановления состояния системы. Все блоки взаимосвязаны между собой. В процессе появления новых блоков они считываются по сети, добавляются в этот файл и могут быть использованы в дальнейшем. Файл представляет собой протокол всех операций, как ранее совершенных системой,так и последующих. - - -В файле `shared_memory.bin` хранятся данные о состоянии системы, а также непосредственно база данных, в том числе таблицы с записями и индексы, по которым происходит обращение к ячейкам таблицы. +Перед тем, как приступить к непосредственному воспроизведению блокчейна, убедиться в наличии файлов `/var/lib/golosd/blockchain/block_log` и `/var/lib/blockchain/block_log.index`. -В каждом из плагинов, подобно структуре файла `shared_memory.bin`, содержатся таблицы и индексы, требующие из наполнения с самого начала истории. Во время включения дополнительного плагина его поля остаются пустыми и для их заполнения требуется воспроизведение всех операций из `block_log` с самого начала. Этот процесс состоит из множества операций, требующий обработку каждого блока. +В файле `block_log` хранится список подписанных блоков с транзакциями. В каждой из транзакций содержится перечень операций, которые необходимо выполнить для восстановления состояния системы. Все блоки взаимосвязаны между собой. В процессе появления новых блоков они считываются по сети, добавляются в этот файл и могут быть использованы в дальнейшем. Файл представляет собой протокол всех операций, как ранее совершенных системой,так и последующих. +В файле `shared_memory.bin` хранятся данные о состоянии системы, а также непосредственно база данных, в том числе таблицы с записями и индексы, по которым происходит обращение к ячейкам таблицы. -Поскольку операция считывания отдельного блока по сети значительно превышает по времени операцию считывания из локальной области, использование `block_log` значительно сокращает время процессов блокчейна. +В каждом из плагинов, подобно структуре файла `shared_memory.bin`, содержатся таблицы и индексы, требующие из наполнения с самого начала истории. Во время включения дополнительного плагина его поля остаются пустыми и для их заполнения требуется воспроизведение всех операций из `block_log` с самого начала. Этот процесс состоит из множества операций, требующий обработку каждого блока. +Поскольку операция считывания отдельного блока по сети значительно превышает по времени операцию считывания из локальной области, использование `block_log` значительно сокращает время процессов блокчейна. -Для воспроизведения блокчейна необходимо следовать следующим указаниям. - +Для воспроизведения блокчейна необходимо следовать следующим указаниям. **1.** Убедиться, что процессы контейнера golos-default завершены, используя следующую командную строку: -``` + +```text sudo docker ps | grep golos-default ``` -Если имеется незавершенный процесс, его необходимо остановить, исполнив: -``` -sudo docker stop golos-default -``` +Если имеется незавершенный процесс, его необходимо остановить, исполнив: -**2.** Запустить контейнер, используя в качестве основы образ, исполнив: +```text +sudo docker stop golos-default ``` + +**2.** Запустить контейнер, используя в качестве основы образ, исполнив: + +```text sudo docker run -d \ - -p 4243:4243 \ - -p 8090:8090 \ - -p 8091:8091 \ - -v /etc/golosd:/etc/golosd \ - -v /var/lib/golosd:/var/lib/golosd \ - --name golos-default goloschain/golos:latest + -p 4243:4243 \ + -p 8090:8090 \ + -p 8091:8091 \ + -v /etc/golosd:/etc/golosd \ + -v /var/lib/golosd:/var/lib/golosd \ + --name golos-default goloschain/golos:latest ``` + где: `golos-default` — имя контейнера; -`latest` — задает последнюю официальную версию golosd. - +`latest` — задает последнюю официальную версию golosd. **3.** Воспроизвести блокчейн посредством запуска скрипта `golosdctl` внутри запущенного контейнера `golos-default`: -``` + +```text sudo docker exec golos-default /usr/local/bin/golosdctl replay ``` +**4.** Выполнить проверку успешной установки Узла. -**4.** Выполнить проверку успешной установки Узла. * Открыть лог-файл и убедиться в следующих фактах: - * в файл прекращено поступление новой информации; - * текст файла не содержит сообщения об ошибках. -* Подключиться к Узлу через `cli_wallet` по порту 8091, исполнив: -``` -sudo docker exec -ti golos-default \ - /usr/local/bin/cli_wallet \ - --wallet="/var/lib/golosd/wallet.json" \ - --server-rpc-endpoint="ws://127.0.0.1:8091" -``` -Успешное подключение будет означать успешную установку Узла. - -### Построение Docker-образа с использованием Docker-файла -В этом разделе приведена инструкция по построению Docker-образа с использованием различных [Docker-файлов](#bld_414). + * в файл прекращено поступление новой информации; + * текст файла не содержит сообщения об ошибках. +* Подключиться к Узлу через `cli_wallet` по порту 8091, исполнив: + ```text + sudo docker exec -ti golos-default \ + /usr/local/bin/cli_wallet \ + --wallet="/var/lib/golosd/wallet.json" \ + --server-rpc-endpoint="ws://127.0.0.1:8091" + ``` -Docker-файл представляет собой текстовый файл с инструкциями, необходимыми для создания образа контейнера. Образ строится автоматически последовательным выполнением команд, приведенных в файле. - - -Docker-образ образует многоуровневую последовательность операций, каждый уровень которой представляет собой инструкции Docker-файла. Каждая инструкция создает отдельный уровень Docker-образа. При запуске Docker-образа и создании контейнера добавляется очередной уровень для записи изменений поверх нижнего уровня. - + Успешное подключение будет означать успешную установку Узла. -В зависимости от решаемой задачи можно построить Узел с соответствующими для этой задачи параметрами. В этом случае Docker-образ может быть построен с использованием одного из Docker-файлов, размещенных в каталоге `share/golosd/docker/`. Пользователю также предоставляется возможность самостоятельно создавать Docker-файл с необходимыми для его нужд параметрами для построения соответствующего контейнера. +### Построение Docker-образа с использованием Docker-файла +В этом разделе приведена инструкция по построению Docker-образа с использованием различных [Docker-файлов](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_414). -В следующей таблице приведен перечень основных Docker-файлов и их назначение. +Docker-файл представляет собой текстовый файл с инструкциями, необходимыми для создания образа контейнера. Образ строится автоматически последовательным выполнением команд, приведенных в файле. +Docker-образ образует многоуровневую последовательность операций, каждый уровень которой представляет собой инструкции Docker-файла. Каждая инструкция создает отдельный уровень Docker-образа. При запуске Docker-образа и создании контейнера добавляется очередной уровень для записи изменений поверх нижнего уровня. -Docker-файл | Назначение -:-------- |:-------- -Dockerfile | Содержит набор инструкций и переменных для создания Docker-образа по умолчанию -share/golosd/docker/Dockerfile-small | Docker-файл с инструкциями одного уровня. Позволяет создать Docker-образ меньшего размера относительно Docker-образа, построенного по умолчанию -share/golosd/docker/Dockerfile-lowmem | Содержит набор переменных, направленных на экономию ресурсов, в том числе потребление памяти. Позволяют сконфигурировать Узел, не сохраняющий посты и комментарии -share/golosd/docker/Dockerfile-lowmem-small | Docker-файл с инструкциями одного уровня. Содержит набор переменных, позволяющих снизить потребление памяти +В зависимости от решаемой задачи можно построить Узел с соответствующими для этой задачи параметрами. В этом случае Docker-образ может быть построен с использованием одного из Docker-файлов, размещенных в каталоге `share/golosd/docker/`. Пользователю также предоставляется возможность самостоятельно создавать Docker-файл с необходимыми для его нужд параметрами для построения соответствующего контейнера. +В следующей таблице приведен перечень основных Docker-файлов и их назначение. -Для построения Docker-образа необходимо следовать следующим указаниям. +| Docker-файл | Назначение | +| :--- | :--- | +| Dockerfile | Содержит набор инструкций и переменных для создания Docker-образа по умолчанию | +| share/golosd/docker/Dockerfile-small | Docker-файл с инструкциями одного уровня. Позволяет создать Docker-образ меньшего размера относительно Docker-образа, построенного по умолчанию | +| share/golosd/docker/Dockerfile-lowmem | Содержит набор переменных, направленных на экономию ресурсов, в том числе потребление памяти. Позволяют сконфигурировать Узел, не сохраняющий посты и комментарии | +| share/golosd/docker/Dockerfile-lowmem-small | Docker-файл с инструкциями одного уровня. Содержит набор переменных, позволяющих снизить потребление памяти | +Для построения Docker-образа необходимо следовать следующим указаниям. **1.** Удалить ранее установленный образ, исполнив: -``` + +```text sudo docker image rm local/golos ``` -**2.** Выбрать из размещенного в каталоге `share/golosd/docker/` набора нужный Docker-файл и построить Docker-образ, используя следующую команду: -``` +**2.** Выбрать из размещенного в каталоге `share/golosd/docker/` набора нужный Docker-файл и построить Docker-образ, используя следующую команду: + +```text sudo docker build -t local/golos -f Dockerfile ``` + **3.** Запустить контейнер, исполнив: -``` + +```text sudo docker run -d \ -p 4243:4243 \ -p 8090:8090 \ @@ -270,20 +259,28 @@ sudo docker run -d \ `local/golos` — показывает, что построение Docker-образа выполняется с использованием сети. ### Перечень команд, применяемых к любому виду контейнера + **1.** Доступ к контейнеру: -``` + +```text sudo docker exec -ti golos-default /bin/bash ``` + **2.** Получение текста лог-файла о контейнере: -``` + +```text sudo docker logs --tail 10 -f golos-default ``` + **3.** Воспроизведение контейнера: -``` + +```text sudo docker exec golos-default /usr/local/bin/golosdctl replay ``` -**4.** Подключение через cli_wallet к Узлу для проверки его функционирования: -``` + +**4.** Подключение через cli\_wallet к Узлу для проверки его функционирования: + +```text sudo docker exec -ti golos-default \ /usr/local/bin/cli_wallet \ --wallet="/var/lib/golosd/wallet.json" \ @@ -291,106 +288,109 @@ sudo docker exec -ti golos-default \ ``` **5.** Запуск контейнера: -``` + +```text sudo docker start golos-default ``` + **6.** Останов контейнера: -``` + +```text sudo docker stop golos-default ``` - -## Раздел_3 Обновление GolosChain до новой версии -В этом разделе приведена инструкция по обновлению ранее установленного GolosChain до его новой версии HF•18. Предполагается, что ранее установленная версия GolosChain управляется операционной системой Ubuntu 16.04. +## Раздел\_3 Обновление GolosChain до новой версии -Для обновления GolosChain необходимо следовать следующим указаниям. +В этом разделе приведена инструкция по обновлению ранее установленного GolosChain до его новой версии HF•18. Предполагается, что ранее установленная версия GolosChain управляется операционной системой Ubuntu 16.04. +Для обновления GolosChain необходимо следовать следующим указаниям. **1.** Обновить исходные файлы GolosChain, исполнив: -``` + +```text git clone https://github.com/GolosChain/golos.git cd golos git submodule update --init --recursive -f ``` **2.** Задать значения макро-переменных и сконфигурировать проект, исполнив: -``` + +```text mkdir build cd build cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_GOLOS_TESTNET=FALSE \ - -DBUILD_SHARED_LIBRARIES=FALSE \ - -DLOW_MEMORY_NODE=FALSE \ - -DCHAINBASE_CHECK_LOCKING=FALSE \ - .. + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_GOLOS_TESTNET=FALSE \ + -DBUILD_SHARED_LIBRARIES=FALSE \ + -DLOW_MEMORY_NODE=FALSE \ + -DCHAINBASE_CHECK_LOCKING=FALSE \ + .. ``` -**3.** Построить проект с установкой [демона](#bld_45) в `/usr/local/`, исполнив: -``` +**3.** Построить проект с установкой [демона](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_buildinstruction-rus.md#bld_45) в `/usr/local/`, исполнив: + +```text make -j $(nproc) sudo make install ``` -**4.** Открыть конфигурационный файл `share/golosd/config/config.ini` и установить в нем значения переменных окружения. В зависимости от решаемых задач можно установить значения переменных окружения, обеспечивающих создание Узлов следующих типов: - * API Узел в полной конфигурации со всеми включенными плагинами; - * Узел делегатский, содержащий минимальный набор включенных плагинов; - * Узел в произвольной конфигурации с произвольным набором включенных плагинов. - - -В следующей таблице приведен рекомендуемый перечень переменных окружения, значения которых необходимо установить. - +**4.** Открыть конфигурационный файл `share/golosd/config/config.ini` и установить в нем значения переменных окружения. В зависимости от решаемых задач можно установить значения переменных окружения, обеспечивающих создание Узлов следующих типов: -Переменная окружения | Назначение -:-------- |:------- -witness | Устанавливает имя аккаунта делегата (для делегатского Узла) -private-key | Задает код личного ключа `active` (для делегатского Узла). Тип ключа может быть отличным от `active` -plugin | Определяет перечень плагинов. Неиспользуемые плагины могут быть удалены +* API Узел в полной конфигурации со всеми включенными плагинами; +* Узел делегатский, содержащий минимальный набор включенных плагинов; +* Узел в произвольной конфигурации с произвольным набором включенных плагинов. +В следующей таблице приведен рекомендуемый перечень переменных окружения, значения которых необходимо установить. -Количество задаваемых плагинов в переменной `plugin` влияет на объем используемой памяти, а также быстродействие Узла. Минимальный набор плагинов приведен в файле `config_witness.ini`. +| Переменная окружения | Назначение | +| :--- | :--- | +| witness | Устанавливает имя аккаунта делегата \(для делегатского Узла\) | +| private-key | Задает код личного ключа `active` \(для делегатского Узла\). Тип ключа может быть отличным от `active` | +| plugin | Определяет перечень плагинов. Неиспользуемые плагины могут быть удалены | +Количество задаваемых плагинов в переменной `plugin` влияет на объем используемой памяти, а также быстродействие Узла. Минимальный набор плагинов приведен в файле `config_witness.ini`. **5.** Остановить незавершенные процессы старой версии GolosChain на демоне. В зависимости от конфигурации останов может быть выполнен различными способами, например, с помощью следующих команд: -``` + +```text pkill -15 golosd sudo sv stop golosd ``` -**6.** Воспроизвести блокчейн. Предварительно убедиться в наличии файлов `/var/lib/golosd/blockchain/block_log` и `/var/lib/blockchain/block_log.index`, в которых хранятся блоки и данные о состоянии системы и плагинов. Использование данных этих файлов избавляет от выполнения длительной операции синхронизации блоков по сети и, следовательно, сокращает время воспроизведения блокчейна. - +**6.** Воспроизвести блокчейн. Предварительно убедиться в наличии файлов `/var/lib/golosd/blockchain/block_log` и `/var/lib/blockchain/block_log.index`, в которых хранятся блоки и данные о состоянии системы и плагинов. Использование данных этих файлов избавляет от выполнения длительной операции синхронизации блоков по сети и, следовательно, сокращает время воспроизведения блокчейна. Исполнить: -``` + +```text /usr/local/bin/golosd --replay-blockchain ``` +**7.** Выполнить проверку успешного обновления GolosChain -**7.** Выполнить проверку успешного обновления GolosChain * Открыть лог-файл и убедиться в следующих фактах: - * в файл прекращено поступление новой информации; - * текст файла не содержит сообщения об ошибках. -* Подключиться к Узлу через cli_wallet по порту 8091, исполнив: -``` -/usr/local/bin/cli_wallet \ - --wallet="/var/lib/golosd/wallet.json" \ - --server-rpc-endpoint="ws://127.0.0.1:8091" -``` -Успешное подключение к Узлу будет означать успешное обновление GolosChain. + * в файл прекращено поступление новой информации; + * текст файла не содержит сообщения об ошибках. +* Подключиться к Узлу через cli\_wallet по порту 8091, исполнив: - -## Раздел_4 Изначальная установка блокчейна -В этом разделе приведена инструкция по установке GolosChain обновленной версии. Предполагается, что GolosChain устанавливается изначально на сервер под управлением операционной системы Ubuntu 16.04. + ```text + /usr/local/bin/cli_wallet \ + --wallet="/var/lib/golosd/wallet.json" \ + --server-rpc-endpoint="ws://127.0.0.1:8091" + ``` + Успешное подключение к Узлу будет означать успешное обновление GolosChain. -Для установки обновленной версии GolosChain необходимо следовать следующим указаниям. +## Раздел\_4 Изначальная установка блокчейна +В этом разделе приведена инструкция по установке GolosChain обновленной версии. Предполагается, что GolosChain устанавливается изначально на сервер под управлением операционной системы Ubuntu 16.04. -**1.** Создать на сервере пространство для размещения в нем репозитория golosd. +Для установки обновленной версии GolosChain необходимо следовать следующим указаниям. +**1.** Создать на сервере пространство для размещения в нем репозитория golosd. **2.** Установить необходимые пакеты. Система Ubuntu 16.04 обеспечивает автоматический поиск в сети требуемого набора пакетов и загрузку их в соответствующие им директории. Для этого необходимо исполнить: -``` + +```text sudo apt-get install -y \ autoconf \ automake \ @@ -413,134 +413,91 @@ sudo apt-get install -y \ python3-pip \ runit sudo pip3 install gcovr -``` - +``` **3.** В отведенное для репозитория место скопировать исходные файлы из github, используя следующие команды: -``` + +```text git clone https://github.com/GolosChain/golos.git cd golos git submodule update --init --recursive -f ``` -В процессе копирования не должны появляться сообщения об ошибках. +В процессе копирования не должны появляться сообщения об ошибках. **4.** Задать значения макро-переменных и сконфигурировать проект, используя следующие команды: -``` + +```text mkdir build cd build cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_GOLOS_TESTNET=FALSE \ - -DBUILD_SHARED_LIBRARIES=FALSE \ - -DLOW_MEMORY_NODE=FALSE \ - -DCHAINBASE_CHECK_LOCKING=FALSE \ - .. -``` - + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_GOLOS_TESTNET=FALSE \ + -DBUILD_SHARED_LIBRARIES=FALSE \ + -DLOW_MEMORY_NODE=FALSE \ + -DCHAINBASE_CHECK_LOCKING=FALSE \ + .. +``` **5.** Построить проект с установкой демона в `/usr/local/`, исполнив: -``` + +```text make -j $(nproc) sudo make install -``` - +``` **6.** Создать пользователя с именем golosd для демона: -``` + +```text sudo useradd -s /bin/bash -m -d /var/lib/golosd golosd -``` +``` **7.** Скопировать исходный файл genesis формата JSON для блокчейна, исполнив: -``` + +```text sudo cp ../share/golosd/snapshot5392323.json /var/lib/golosd/ ``` **8.** Создать директорию golosd в `/etc/` и скопировать в нее конфигурационные файлы: -``` + +```text sudo mkdir -p /etc/golosd sudo cp ../share/golosd/seednodes /etc/golosd/ sudo cp ../share/golosd/config/config.ini /etc/golosd/ ``` - **9.** Сменить имя владельца скопированным конфигурационным файлам: -``` + +```text sudo chown golosd:golosd -R /etc/golosd/ ``` **10.** Создать сервисный файл для демона: -``` + +```text sudo mkdir -p /etc/service/golosd sudo cp ../share/golosd/golosd.sh /etc/service/golosd/run sudo chmod +x /etc/service/golosd/run ``` **11.** Запустить функционирование GolosChain, исполнив: -``` + +```text sudo sv start golosd ``` +**12.** Выполнить проверку успешной установки GolosChain. -**12.** Выполнить проверку успешной установки GolosChain. * Открыть лог-файл и убедиться в следующих фактах: - * в файл прекращено поступление новой информации; - * текст файла не содержит сообщения об ошибках. -* Подключиться к Узлу через cli_wallet по порту 8091, исполнив: -``` -/usr/local/bin/cli_wallet \ - --wallet="/var/lib/golosd/wallet.json" \ - --server-rpc-endpoint="ws://127.0.0.1:8091" -``` - -Успешное подключение к Узлу будет означать успешную установку GolosChain. - -## Используемая терминология - **Аккаунт** (англ. account) — хранимая в системе учетная запись пользователя для его опознавания (аутентификации) и предоставления доступа к его личным данным и настройкам. - - - **Блокчейн** (англ. block chain) — строго структурированная база данных с определенными правилами построения цепочек транзакций и доступа к информации, которая исключает кражу данных, мошенничество, нарушение имущественных прав и т. д. - - - **Воспроизведение блокчейна** (англ. replaying the blockchain) — возобновление функционирования блокчейна, аналог операции перезагрузки. - - - **Делегат** (англ. witness) — пользователь блокчейна, наделенный определенными полномочиями. Используя свое (арендованное) оборудование, обеспечивает функционирование Узлов (нод) сети, создает и подписывает новые блоки, обеспечивая безопасность сети. - - - **Демон** (англ. daemon) — программа в системах семейства Linux, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем. - - - **Контейнер** — объект, создаваемый с помощью Docker-образа и содержащий все необходимые компоненты для работы приложения. Контейнер является безопасной платформой для функционирования приложения. - - - **Майнер** (англ. miner) — пользователь блокчейна, функциями которого являются получение криптовалюты путем использования ресурсов специального оборудования и программного обеспечения, а также подписание блоков. - - - **Плагин** (англ. plugin) — программный компонент, выполненный в виде отдельного модуля и являющийся дополнением к основной программе. - - - **Узел** (англ. node) — отдельное (программное) устройство, подключаемое к сети блокчейн по схеме клиент-сервер. Узлы являются активными элементами и составляют основу технологии сети блокчейн. - - - **Узел делегатский** (англ. witness node) — Узел, построенный с использованием конфигурационного файла `config_witness.ini`, содержащего минимальный набор включенных плагинов. - - - **Узел API** (англ. API node) — Узел, построенный с использованием конфигурационного файла `config.ini`, содержащего полную конфигурацию со всем набором включенных плагинов. - - - **Docker** — программное обеспечение для автоматизации установки приложения в среде виртуализации на уровне операционной системы. Обеспечивает установку приложения со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнером. - - - **Docker-образ** — шаблон платформы Docker, доступный только по чтению и используемый для создания контейнеров. - - - **Docker-файл** (англ. dockerfile) — файл, содержащий инструкции и параметры для создания Docker-образа под конкретные задачи. - + * в файл прекращено поступление новой информации; + * текст файла не содержит сообщения об ошибках. +* Подключиться к Узлу через cli\_wallet по порту 8091, исполнив: + ```text + /usr/local/bin/cli_wallet \ + --wallet="/var/lib/golosd/wallet.json" \ + --server-rpc-endpoint="ws://127.0.0.1:8091" + ``` -**Полезные ссылки:** -https://golos.io/ru--golos/@vik/ustanovka-i-nastroika-rezervnykh-nod-vozmozhnost-obkhoditsya-bez-nikh-ne-narushaya-rabotu-golosa -https://wiki.golos.io/golosd/HardFork/HF18_ReleaseNotice-rus.html +Успешное подключение к Узлу будет означать успешную установку GolosChain. -*** diff --git a/golosd/HardFork/HF18_ReleaseNotice-rus.md b/developers/hardforks/hf18_release.md similarity index 57% rename from golosd/HardFork/HF18_ReleaseNotice-rus.md rename to developers/hardforks/hf18_release.md index 6b87fdb6..1bbec68d 100644 --- a/golosd/HardFork/HF18_ReleaseNotice-rus.md +++ b/developers/hardforks/hf18_release.md @@ -1,171 +1,131 @@ -## GOLOS·CORE -## Новые функциональные и технические возможности блокчейна HardFork HF·18 +# HF18: Новые возможности -> ***Golos·Core выпустил очередную версию блокчейна HardFork HF·18, в которой реализованы новые функциональные и технические возможности, а также устранены недостатки предыдущих версий. Обновления поддержаны большинством голосов делегатов.*** +* [1. Делегирование Силы Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#1-делегирование-силы-голоса) + * [1.1. Операция делегирования Силы Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#11-операция-делегирования-силы-голоса) + * [1.2. Изменение или возврат делегированной Силы Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#12-изменение-или-возврат-делегированной-силы-голоса) + * [1.3. Создание аккаунта с делегированной Силой Голоса](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#13-создание-аккаунта-с-делегированной-силой-голоса) +* [2. Предотвращение злоупотреблений делегированием Силы Голоса с целью обогащения](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#2-предотвращение-злоупотреблений-делегированием-силы-голоса-с-целью-обогащения) +* [3. Улучшение способа определения биржевого курса и соотношения криптовалют](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#3-улучшение-способа-определения-биржевого-курса-и-соотношения-криптовалют) +* [4. Редактирование профиля пользователя с использованием ключа posting](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#4-редактирование-профиля-пользователя-с-использованием-ключа-posting) +* [5. Предложение на транзакцию, состоящей из нескольких операций](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#5-предложение-на-транзакцию-состоящей-из-нескольких-операций) + * [5.1. Предложение на транзакцию](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#51-предложение-на-транзакцию) + * [5.2. Обновление предложенной транзакции](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#52-обновление-предложенной-транзакции) + * [5.3. Удаление предложенной транзакции](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#53-удаление-предложенной-транзакции) + * [5.4. Эффективность предложенной транзакции](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#54-эффективность-предложенной-транзакции) +* [6. Редактирование постов и комментариев к ним независимо от времени их публикации](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#6-редактирование-постов-и-комментариев-к-ним-независимо-от-времени-их-публикации) +* [7. Расширение перечня параметров блокчейна, значения которых определяются голосованием](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#7-расширение-перечня-параметров-блокчейна-значения-которых-определяются-голосованием) +* [8. Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#8-повышение-быстродействия-системы-за-счет-размещения-в-разных-объектах-полей-с-часто-и-редко-используемыми-данными) +* [9. Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#9-повышение-производительности-api-протокола-за-счет-удаления-неиспользуемых-полей-из-методов-плагинов-а-также-за-счет-перераспределения-методов-между-плагинами-для-более-эффективного-их-использования) + * [9.1. Удаление неиспользуемых полей из методов плагинов](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#91-удаление-неиспользуемых-полей-из-методов-плагинов) + * [9.2. Размещение индексных операций по блокам и аккаунтам в отдельных плагинах](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#92-размещение-индексных-операций-по-блокам-и-аккаунтам-в-отдельных-плагинах) +* [10. Использование тэгов при формировании запросов на получение необходимой информации](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#10-использование-тэгов-при-формировании-запросов-на-получение-необходимой-информации) +* [11. Получение информации о текущем статусе разделяемой памяти](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#11-получение-информации-о-текущем-статусе-разделяемой-памяти) +* [12. Постраничный просмотр личных сообщений пользователя](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#12-постраничный-просмотр-личных-сообщений-пользователя) +* [13. Улучшения в подсистеме хранения блоков цепочки](https://github.com/golos-blockchain/wiki/tree/d940af7f54725dd68c7f9080f07d5b5f609bf4d4/developers/hardforks/hf18_releasenotice-rus.md#13-улучшения-в-подсистеме-хранения-блоков-цепочки) -### Рекомендация пользователям -**Новые функциональные и технические возможности вносят изменения в правила экономической модели блокчейна. Поскольку измененные правила в обновленном блокчейне отменяют действия старых правил, всем всем пользователям системы следует обновить кодовую базу на своих серверах до версии HF•18.** +## 1. Делегирование Силы Голоса +### 1.1. Операция делегирования Силы Голоса -### На этой странице: +На балансе кошельке пользователя могут храниться три вида криптовалюты — Голос, Сила Голоса и Золотой. Пользователь может за Голос приобрести Силу Голоса, что позволит ему более эффективно проводить голосование за интересующие посты. В зависимости от наличия на балансе кошелька количества Силы Голоса на момент голосования за какой-либо пост определяется размер бонуса по завершению процесса голосования. То есть размер бонуса, получаемого по результатам голосования за пост, пропорционален количеству Силы Голоса на балансе кошелька на момент голосования. -* [1. Делегирование Силы Голоса](#1-делегирование-силы-голоса) - * [1.1. Операция делегирования Силы Голоса](#11-операция-делегирования-силы-голоса) - * [1.2. Изменение или возврат делегированной Силы Голоса](#12-изменение-или-возврат-делегированной-силы-голоса) - * [1.3. Создание аккаунта с делегированной Силой Голоса](#13-создание-аккаунта-с-делегированной-силой-голоса) -* [2. Предотвращение злоупотреблений делегированием Силы Голоса с целью обогащения](#2-предотвращение-злоупотреблений-делегированием-силы-голоса-с-целью-обогащения) -* [3. Улучшение способа определения биржевого курса и соотношения криптовалют](#3-улучшение-способа-определения-биржевого-курса-и-соотношения-криптовалют) -* [4. Редактирование профиля пользователя с использованием ключа posting](#4-редактирование-профиля-пользователя-с-использованием-ключа-posting) -* [5. Предложение на транзакцию, состоящей из нескольких операций](#5-предложение-на-транзакцию-состоящей-из-нескольких-операций) - * [5.1. Предложение на транзакцию](#51-предложение-на-транзакцию) - * [5.2. Обновление предложенной транзакции](#52-обновление-предложенной-транзакции) - * [5.3. Удаление предложенной транзакции](#53-удаление-предложенной-транзакции) - * [5.4. Эффективность предложенной транзакции](#54-эффективность-предложенной-транзакции) -* [6. Редактирование постов и комментариев к ним независимо от времени их публикации](#6-редактирование-постов-и-комментариев-к-ним-независимо-от-времени-их-публикации) -* [7. Расширение перечня параметров блокчейна, значения которых определяются голосованием](#7-расширение-перечня-параметров-блокчейна-значения-которых-определяются-голосованием) -* [8. Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными](#8-повышение-быстродействия-системы-за-счет-размещения-в-разных-объектах-полей-с-часто-и-редко-используемыми-данными) -* [9. Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования](#9-повышение-производительности-api-протокола-за-счет-удаления-неиспользуемых-полей-из-методов-плагинов-а-также-за-счет-перераспределения-методов-между-плагинами-для-более-эффективного-их-использования) - * [9.1. Удаление неиспользуемых полей из методов плагинов](#91-удаление-неиспользуемых-полей-из-методов-плагинов) - * [9.2. Размещение индексных операций по блокам и аккаунтам в отдельных плагинах](#92-размещение-индексных-операций-по-блокам-и-аккаунтам-в-отдельных-плагинах) -* [10. Использование тэгов при формировании запросов на получение необходимой информации](#10-использование-тэгов-при-формировании-запросов-на-получение-необходимой-информации) -* [11. Получение информации о текущем статусе разделяемой памяти](#11-получение-информации-о-текущем-статусе-разделяемой-памяти) -* [12. Постраничный просмотр личных сообщений пользователя](#12-постраничный-просмотр-личных-сообщений-пользователя) -* [13. Улучшения в подсистеме хранения блоков цепочки](#13-улучшения-в-подсистеме-хранения-блоков-цепочки) +Пользователь \(кредитор\) может неиспользуемую часть Силы Голоса кредитовать на время \(делегировать\) другому пользователю, который также может ее использовать по своему усмотрению. Кредитор Силы Голоса при этом получает дополнительную возможность голосования за пост и, следовательно, возможность получения дополнительного бонуса. +Для выполнения операции делегирования кредитору Силы Голоса необходимо сформировать массив значений — блок делегирования с указанием типа операции, отправителя, получателя, сумма делегирования и пр. -*** +Минимально возможное количество криптовалюты, необходимое для делегирования, является плавающей величиной и зависит от результатов голосования делегатов. +В блокчейне реализована блокировка различного рода злоупотреблений, связанных с использованием переводов криптовалюты из одного ее вида в другой и перечислением ее со счета на счет с целью обогащения. -### 1. Делегирование Силы Голоса +### 1.2. Изменение или возврат делегированной Силы Голоса +Кредитор Силы Голоса в случае каких-либо обстоятельств может изменить количество делегированного как в сторону его увеличения, так и уменьшения, а также осуществить возврат делегированного в полном объеме. -#### 1.1. Операция делегирования Силы Голоса -На балансе кошельке пользователя могут храниться три вида криптовалюты — Голос, Сила Голоса и Золотой. Пользователь может за Голос приобрести Силу Голоса, что позволит ему более эффективно проводить голосование за интересующие посты. В зависимости от наличия на балансе кошелька количества Силы Голоса на момент голосования за какой-либо пост определяется размер бонуса по завершению процесса голосования. То есть размер бонуса, получаемого по результатам голосования за пост, пропорционален количеству Силы Голоса на балансе кошелька на момент голосования. +Для выполнения этой операции в сформированном блоке делегирования необходимо задать новое значение количества делегированной Силы Голоса. В случае полного ее возврата следует задать значение вида “0.000000 GESTS”. При изменении значения в сторону уменьшения делегированная Сила Голоса сразу снимается с аккаунта-получателя и переходит в «замороженное» состояние сроком на 7 дней. +Для выполнения этой операции требуется авторизация с помощью ключа `active`. -Пользователь (кредитор) может неиспользуемую часть Силы Голоса кредитовать на время (делегировать) другому пользователю, который также может ее использовать по своему усмотрению. Кредитор Силы Голоса при этом получает дополнительную возможность голосования за пост и, следовательно, возможность получения дополнительного бонуса. +### 1.3. Создание аккаунта с делегированной Силой Голоса +Пользователь может создать новый аккаунт, на балансе кошелька которого будет находиться Сила Голоса. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька автора снимается определенная сумма. Величина этих отчислений не может быть меньше значения параметра `fee`, устанавливаемого по результатам голосования делегатов. Параметр `fee` показывает изначальный базовый баланс кошелька аккаунта, необходимый для его существования в системе. -Для выполнения операции делегирования кредитору Силы Голоса необходимо сформировать массив значений — блок делегирования с указанием типа операции, отправителя, получателя, сумма делегирования и пр. +Для того, чтобы пользователь нового аккаунта мог создавать посты, комментарии, а также участвовать в голосовании, необходимо, чтобы на балансе кошелька нового аккаунта появилась криптовалюта Сила Голоса в количестве не менее базового значения `fee`. Для этого с баланса кошелька создателя аккаунта снимается криптовалюта в виде Голоса и зачисляется на баланс кошелька нового аккаунта в виде Силы Голоса. +Вводится параметр `bandwidth`, устанавливающий пропускную способность аккаунта — количество операций, выполняемых пользователем за определенный период времени. Этот параметр зависит только от баланса Силы Голоса. Наличие в кошельке других видов криптовалюты \(Голоса и Золотого\) не оказывает на него влияния. Этот параметр ограничивает активность пользователя и не позволяет ему слишком часто создавать комментарии, принимать участие в голосовании или выполнять какие-либо другие операции. -Минимально возможное количество криптовалюты, необходимое для делегирования, является плавающей величиной и зависит от результатов голосования делегатов. - - -В блокчейне реализована блокировка различного рода злоупотреблений, связанных с использованием переводов криптовалюты из одного ее вида в другой и перечислением ее со счета на счет с целью обогащения. - - -#### 1.2. Изменение или возврат делегированной Силы Голоса -Кредитор Силы Голоса в случае каких-либо обстоятельств может изменить количество делегированного как в сторону его увеличения, так и уменьшения, а также осуществить возврат делегированного в полном объеме. - - -Для выполнения этой операции в сформированном блоке делегирования необходимо задать новое значение количества делегированной Силы Голоса. В случае полного ее возврата следует задать значение вида “0.000000 GESTS”. При изменении значения в сторону уменьшения делегированная Сила Голоса сразу снимается с аккаунта-получателя и переходит в «замороженное» состояние сроком на 7 дней. - - -Для выполнения этой операции требуется авторизация с помощью ключа `active`. - - -#### 1.3. Создание аккаунта с делегированной Силой Голоса -Пользователь может создать новый аккаунт, на балансе кошелька которого будет находиться Сила Голоса. За создание аккаунта в качестве комиссионных отчислений с баланса кошелька автора снимается определенная сумма. Величина этих отчислений не может быть меньше значения параметра `fee`, устанавливаемого по результатам голосования делегатов. Параметр `fee` показывает изначальный базовый баланс кошелька аккаунта, необходимый для его существования в системе. - - -Для того, чтобы пользователь нового аккаунта мог создавать посты, комментарии, а также участвовать в голосовании, необходимо, чтобы на балансе кошелька нового аккаунта появилась криптовалюта Сила Голоса в количестве не менее базового значения `fee`. Для этого с баланса кошелька создателя аккаунта снимается криптовалюта в виде Голоса и зачисляется на баланс кошелька нового аккаунта в виде Силы Голоса. - - -Вводится параметр `bandwidth`, устанавливающий пропускную способность аккаунта — количество операций, выполняемых пользователем за определенный период времени. Этот параметр зависит только от баланса Силы Голоса. Наличие в кошельке других видов криптовалюты (Голоса и Золотого) не оказывает на него влияния. Этот параметр ограничивает активность пользователя и не позволяет ему слишком часто создавать комментарии, принимать участие в голосовании или выполнять какие-либо другие операции. - - -Для операции создания аккаунта с делегированием необходима подпись ключом `active`. Созданный аккаунт может иметь ключи owner, `active`, `posting` и `memo`. - +Для операции создания аккаунта с делегированием необходима подпись ключом `active`. Созданный аккаунт может иметь ключи owner, `active`, `posting` и `memo`. **Примечания:** -1. Затрачиваемое на создание аккаунта количество криптовалюты не может быть возвращено обратно в кошелек создателя. - - -2. Создатель аккаунта может делегировать часть Силы Голоса на новый аккаунт. В этом случае делегированная часть будет также списана с баланса Силы Голоса его кошелька и зачислена на баланс Силы Голоса нового аккаунта. Делегированная Сила Голоса может быть возвращена в кошелек создателя через определенный период, длительность которого определяется голосованием. - - -### 2. Предотвращение злоупотреблений делегированием Силы Голоса с целью обогащения -Для предотвращения злоупотреблений делегированием Силы Голоса, связанных с быстрыми перечислениями криптовалюты с баланса кошелька кредитора на баланс кошелька заемщика и конвертацией Силы Голоса в Голос, в блокчейне реализовано решение, предотвращающее такие действия. Решение основано на задержке операции конвертации Силы Голоса в Голос. +1. Затрачиваемое на создание аккаунта количество криптовалюты не может быть возвращено обратно в кошелек создателя. +1. Создатель аккаунта может делегировать часть Силы Голоса на новый аккаунт. В этом случае делегированная часть будет также списана с баланса Силы Голоса его кошелька и зачислена на баланс Силы Голоса нового аккаунта. Делегированная Сила Голоса может быть возвращена в кошелек создателя через определенный период, длительность которого определяется голосованием. -Обналичивание Голоса в Силу Голоса осуществляется без задержки и, напротив, обналичивание Силы Голоса в Голос осуществляется по истечении семи дней. +## 2. Предотвращение злоупотреблений делегированием Силы Голоса с целью обогащения +Для предотвращения злоупотреблений делегированием Силы Голоса, связанных с быстрыми перечислениями криптовалюты с баланса кошелька кредитора на баланс кошелька заемщика и конвертацией Силы Голоса в Голос, в блокчейне реализовано решение, предотвращающее такие действия. Решение основано на задержке операции конвертации Силы Голоса в Голос. -В случае аннулирования кредитором делегированной Силы Голоса, она немедленно будет снята с кошелька заемщика в полном объеме, но возвращена в кошелек кредитора также по истечении семи дней. +Обналичивание Голоса в Силу Голоса осуществляется без задержки и, напротив, обналичивание Силы Голоса в Голос осуществляется по истечении семи дней. +В случае аннулирования кредитором делегированной Силы Голоса, она немедленно будет снята с кошелька заемщика в полном объеме, но возвращена в кошелек кредитора также по истечении семи дней. -### 3. Улучшение способа определения биржевого курса и соотношения криптовалют -Криптовалюты Голос и Золотой могут выставляться на биржевых торгах. В экономической составляющей блокчейна реализован динамический параметр, показывающий соотношение этих двух видов криптовалют, то есть их биржевой курс. Значение этого соотношения определяется делегатами системы. Каждый из них публикует свое значение курса, которое на его взгляд считается наиболее валидным. Значения курсов сохраняются в базе данных блокчейна, где они сортируются в порядке убывания. За результирующее значение курса криптовалют принимается их медианное значение. +## 3. Улучшение способа определения биржевого курса и соотношения криптовалют +Криптовалюты Голос и Золотой могут выставляться на биржевых торгах. В экономической составляющей блокчейна реализован динамический параметр, показывающий соотношение этих двух видов криптовалют, то есть их биржевой курс. Значение этого соотношения определяется делегатами системы. Каждый из них публикует свое значение курса, которое на его взгляд считается наиболее валидным. Значения курсов сохраняются в базе данных блокчейна, где они сортируются в порядке убывания. За результирующее значение курса криптовалют принимается их медианное значение. -В предыдущих версиях в процессе определения результирующего значение курса криптовалют использовались как новые предложенные данные от делегатов, так и старые, хранящиеся в базе данных блокчейна. Наличие последних в определении курса вносило неточность в итоговый результат. +В предыдущих версиях в процессе определения результирующего значение курса криптовалют использовались как новые предложенные данные от делегатов, так и старые, хранящиеся в базе данных блокчейна. Наличие последних в определении курса вносило неточность в итоговый результат. +В версии HF•18 старые значения курса удаляются из базы данных блокчейна и не участвуют в определении текущего курса криптовалют. Данная реализация обеспечивает более правильную ценовую политику Голоса и Золотого на биржевых торгах. -В версии HF•18 старые значения курса удаляются из базы данных блокчейна и не участвуют в определении текущего курса криптовалют. Данная реализация обеспечивает более правильную ценовую политику Голоса и Золотого на биржевых торгах. +## 4. Редактирование профиля пользователя с использованием ключа posting +В предыдущих версиях блокчейна редактирование любого поля профиля пользователя возможно было только с использованием ключа `active`. Поскольку этот ключ предназначен для выполнения наиболее ответственных операций, его использование для редактирования часто используемых полей профиля не всегда было приемлемым. -### 4. Редактирование профиля пользователя с использованием ключа posting -В предыдущих версиях блокчейна редактирование любого поля профиля пользователя возможно было только с использованием ключа `active`. Поскольку этот ключ предназначен для выполнения наиболее ответственных операций, его использование для редактирования часто используемых полей профиля не всегда было приемлемым. +Для устранения этого недостатка в версии HF•18 принято решение разделить поля профиля на две группы. В состав первой группы вошли поля с наиболее значимыми данными профиля \(ключи: `posting`, `active`, `owner` и `memo`\), а в другую — с менее значимыми, но часто используемыми \(аватар, пол, местонахождение и пр.\). Процедура изменения полей первой группы сохранена и возможна только с использованием ключа `active`. Процедура редактирования полей второй группы изменена и возможна с использованием ключа `posting`, что является наиболее приемлемым для пользователя. +## 5. Предложение на транзакцию, состоящей из нескольких операций -Для устранения этого недостатка в версии HF•18 принято решение разделить поля профиля на две группы. В состав первой группы вошли поля с наиболее значимыми данными профиля (ключи: `posting`, `active`, `owner` и `memo`), а в другую — с менее значимыми, но часто используемыми (аватар, пол, местонахождение и пр.). Процедура изменения полей первой группы сохранена и возможна только с использованием ключа `active`. Процедура редактирования полей второй группы изменена и возможна с использованием ключа `posting`, что является наиболее приемлемым для пользователя. +### 5.1. Предложение на транзакцию +Пользователю предоставляется возможность предлагать транзакцию на блокчейне, в состав которой входят несколько отдельных операций, на выполнение каждой из которых требуется одобрение от других пользователей. -### 5. Предложение на транзакцию, состоящей из нескольких операций +Предложение на транзакцию создается в виде блока, в который автор транзакции вводит информацию, необходимую для ее проведения. Этот блок отправляется в блокчейн, после чего пользователи видят информацию о предложенной транзакции в своих кошельках. Каждая операция из транзакции закрепляется за конкретным пользователем — участником транзакции, который может либо дать согласие на ее выполнение, либо отказаться, подписавшись соответствующим ключом. +Все подписи от участников транзакции отправляются на сервер и, в случае получения необходимого количества подписей, предложенная транзакция выполняется. На получение подписей, а также на выполнение транзакции отводится определенное время. -#### 5.1. Предложение на транзакцию -Пользователю предоставляется возможность предлагать транзакцию на блокчейне, в состав которой входят несколько отдельных операций, на выполнение каждой из которых требуется одобрение от других пользователей. +Право проставления подписи на выполнение любой из операций транзакции имеет каждый из участников транзакции. Например, операция публикации поста может быть назначена одному участнику транзакции, а операция перечисления вознаграждения за нее — другому. В случае несогласия другого участника с выполнением второй операции он может удалить уже поставившую подпись на выполнение первой операции данной транзакции. +Отдельная операция из перечня транзакции может рассматриваться как комплексная и на ее выполнение может быть также предложена отдельная транзакция, содержащая более одной операции. В этом случае формируется комплексная транзакция. Количество уровней вложенности комплексной транзакции ограничено и не может быть более двух. Такое ограничение вводится с целью снижения нагрузки на серверы и, соответственно, уменьшения времени выполнения транзакции. -Предложение на транзакцию создается в виде блока, в который автор транзакции вводит информацию, необходимую для ее проведения. Этот блок отправляется в блокчейн, после чего пользователи видят информацию о предложенной транзакции в своих кошельках. Каждая операция из транзакции закрепляется за конкретным пользователем — участником транзакции, который может либо дать согласие на ее выполнение, либо отказаться, подписавшись соответствующим ключом. +### 5.2. Обновление предложенной транзакции +Автору, а также участникам транзакции, предоставляется возможность менять свое решение и обновлять уже проставленные подписи до истечения времени, отводимого на транзакцию. -Все подписи от участников транзакции отправляются на сервер и, в случае получения необходимого количества подписей, предложенная транзакция выполняется. На получение подписей, а также на выполнение транзакции отводится определенное время. +Время на принятие решения участников транзакции ограничено и не может превышать максимально отведенное время на выполнение транзакции. Если транзакция не получает одобрения на выполнение какой-либо из операций, эта транзакция не отменяется и ее актуальность будет сохраняться до отведенного на ее выполнение времени. Как только все необходимые подписи будут получены, транзакция незамедлительно будет выполняться и, независимо от дальнейших решений участников транзакции, все последующие обновления будут считаться недействительными. +### 5.3. Удаление предложенной транзакции -Право проставления подписи на выполнение любой из операций транзакции имеет каждый из участников транзакции. Например, операция публикации поста может быть назначена одному участнику транзакции, а операция перечисления вознаграждения за нее — другому. В случае несогласия другого участника с выполнением второй операции он может удалить уже поставившую подпись на выполнение первой операции данной транзакции. +В случае отказа кого-либо из участников транзакции на выполнение операции он может сформировать на блокчейне запрос на удаление предложенной транзакции. Удалить предложенную транзакцию может как ее автор, так и любой ее участник, имеющий право на подпись. Если хотя бы один из участников транзакции формирует запрос на ее удаление, то, независимо от подписей остальных участников, данная транзакция будет удалена. +### 5.4. Эффективность предложенной транзакции -Отдельная операция из перечня транзакции может рассматриваться как комплексная и на ее выполнение может быть также предложена отдельная транзакция, содержащая более одной операции. В этом случае формируется комплексная транзакция. Количество уровней вложенности комплексной транзакции ограничено и не может быть более двух. Такое ограничение вводится с целью снижения нагрузки на серверы и, соответственно, уменьшения времени выполнения транзакции. +Независимо от того, содержит ли транзакция одну операцию или несколько, для ее выполнения требуется получение необходимого количества голосов. На выполнение нескольких операций можно последовательно сформировать столько же простых транзакций. Суммарное время сбора подписей на выполнение всех транзакций будет состоять из отдельных последовательных периодов. +Предложение на транзакцию с несколькими операциями является более эффективным ввиду того, что участники транзакции одновременно получают уведомления на разрешение выполнения всех операций. В этом случае на сбор подписей отводится всего один период, а не цепочка из отдельных последовательных периодов. -#### 5.2. Обновление предложенной транзакции -Автору, а также участникам транзакции, предоставляется возможность менять свое решение и обновлять уже проставленные подписи до истечения времени, отводимого на транзакцию. +## 6. Редактирование постов и комментариев к ним независимо от времени их публикации +В предыдущих версиях блокчейна на редактирование постов и комментариев к ним отводился определенный период, по истечении которого внесение изменений в них было невозможным. По этой причине посты со временем могли терять свою актуальность и их авторам вместо их обновления приходилось дополнительно создавать аналогичные посты в соответствии с текущей ситуацией. -Время на принятие решения участников транзакции ограничено и не может превышать максимально отведенное время на выполнение транзакции. -Если транзакция не получает одобрения на выполнение какой-либо из операций, эта транзакция не отменяется и ее актуальность будет сохраняться до отведенного на ее выполнение времени. Как только все необходимые подписи будут получены, транзакция незамедлительно будет выполняться и, независимо от дальнейших решений участников транзакции, все последующие обновления будут считаться недействительными. +В версии HF•18 этот недостаток устранен. Ограничение на выделенное для редактирования время не действует и, следовательно, в комментарии и посты всегда можно вносить свежую информацию и содержать их в актуальном состоянии. +## 7. Расширение перечня параметров блокчейна, значения которых определяются голосованием -#### 5.3. Удаление предложенной транзакции -В случае отказа кого-либо из участников транзакции на выполнение операции он может сформировать на блокчейне запрос на удаление предложенной транзакции. Удалить предложенную транзакцию может как ее автор, так и любой ее участник, имеющий право на подпись. Если хотя бы один из участников транзакции формирует запрос на ее удаление, то, независимо от подписей остальных участников, данная транзакция будет удалена. - - -#### 5.4. Эффективность предложенной транзакции -Независимо от того, содержит ли транзакция одну операцию или несколько, для ее выполнения требуется получение необходимого количества голосов. На выполнение нескольких операций можно последовательно сформировать столько же простых транзакций. Суммарное время сбора подписей на выполнение всех транзакций будет состоять из отдельных последовательных периодов. - - -Предложение на транзакцию с несколькими операциями является более эффективным ввиду того, что участники транзакции одновременно получают уведомления на разрешение выполнения всех операций. В этом случае на сбор подписей отводится всего один период, а не цепочка из отдельных последовательных периодов. - - -### 6. Редактирование постов и комментариев к ним независимо от времени их публикации -В предыдущих версиях блокчейна на редактирование постов и комментариев к ним отводился определенный период, по истечении которого внесение изменений в них было невозможным. По этой причине посты со временем могли терять свою актуальность и их авторам вместо их обновления приходилось дополнительно создавать аналогичные посты в соответствии с текущей ситуацией. - - -В версии HF•18 этот недостаток устранен. Ограничение на выделенное для редактирования время не действует и, следовательно, в комментарии и посты всегда можно вносить свежую информацию и содержать их в актуальном состоянии. - - -### 7. Расширение перечня параметров блокчейна, значения которых определяются голосованием Предыдущие версии блокчейна обеспечивали поддержку операции `witness_update`, с помощью которой определялись значения некоторых параметров делегатами Голоса по результатам голосования. В этот перечень входили следующие параметры: 1. `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; 2. `maximum_block_size` — максимальный размер блока блокчейна; -3. `sbd_interest_rate` — процент, начисляемый на SBD. - - -Недостаток заключался в том, что использование операции `witness_update` не позволяло расширить перечень таких параметров. +3. `sbd_interest_rate` — процент, начисляемый на SBD. +Недостаток заключался в том, что использование операции `witness_update` не позволяло расширить перечень таких параметров. В версии HF•18 реализована новая операция `chain_properties_update`, которая поддерживает более расширенный перечень параметров, значения которых определяются голосованием делегатов Голоса, и позволяет наращивать его в будущем. В новый перечень входят следующие параметры: 1. `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; @@ -174,149 +134,79 @@ 4. `create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием; 5. `create_account_min_delegation` — устанавливает минимально возможное количество Силы Голоса при создании аккаунта с делегированием; 6. `min_delegation` — устанавливает минимально возможное количество Силы Голоса для делегирования на аккаунт; -7. `create_account_delegation_time` — устанавливает минимально возможное время «заморозки» (в секундах) делегированной Силы Голоса при создании аккаунта с делегированием. - - -Параметры устанавливаются голосованием в абсолютных значениях. Изначально каждый из параметров принимает установленное для него значение по умолчанию. - +7. `create_account_delegation_time` — устанавливает минимально возможное время «заморозки» \(в секундах\) делегированной Силы Голоса при создании аккаунта с делегированием. -Для выполнения этой операции требуется подпись ключом `active`. +Параметры устанавливаются голосованием в абсолютных значениях. Изначально каждый из параметров принимает установленное для него значение по умолчанию. +Для выполнения этой операции требуется подпись ключом `active`. -### 8. Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными -Каждый создаваемый пользователем пост и комментарии к нему размещаются в отдельном блоке памяти. Физически такие блоки хранятся на дисках распределенной системы. +## 8. Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными +Каждый создаваемый пользователем пост и комментарии к нему размещаются в отдельном блоке памяти. Физически такие блоки хранятся на дисках распределенной системы. -В структуре каждого объекта, помимо поста и комментариев, содержатся метаданные и служебная информация, в том числе счетчики, используемые для расчета вознаграждения за пост. Поступление каждого голоса за пост вызывает изменение показаний счетчиков — количество набранных голосов, вес поста, а также размер ожидаемого вознаграждения на момент поступления голоса. Обработка голоса относится к наиболее часто выполняемой операции, требующей обновление объекта. Независимо от того, подлежит ли обновлению объект полностью или только в части показаний счетчиков, он требует полного перемещения с дискового пространства в оперативную память, а также последующего сохранения его на диск. +В структуре каждого объекта, помимо поста и комментариев, содержатся метаданные и служебная информация, в том числе счетчики, используемые для расчета вознаграждения за пост. Поступление каждого голоса за пост вызывает изменение показаний счетчиков — количество набранных голосов, вес поста, а также размер ожидаемого вознаграждения на момент поступления голоса. Обработка голоса относится к наиболее часто выполняемой операции, требующей обновление объекта. Независимо от того, подлежит ли обновлению объект полностью или только в части показаний счетчиков, он требует полного перемещения с дискового пространства в оперативную память, а также последующего сохранения его на диск. +В случае обработки большого объекта, когда его объем превышает объем выделенной оперативной памяти, происходит поэтапное считывание \(загрузка в память\) отдельных частей объекта, требующее дополнительных системных ресурсов. По этой причине на обработку объектов большого объема затрачивается значительно больше времени в отличие от времени обработки небольших объектов, полностью размещаемых в оперативной памяти. Интенсивное голосование за пост вызывает частое перемещение объекта, в котором этот пост размещен, и, следовательно, снижение производительности системы. -В случае обработки большого объекта, когда его объем превышает объем выделенной оперативной памяти, происходит поэтапное считывание (загрузка в память) отдельных частей объекта, требующее дополнительных системных ресурсов. По этой причине на обработку объектов большого объема затрачивается значительно больше времени в отличие от времени обработки небольших объектов, полностью размещаемых в оперативной памяти. Интенсивное голосование за пост вызывает частое перемещение объекта, в котором этот пост размещен, и, следовательно, снижение производительности системы. +С целью уменьшения времени, затрачиваемого на считывание объекта в память и сохранение его на диск, в HF•18 принято решение, разделить объект на две части, в одной из которых размещаются редко изменяемые данные объекта \(метаданные и тело поста\), в другой — счетчики, требующие обновления показателей с поступлением каждого голоса. Такая структура объекта позволила во время голосования перемещать в оперативную память на обработку только его изменяемую часть, в которой находятся счетчики, без риска потери какой-либо информации. Это сократило количество операций, выполняющих непосредственно перемещение объекта между диском и оперативной памятью, и, соответственно, положительно отразилось на производительности системы. +## 9. Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования -С целью уменьшения времени, затрачиваемого на считывание объекта в память и сохранение его на диск, в HF•18 принято решение, разделить объект на две части, в одной из которых размещаются редко изменяемые данные объекта (метаданные и тело поста), в другой — счетчики, требующие обновления показателей с поступлением каждого голоса. Такая структура объекта позволила во время голосования перемещать в оперативную память на обработку только его изменяемую часть, в которой находятся счетчики, без риска потери какой-либо информации. Это сократило количество операций, выполняющих непосредственно перемещение объекта между диском и оперативной памятью, и, соответственно, положительно отразилось на производительности системы. +### 9.1. Удаление неиспользуемых полей из методов плагинов +В системе кроме основных объектов хранятся объекты, обеспечивающие выполнение редкоиспользуемых функциональностей, которые пользователями могут быть не востребованы. В этих функциональностей может быть набор функций, которые могут быть востребованы пользователем. Хранение в системе таких функциональностей является малоэффективным. -### 9. Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования +В версии HF•18 было выполнено перемещение методов между плагинами с целью высвобождения из методов части неиспользуемых полей с последующим их удалением. Это позволило снизить нагрузку на используемую память. +### 9.2. Размещение индексных операций по блокам и аккаунтам в отдельных плагинах -#### 9.1. Удаление неиспользуемых полей из методов плагинов -В системе кроме основных объектов хранятся объекты, обеспечивающие выполнение редкоиспользуемых функциональностей, которые пользователями могут быть не востребованы. В этих функциональностей может быть набор функций, которые могут быть востребованы пользователем. Хранение в системе таких функциональностей является малоэффективным. - - -В версии HF•18 было выполнено перемещение методов между плагинами с целью высвобождения из методов части неиспользуемых полей с последующим их удалением. Это позволило снизить нагрузку на используемую память. - - -#### 9.2. Размещение индексных операций по блокам и аккаунтам в отдельных плагинах В состав индексных операций блокчейна входят в основном три вида операций, выполняемых по сформированному запросу на сервер: 1. получение списка операций, находящихся в блоках; 2. получение списка операций, находящихся в транзакциях; -3. получение списка операций, выполняемых каким-либо конкретным аккаунтом или связанных с ним. - +3. получение списка операций, выполняемых каким-либо конкретным аккаунтом или связанных с ним. -В предыдущих версиях блокчейна для получения информации об операциях третьего вида необходимо было включить плагин `account_history`. Недостаток заключался в том, что метод, непосредственно выполнявший данную функциональность, размещался в другом плагине `database_api`. Методы, выполнявшие операции видов 1 и 2 также размещались в плагине `database_api`. Для вызова каждого их трех методов необходимо было включать плагин `account_history`, что создавало дополнительную нагрузку на сервер и на потребляемую память, и, следовательно, отрицательно влияло на быстродействие системы. +В предыдущих версиях блокчейна для получения информации об операциях третьего вида необходимо было включить плагин `account_history`. Недостаток заключался в том, что метод, непосредственно выполнявший данную функциональность, размещался в другом плагине `database_api`. Методы, выполнявшие операции видов 1 и 2 также размещались в плагине `database_api`. Для вызова каждого их трех методов необходимо было включать плагин `account_history`, что создавало дополнительную нагрузку на сервер и на потребляемую память, и, следовательно, отрицательно влияло на быстродействие системы. +Кроме этого, возникали затруднения с настройкой сервера для включения какой-либо одной операции \(например, только индексирование операции по блоку и исключение других\). -Кроме этого, возникали затруднения с настройкой сервера для включения какой-либо одной операции (например, только индексирование операции по блоку и исключение других). +В версии HF•18 принято решение переместить модули, выполняющие индексные операции, из плагина `database_api` в плагины в соответствии с их функциональностью. +Метод, возвращающий список операций по аккаунту, был перемещен в плагин `account_history`, обеспечивающий данную функциональность. Методы, используемые для индексирования операций в блоках и транзакциях были перемещены в новый плагин `operation_history`. Это позволило логически сконцентрировать компоненты, обеспечивающие включение индексов и самих операций, по которым могут отдельно быть получены списки операций по блокам, транзакциям или по аккаунту. Теперь для получения списка операций в блоках и транзакциях достаточно будет включить плагин `operation_history`. Для получения более расширенной информации по аккаунтам необходимо подключить `account_history`. Исключение лишних операций индексирования позволило снизить нагрузку на сервер и память и, соответственно, повысить производительность системы. -В версии HF•18 принято решение переместить модули, выполняющие индексные операции, из плагина `database_api` в плагины в соответствии с их функциональностью. +## 10. Использование тэгов при формировании запросов на получение необходимой информации +В предыдущих версиях блокчейна поиск интересующей пользователя информации инициировал операции индексирования. Для поиска корневого элемента \(например, поста или комментария\) необходимо было подключиться к плагину `SocialNetwork`, где также инициировался поиск по дополнительным индексам. Последнее приводило к тому, что пользователю наряду с полезной также выдавалась не представляющая ему интерес информация. Из-за наличия в выдаче большого объема ненужной информации увеличивался размер файла разделяемой памяти, что негативно отражалось на производительности системы. -Метод, возвращающий список операций по аккаунту, был перемещен в плагин `account_history`, обеспечивающий данную функциональность. Методы, используемые для индексирования операций в блоках и транзакциях были перемещены в новый плагин `operation_history`. Это позволило логически сконцентрировать компоненты, обеспечивающие включение индексов и самих операций, по которым могут отдельно быть получены списки операций по блокам, транзакциям или по аккаунту. Теперь для получения списка операций в блоках и транзакциях достаточно будет включить плагин `operation_history`. Для получения более расширенной информации по аккаунтам необходимо подключить `account_history`. -Исключение лишних операций индексирования позволило снизить нагрузку на сервер и память и, соответственно, повысить производительность системы. +В версии HF•18 методы, обеспечивающие поиск информации по индексам, размещены в двух отдельных плагинах. Часть методов, обрабатывающие теги \(например, получение наиболее популярных тэгов, получение списка языков, получение используемых автором списка тэгов и др.\) была перемещена из плагина `SocialNetwork` в отдельный плагин `Tag`. Дополнительные индексы для сортировки по тэгам создавались только в этом плагине. +В плагине `SocialNetwork` сохранились методы, обеспечивающие обращение к корневым элементам для получения, например, контента, целиком вложенного дерева, списка активных голосов и др. -### 10. Использование тэгов при формировании запросов на получение необходимой информации -В предыдущих версиях блокчейна поиск интересующей пользователя информации инициировал операции индексирования. Для поиска корневого элемента (например, поста или комментария) необходимо было подключиться к плагину `SocialNetwork`, где также инициировался поиск по дополнительным индексам. Последнее приводило к тому, что пользователю наряду с полезной также выдавалась не представляющая ему интерес информация. Из-за наличия в выдаче большого объема ненужной информации увеличивался размер файла разделяемой памяти, что негативно отражалось на производительности системы. +Такое разделение методов позволяет пользователю формировать запрос на получение только необходимой ему информации. Чтобы избежать получения контента целиком, пользователю достаточно указать параметры, по которым идентифицируется часть контента \(ограничения, набор тэгов\). +Поскольку пост может содержать значительное количество \(более тысячи\) комментариев, пользователь может сформировать запрос на получение только выбранной \(отсортированной\) в соответствии с указанными в тэге признаками части комментариев. -В версии HF•18 методы, обеспечивающие поиск информации по индексам, размещены в двух отдельных плагинах. -Часть методов, обрабатывающие теги (например, получение наиболее популярных тэгов, получение списка языков, получение используемых автором списка тэгов и др.) была перемещена из плагина `SocialNetwork` в отдельный плагин `Tag`. Дополнительные индексы для сортировки по тэгам создавались только в этом плагине. +Введен параметр `vote_limit`, с помощью которого пользователь может ограничить получаемый список проголосовавших. Этот параметр позволяет уменьшить размер отправляемого от сервера ответа. При этом в ответе добавляется дополнительное поле `active_votes_count`, информирующее об общем количестве проголосовавших без получения списка целиком. +## 11. Получение информации о текущем статусе разделяемой памяти -В плагине `SocialNetwork` сохранились методы, обеспечивающие обращение к корневым элементам для получения, например, контента, целиком вложенного дерева, списка активных голосов и др. +В версии HF•18 реализована возможность пользователю получать информацию о текущем статусе разделяемой памяти. Для этого пользователю достаточно сформировать запрос в блокчейн. В состав получаемой информации о текущем статусе разделяемой памяти входят следующие данные: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти \(название индекса, количество записей\). +## 12. Постраничный просмотр личных сообщений пользователя -Такое разделение методов позволяет пользователю формировать запрос на получение только необходимой ему информации. Чтобы избежать получения контента целиком, пользователю достаточно указать параметры, по которым идентифицируется часть контента (ограничения, набор тэгов). - - -Поскольку пост может содержать значительное количество (более тысячи) комментариев, пользователь может сформировать запрос на получение только выбранной (отсортированной) в соответствии с указанными в тэге признаками части комментариев. - - -Введен параметр `vote_limit`, с помощью которого пользователь может ограничить получаемый список проголосовавших. Этот параметр позволяет уменьшить размер отправляемого от сервера ответа. При этом в ответе добавляется дополнительное поле `active_votes_count`, информирующее об общем количестве проголосовавших без получения списка целиком. - - -### 11. Получение информации о текущем статусе разделяемой памяти -В версии HF•18 реализована возможность пользователю получать информацию о текущем статусе разделяемой памяти. Для этого пользователю достаточно сформировать запрос в блокчейн. В состав получаемой информации о текущем статусе разделяемой памяти входят следующие данные: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти (название индекса, количество записей). - - -### 12. Постраничный просмотр личных сообщений пользователя -Общее количество сообщений во время голосования за пост может достигать такого значения, когда просмотр пользователем личных сообщений становится затрудненным. - +Общее количество сообщений во время голосования за пост может достигать такого значения, когда просмотр пользователем личных сообщений становится затрудненным. Для устранения этого недостатка были модифицированы методы в плагине `private_message`. Данная доработка обеспечивает следующие возможности: 1. выделять интересующие пользователя личные сообщения из общего потока исходящих или входящих сообщений с указанием даты их поступления; 2. просматривать личные сообщения в режиме постраничного вывода на экран; -3. ограничить количество поступающих сообщений. +3. ограничить количество поступающих сообщений. +## 13. Улучшения в подсистеме хранения блоков цепочки -### 13. Улучшения в подсистеме хранения блоков цепочки В блокчейне имеются два вида хранилищ: 1. разделяемая память, размещенная в файле `shared_memory.bin` и предназначенная для хранения актуальных данных состояния системы; -2. цепочка из упакованных в определенном порядке подписанных блоков, размещенных в файле `block_log`. - - -Обращения к цепочке блоков происходят редко. Обычно это происходит по точечным запросам через API-вызовы для получения тела подписанного блока, синхронизации данных между серверами и ряда других операций. Каждое обращение к файлу `block_log` инициирует значительное количество системных вызовов, в том числе: открытие файла, поиск необходимой позиции и считывание данных из файла. Одновременно с этими операциями может выполняться запись информации в конец файла, требующая от системы подобных действий — переоткрытие файла, поиск конечной позиции в файле и запись в файл. - - -В предыдущих версиях блокчейна одновременные обращения к файлу `block_log` как по чтению, так и по записи вызывали блокирование доступа к файлу, что негативно влияло на производительность сервера. С целью устранения такого недостатка в HF-18 была реализована новая технология, обеспечивающая одновременный доступ к файлу `block_log` по чтению без замедления работы сервера. Блокирование доступа к файлу `block_log` происходит только во время выполнения операции записи. - - -### Используемая терминология -**Автор транзакции** — пользователь, предлагаемый на голосование созданную им транзакцию на блокчейне. - - -**Аккаунт** (англ. account) — хранимая в системе учетная запись пользователя для его опознавания (аутентификации) и предоставления доступа к его личным данным и настройкам. - - -**Блокчейн** (англ. block chain — цепочка блоков) — строго структурированная база данных с определенными правилами построения цепочек транзакций и доступа к информации, которая исключает кражу данных, мошенничество, нарушение имущественных прав и т. д. - - -**Голос** или **Golos** — криптовалюта, обеспечивающая перечисление средств между кошельками (счетами) пользователей, а также конвертацию или продажу на биржевом рынке. - - -**Золотой** или **GBG** (англ. Golden Backed by Golos) — криптовалюта, обеспечивающая хеджирование активов пользователя, то есть поддержку активов определенными фондами (золотом, рублями и пр.). Блокчейн гарантирует выплату владельцу активов сумму денежных средств, эквивалентную стоимости этих активов. Единица Золотого оценивается в 1 мг золота. Этот курс является базовым для проведения операций с внешним экономическим миром. Общее количество такого вида криптовалюты в системе не должно превышать 5%. В случае несоблюдения этого условия, правила, по которым функционирует блокчейн, должны быть изменены. - - -**Кошелек** или **блокчейн-кошелек** (англ. blockchain wallet) — веб-кошелек для хранения криптовалюты. - - -**Кредитор** — пользователь, который делегирует часть Силы Голоса другому пользователю. - - -**Криптовалюта** — разновидность цифровой валюты, создание и контроль над которой базируются на криптографических методах. Golos Core поддерживает операции над тремя видами криптовалюты: Голос, Сила Голоса и Золотой. - - -**Медианное значение** — значение, определяемое выборкой из середины множества чисел, расположенных в определенном порядке (по убыванию или по возрастанию). Например, медианное значение множества {8, 8, 7, 2, 1} равняется 7, так как это число находится в середине множества. Если множество состоит из четного количества чисел, то результатом является полусумма двух соседних значений. Например, медианное значение множества {7, 5, 3, 1} равняется 4. - - -**Плагин** (англ. plugin) — программный компонент, выполненный в виде отдельного модуля и являющийся дополнением к основной программе. - - -**Пост** (англ. to post — размещать, публиковать) — любая статья или запись на веб-странице, содержащая название, перечень ключевых слов и непосредственно текст. - - -**Сила Голоса** или **Golos Power** — криптовалюта, обеспечивающая создание постов и комментариев, а также голосование за посты в системе блокчейн. Эффективность постов оценивается количеством Силы Голоса. - - -**Участник транзакции** — пользователь, который отвечает за выполнение отдельной операции из предложенной транзакции. - -#### Полезные ссылки: -https://wiki.golos.io/golosd/HardFork/New_HardFork-HF18.html -https://wiki.golos.io/golosd/HardFork/RC2-HF18.html -https://wiki.golos.io/golosd/HardFork/HF18_cli_wallet_changes-rus.html - -*** +2. цепочка из упакованных в определенном порядке подписанных блоков, размещенных в файле `block_log`. +Обращения к цепочке блоков происходят редко. Обычно это происходит по точечным запросам через API-вызовы для получения тела подписанного блока, синхронизации данных между серверами и ряда других операций. Каждое обращение к файлу `block_log` инициирует значительное количество системных вызовов, в том числе: открытие файла, поиск необходимой позиции и считывание данных из файла. Одновременно с этими операциями может выполняться запись информации в конец файла, требующая от системы подобных действий — переоткрытие файла, поиск конечной позиции в файле и запись в файл. +В предыдущих версиях блокчейна одновременные обращения к файлу `block_log` как по чтению, так и по записи вызывали блокирование доступа к файлу, что негативно влияло на производительность сервера. С целью устранения такого недостатка в HF-18 была реализована новая технология, обеспечивающая одновременный доступ к файлу `block_log` по чтению без замедления работы сервера. Блокирование доступа к файлу `block_log` происходит только во время выполнения операции записи. diff --git a/golosd/HardFork/HF19_ReleaseNotice-rus.md b/developers/hardforks/hf19_release.md similarity index 60% rename from golosd/HardFork/HF19_ReleaseNotice-rus.md rename to developers/hardforks/hf19_release.md index 5738af2d..781767e8 100644 --- a/golosd/HardFork/HF19_ReleaseNotice-rus.md +++ b/developers/hardforks/hf19_release.md @@ -1,228 +1,230 @@ -# GOLOS·CORE -# Очередная версия HardFork 19.0 +# HF19: Новые возможности -***Golos·Core объявляет о выпуске очередной версии HardFork 19.0, в которой реализованы новые функциональные возможности, а также устранены недостатки предыдущих версий. Обновления поддержаны большинством голосов делегатов.*** +## Внедрение реферальной программы в блокчейн Golos -**Важное:** -***Новые функциональные и технические возможности вносят изменения в правила экономической модели блокчейна. HF-19.0 требует выполнения переиндексации из всех предыдущих версий.*** +**\(Задача** [**№295**](https://github.com/GolosChain/golos/issues/295)**\)** +Решением делегатов было предложено реализовать в HF-19.0 новую функциональную возможность — внедрить реферальную программу привлечения новых пользователей. -## Содержание - +**Реализация новой функциональности** -**** -## Внедрение реферальной программы в блокчейн Golos -**(Задача [№295](https://github.com/GolosChain/golos/issues/295))** - -Решением делегатов было предложено реализовать в HF-19.0 новую функциональную возможность — внедрить реферальную программу привлечения новых пользователей. - -**Реализация новой функциональности** - -Реализация реферальной программы предусматривает вознаграждение пользователей (рефереров), пригласивших для регистрации в блокчейн своих друзей или сторонних лиц через социальные сети (просматривая публикации сторонних авторов или размещая собственные посты о блокчейне). +Реализация реферальной программы предусматривает вознаграждение пользователей \(рефереров\), пригласивших для регистрации в блокчейн своих друзей или сторонних лиц через социальные сети \(просматривая публикации сторонних авторов или размещая собственные посты о блокчейне\). Для реализации реферальной программы в HF-19.0 добавлены следующие операции: -— создание аккаунта-реферала для приглашенного пользователя. В качестве реферера для аккаунт-реферала может быть указан как пользователем, непосредственно пригласивший другого пользователя, так и сторонний аккаунт; +— создание аккаунта-реферала для приглашенного пользователя. В качестве реферера для аккаунт-реферала может быть указан как пользователем, непосредственно пригласивший другого пользователя, так и сторонний аккаунт; — прекращение действия реферальной программы пользователем-рефералом через выкуп своего аккаунта. Операция позволяет рефералу выкупить свой аккаунт для прекращения выплат рефереру; — получение информации о пользователе-реферале; -— получение информации о пользователе-реферале по его комментарию или посту. +— получение информации о пользователе-реферале по его комментарию или посту. -1) Пример команды для создания аккаунта-реферала с использованием `cli_wallet` имеет вид: -``` +1\) Пример команды для создания аккаунта-реферала с использованием `cli_wallet` имеет вид: + +```text create_account_referral test "0.200 GOLOS" "0.000001 GESTS" "{}" {"referrer": "test", "interest_rate": 900, "end_date": "2018-09-26T14:00:00", "break_fee": "0.000 GOLOS"} true ``` + где: `referral` — имя аккаунта-реферала; `referrer` — имя аккаунта-реферера; `interest_rate` — процент выплат рефереру от доходов реферала, умноженный на 100. Максимальный процент выплаты рефереру устанавливается голосованием делегатов через операцию `update_chain_properties()`. Выплаты рефереру осуществляются через назначение реферера бенефициаром в публикуемых постах; -`end_date` — дата окончания выплат рефереру из доходов реферала. Максимальный срок выплаты рефереру устанавливается голосованием делегатов через операцию `update_chain_properties()`; -`break_fee` — cумма выкупа рефералом своего аккаунта для прекращения выплат рефереру. Если в качестве сумма выплаты будет указан 0, то аккаунт нельзя будет выкупить. Максимальная сумма выплаты выбирается делегатами через операцию `update_chain_properties()` по медиане. +`end_date` — дата окончания выплат рефереру из доходов реферала. Максимальный срок выплаты рефереру устанавливается голосованием делегатов через операцию `update_chain_properties()`; +`break_fee` — cумма выкупа рефералом своего аккаунта для прекращения выплат рефереру. Если в качестве сумма выплаты будет указан 0, то аккаунт нельзя будет выкупить. Максимальная сумма выплаты выбирается делегатами через операцию `update_chain_properties()` по медиане. -2) Пример задания команды для операции по прекращению выплат рефереру имеет вид: -``` +2\) Пример задания команды для операции по прекращению выплат рефереру имеет вид: + +```text break_free_referral true ``` -3) Для получения информации о пользователе-реферале через `cli_wallet` используется команда `get_account`. Для придания аккаунту-рефералу особого статуса в системе в ответ API-метода `golos.api.getAccounts()` добавлены следующие поля: -``` + +3\) Для получения информации о пользователе-реферале через `cli_wallet` используется команда `get_account`. Для придания аккаунту-рефералу особого статуса в системе в ответ API-метода `golos.api.getAccounts()` добавлены следующие поля: + +```text "referrer_account": "test", "referrer_interest_rate": 900, "referral_end_date": "2018-09-26T14:00:00", "referral_break_fee": "0.002 GOLOS" ``` -В период действия реферальной программы для аккаунта-реферала значения полей соответствуют полям из `account_referral_options`. После прекращения действия реферальной программы поля принимают нулевые значения. -4) Для получения информации о пользователе-реферале по его комментарию или посту в поле `beneficiaries` добавляется объект с параметрами account= и weight=. Выплата рефереру осуществляются с учетом этих параметров. - -## Изменение метода начисления вознаграждения кураторам (доработка для штрафного окна голосования) -**(Задача [№898](https://github.com/GolosChain/golos/issues/898))** +В период действия реферальной программы для аккаунта-реферала значения полей соответствуют полям из `account_referral_options`. После прекращения действия реферальной программы поля принимают нулевые значения. + +4\) Для получения информации о пользователе-реферале по его комментарию или посту в поле `beneficiaries` добавляется объект с параметрами account= и weight=. Выплата рефереру осуществляются с учетом этих параметров. + +## Изменение метода начисления вознаграждения кураторам \(доработка для штрафного окна голосования\) -Начало голосования за пост начинается сразу по завершении его публикации. Размер вознаграждения кураторам за голосование зависит от времени голосования. Длительность интервала, отведенного для голосования составляла 30 мин — аукционное окно (англ. auction window), которое открывалось сразу по завершении создания поста. Вес голоса, отданного в интервале этого окна вычислялся по формуле - ``` -W = t / (30 × 60) × weight +**\(Задача** [**№898**](https://github.com/GolosChain/golos/issues/898)**\)** + +Начало голосования за пост начинается сразу по завершении его публикации. Размер вознаграждения кураторам за голосование зависит от времени голосования. Длительность интервала, отведенного для голосования составляла 30 мин — аукционное окно \(англ. auction window\), которое открывалось сразу по завершении создания поста. Вес голоса, отданного в интервале этого окна вычислялся по формуле + +```text +W = t / (30 × 60) × weight ``` + где: -t — время голосования с момента открытия окна (в секундах); -(30 × 60) — продолжительность окна (в секундах); -weight — вес голоса аккаунта. - -В соответствии с этой формулой результирующий вес W уменьшается пропорционально раннему голосованию — более ранний голос, отданный в период открытого окна, получает более меньший вес. При этом недостающая (срезанная) часть токенов начисляется автору поста. Голосование в период открытого окна более выгодно авторам поста. - -В версии HF-19.0 (по предложению делегатов) доработан алгоритм для более гибкого начисления вознаграждения кураторам, в том числе: +t — время голосования с момента открытия окна \(в секундах\); +\(30 × 60\) — продолжительность окна \(в секундах\); +weight — вес голоса аккаунта. + +В соответствии с этой формулой результирующий вес W уменьшается пропорционально раннему голосованию — более ранний голос, отданный в период открытого окна, получает более меньший вес. При этом недостающая \(срезанная\) часть токенов начисляется автору поста. Голосование в период открытого окна более выгодно авторам поста. + +В версии HF-19.0 \(по предложению делегатов\) доработан алгоритм для более гибкого начисления вознаграждения кураторам, в том числе: — стало возможным изменять длительность аукционного окна голосованием делегатов через операцию `update_chain_properties()`; -— стало возможным недостающую (срезанную) часть токенов возвращать либо в пул вознаграждений, либо кураторам, проголосовавшим после закрытия аукционного окна. Решение о том, куда направлять срезанную часть токенов, принимает автор поста. - +— стало возможным недостающую \(срезанную\) часть токенов возвращать либо в пул вознаграждений, либо кураторам, проголосовавшим после закрытия аукционного окна. Решение о том, куда направлять срезанную часть токенов, принимает автор поста. + С этой целью в метод `comment_options_operation` добавлена опция `comment_auction_window_reward_destination`, принимающая следующие значения: -`to_reward_fund` — возврат токенов в пул вознаграждений. При возврате токенов в пул-вознаграждений генерируется виртуальная операция auction_window_reward_operation; +`to_reward_fund` — возврат токенов в пул вознаграждений. При возврате токенов в пул-вознаграждений генерируется виртуальная операция auction\_window\_reward\_operation; `to_curators` — возврат токенов кураторам, проголосовавшим после закрытия аукционного окна; -`to_author` — только для постов, созданных до релиза HF-19.0 (после релиза HF-19.0 выбор данного варианта будет невозможным). - +`to_author` — только для постов, созданных до релиза HF-19.0 \(после релиза HF-19.0 выбор данного варианта будет невозможным\). ## Возможность делегатов изменять интервалы времени, отводимые на создание постов, оставление комментариев и голосование -**(Задачи [№№533](https://github.com/GolosChain/golos/issues/533), [1002](https://github.com/GolosChain/golos/issues/1002))** -Делегатами было предложено сократить временные интервалы, отводимые на создание постов, оставление комментариев к посту и голосование, составляющие 5 мин, 20 и 3 с соответственно. Такие жестко установленные интервалы имеют недостаток. Например, за отведенное время 20 с могут появиться до десяти и более комментариев, на ответы которых делегатам приходится затрачивать значительное время. +**\(Задачи** [**№№533**](https://github.com/GolosChain/golos/issues/533)**,** [**1002**](https://github.com/GolosChain/golos/issues/1002)**\)** -В версии HF-19.0 появилась возможность изменять длительности интервалов (окон), отводимых на создание постов, оставление комментариев и на голосование, а также возможность изменять предельно допустимое количество постов, комментариев и голосов, оставляемых в течение этих интервалов. +Делегатами было предложено сократить временные интервалы, отводимые на создание постов, оставление комментариев к посту и голосование, составляющие 5 мин, 20 и 3 с соответственно. Такие жестко установленные интервалы имеют недостаток. Например, за отведенное время 20 с могут появиться до десяти и более комментариев, на ответы которых делегатам приходится затрачивать значительное время. -В операцию `update_chain_properties`, с помощью которой конфигурируется блокчейн, добавлены параметры `posts_window`, `posts_per_window`, `comments_window`, `comments_per_window`, `votes_window`, `votes_per_window`. С помощью этих параметров делегаты могут задавать длительности интервалов, в течение которых разрешается создавать посты, оставлять комментарии и голосовать, а также допустимое количество комментариев и голосов, оставляемых в течение этих интервалов. Значения этих параметров определяются голосованием делегатов через операцию update_chain_properties(), за результаты которых принимаются медианные значения. +В версии HF-19.0 появилась возможность изменять длительности интервалов \(окон\), отводимых на создание постов, оставление комментариев и на голосование, а также возможность изменять предельно допустимое количество постов, комментариев и голосов, оставляемых в течение этих интервалов. + +В операцию `update_chain_properties`, с помощью которой конфигурируется блокчейн, добавлены параметры `posts_window`, `posts_per_window`, `comments_window`, `comments_per_window`, `votes_window`, `votes_per_window`. С помощью этих параметров делегаты могут задавать длительности интервалов, в течение которых разрешается создавать посты, оставлять комментарии и голосовать, а также допустимое количество комментариев и голосов, оставляемых в течение этих интервалов. Значения этих параметров определяются голосованием делегатов через операцию update\_chain\_properties\(\), за результаты которых принимаются медианные значения. В версии HF-19.0 длительность окна для комментирования и допустимое количество оставленных комментариев в течение этого окна составляют 200 с и 10 шт. соответственно. Длительность окна для голосования и допустимое количество отданных голосов в течение этого окна составляют 15 с и 5 шт. соответственно. -Кроме этого в версии HF-19.0 доработан алгоритм, ограничивающий чрезмерную активность пользователей в создании постов, в комментировании и голосовании. Алгоритм позволяет более гибко совершать действия подряд без ожидания завершения 20-секундного интервала до начала следующего действия. Алгоритм работает по принципу «батарейки». Минимальная частота совершаемых действий определяется по формуле -``` +Кроме этого в версии HF-19.0 доработан алгоритм, ограничивающий чрезмерную активность пользователей в создании постов, в комментировании и голосовании. Алгоритм позволяет более гибко совершать действия подряд без ожидания завершения 20-секундного интервала до начала следующего действия. Алгоритм работает по принципу «батарейки». Минимальная частота совершаемых действий определяется по формуле + +```text V=window/items ``` + где: `window` — длительность интервала, отведенного на отдельный вид действий; -`items` — количество публикаций, комментариев или голосов, оставленных за отведенный интервал. - -Медианное значение выбирается через сортировку указанных делегатами значений по двум величинам — минимальная частота действий, и длина окна в которое эти действия можно совершать. +`items` — количество публикаций, комментариев или голосов, оставленных за отведенный интервал. -Пользователь может создавать посты, оставлять комментарии или участвовать в голосовании при условии наличия ресурсов (заряда) в его «батарейке». Алгоритм фиксирует время появления поста и содержимого заряда «батарейки», расходуемого с оставлением каждого комментария к посту или голосованием. +Медианное значение выбирается через сортировку указанных делегатами значений по двум величинам — минимальная частота действий, и длина окна в которое эти действия можно совершать. +Пользователь может создавать посты, оставлять комментарии или участвовать в голосовании при условии наличия ресурсов \(заряда\) в его «батарейке». Алгоритм фиксирует время появления поста и содержимого заряда «батарейки», расходуемого с оставлением каждого комментария к посту или голосованием. ## Начисление делегирующему Силы голоса доли от кураторских -**(Задача [№756](https://github.com/GolosChain/golos/issues/756))** -Количество желающих делегировать Силу голоса невелико. Отчасти это вызвано тем, что делегирующий (инвестор СГ) не получает каких-либо отчислений от кураторских вознаграждений и следовательно не получает вознаграждение вообще. +**\(Задача** [**№756**](https://github.com/GolosChain/golos/issues/756)**\)** + +Количество желающих делегировать Силу голоса невелико. Отчасти это вызвано тем, что делегирующий \(инвестор СГ\) не получает каких-либо отчислений от кураторских вознаграждений и следовательно не получает вознаграждение вообще. В версии HF-19.0 добавлена возможность устанавливать процент отчислений инвестору СГ. Куратору, которому делегируется СГ, по результатам голосования за пост отчисляет часть кураторских выплат инвестору. Алгоритм начисления инвесторам СГ реализован в соответствии со следующими особенностями : -1) Выплата вознаграждений инвесторам происходит одновременно с выплатами кураторам, которым делегировали СГ инвесторы. Инвестору начисляется определенный процент от выплаты куратору. Размер отчисления инвестору определяется по следующей формуле: -``` +1\) Выплата вознаграждений инвесторам происходит одновременно с выплатами кураторам, которым делегировали СГ инвесторы. Инвестору начисляется определенный процент от выплаты куратору. Размер отчисления инвестору определяется по следующей формуле: + +```text Вознаграждение инвестору = (вознаграждение куратора) × (доля инвестора в СГ куратора) × (процент отчислений инвестору) где: доля инвестора в СГ куратора = (количество делегированной СГ) / (общее количество СГ куратора) ``` -2) Процент отчислений инвестору назначается непосредственно инвестором. -Верхнее значение процента отчислений инвестору устанавливается голосованием делегатов с использованием операции `update_chain_properties()`. -3) В блокчейн добавлена новая виртуальная операция `delegation_reward_operation`, которая используется для уведомления делегаторов о получаемых ими вознаграждениях за делегированную СГ. +2\) Процент отчислений инвестору назначается непосредственно инвестором. Верхнее значение процента отчислений инвестору устанавливается голосованием делегатов с использованием операции `update_chain_properties()`. -4) Возможность отказа от делегированной СГ получателем (в случае нежелания обмена выплат с инвестором). Для этого была добавлена операция `reject_vesting_shares_delegation_operation`. -При отказе получателя от делегированной СГ, ее автоматическое зачисление на его баланс получателя не производится. Возврат делегированной СГ делегатору происходит после окончания заморозки длительностью 7 дней. +3\) В блокчейн добавлена новая виртуальная операция `delegation_reward_operation`, которая используется для уведомления делегаторов о получаемых ими вознаграждениях за делегированную СГ. +4\) Возможность отказа от делегированной СГ получателем \(в случае нежелания обмена выплат с инвестором\). Для этого была добавлена операция `reject_vesting_shares_delegation_operation`. +При отказе получателя от делегированной СГ, ее автоматическое зачисление на его баланс получателя не производится. Возврат делегированной СГ делегатору происходит после окончания заморозки длительностью 7 дней. ## Возможность пользователя хранить личную информацию в хэш-таблице хранилища в виде key-value -**(Задача [№924](https://github.com/GolosChain/golos/issues/924))** -Решением делегатов было предложено реализовать в HF-19.0 новую функциональную возможность — предоставить возможность пользователю сохранять нужную ему информацию в хэш-таблице хранилища в виде key-value. - -Решение основано на создании нового плагина `account_notes`, который позволяет аккаунту сохранять необходимую для него информацию в хэш-таблице базы данных системы в виде записей «key-value» в зависимости от настроек конфигурационного файла `config.ini`. Объем информации для хранения на отдельном Узле (ноде) блокчейна определяется с учетом ресурсов этого Узла. - +**\(Задача** [**№924**](https://github.com/GolosChain/golos/issues/924)**\)** + +Решением делегатов было предложено реализовать в HF-19.0 новую функциональную возможность — предоставить возможность пользователю сохранять нужную ему информацию в хэш-таблице хранилища в виде key-value. + +Решение основано на создании нового плагина `account_notes`, который позволяет аккаунту сохранять необходимую для него информацию в хэш-таблице базы данных системы в виде записей «key-value» в зависимости от настроек конфигурационного файла `config.ini`. Объем информации для хранения на отдельном Узле \(ноде\) блокчейна определяется с учетом ресурсов этого Узла. + В плагине `account_notes` реализован вызов операции `set_value_operation`, выполняющей создание, изменение и удаление записи в хэш-таблице хранилища. Операция вызывается с полями account, key и value. -Для изменения записи в хэш-таблице операция вызывается с ключом уже имеющейся записи. Для удаления записи в хэш-таблице операция вызывается с ключом уже имеющейся записи и пустым значением. - -В конфигурационный файл `config.ini` добавлены следующие настраиваемые параметры: -— `an-tracked-accounts` — «белый» список аккаунтов. Используется для задания списка аккаунтов, которым разрешено сохранять записи. По умолчанию задается пустое поле, разрешающее хранение записей всем аккаунтам; +Для изменения записи в хэш-таблице операция вызывается с ключом уже имеющейся записи. Для удаления записи в хэш-таблице операция вызывается с ключом уже имеющейся записи и пустым значением. + +В конфигурационный файл `config.ini` добавлены следующие настраиваемые параметры: — `an-tracked-accounts` — «белый» список аккаунтов. Используется для задания списка аккаунтов, которым разрешено сохранять записи. По умолчанию задается пустое поле, разрешающее хранение записей всем аккаунтам; — `an-untracked-accounts` — «черный» список аккаунтов. Содержит список аккаунтов, которым не разрешается хранение записей. По умолчанию задается пустое поле; — `an-max-key-length` — максимально допустимое количество символов в ключе. По умолчанию содержит значение 20; — `an-max-value-length` — максимально допустимое количество символов в записи. По умолчанию содержит значение 512; -— `an-max-note-count` — максимально допустимое количество записей для одного аккаунта. По умолчанию содержит значение 10. +— `an-max-note-count` — максимально допустимое количество записей для одного аккаунта. По умолчанию содержит значение 10. В случае превышения в сохраняемой записи установленных граничных значений операция не выполняется. При этом сообщение об ошибке не выдается. Для контроля успешного сохранения информации пользователь должен запросить у Узла его текущую конфигурацию и сопоставить данные сохраняемой записи с граничными значениями этого Узла. -После HF-19.0 стоимость ресурсов бендвича для операций `custom_json` будет увеличиваться за счет умножения на значение мультипликатора. По умолчанию значение мультипликатора составляет 100. Делегаты могут изменить данное значение путем голосования через операцию `update_chain_properties()`. Это позволяет пользователям с большим количеством СГ сохранять в хэш-таблице информацию более часто и большего размера в отличие от пользователей с меньшим количеством СГ. +После HF-19.0 стоимость ресурсов бендвича для операций `custom_json` будет увеличиваться за счет умножения на значение мультипликатора. По умолчанию значение мультипликатора составляет 100. Делегаты могут изменить данное значение путем голосования через операцию `update_chain_properties()`. Это позволяет пользователям с большим количеством СГ сохранять в хэш-таблице информацию более часто и большего размера в отличие от пользователей с меньшим количеством СГ. ## Возможность автора устанавливать размер кураторских отчислений за пост -**(Задачи [№№324](https://github.com/GolosChain/golos/issues/324), [677](https://github.com/GolosChain/golos/issues/677))** -В предыдущей версии доля выплаты кураторам была неизменной и составляла 25 % от суммы вознаграждения автору поста. В версии HF-19.0 делегатам предоставляется возможность изменять это значение и устанавливать границы его изменений в интервале от 25 до 100 % включительно. +**\(Задачи** [**№№324**](https://github.com/GolosChain/golos/issues/324)**,** [**677**](https://github.com/GolosChain/golos/issues/677)**\)** + +В предыдущей версии доля выплаты кураторам была неизменной и составляла 25 % от суммы вознаграждения автору поста. В версии HF-19.0 делегатам предоставляется возможность изменять это значение и устанавливать границы его изменений в интервале от 25 до 100 % включительно. -В случае, если делегаты устанавливают интервал возможных значений доли выплаты кураторам, авторы также могут устанавливать это значение по своему усмотрению для каждого публикуемого поста, но в пределах установленных делегатами границ. После создания поста автор может указать процент кураторских отчислений от ожидаемого вознаграждения за этот пост (автор не может выбрать процент кураторских отчислений до тех пор, пока делегаты не установят его граничные значения). Это позволяет автору поста увеличивая процент кураторских отчислений, стимулировать кураторов голосовать за их посты чаще. +В случае, если делегаты устанавливают интервал возможных значений доли выплаты кураторам, авторы также могут устанавливать это значение по своему усмотрению для каждого публикуемого поста, но в пределах установленных делегатами границ. После создания поста автор может указать процент кураторских отчислений от ожидаемого вознаграждения за этот пост \(автор не может выбрать процент кураторских отчислений до тех пор, пока делегаты не установят его граничные значения\). Это позволяет автору поста увеличивая процент кураторских отчислений, стимулировать кураторов голосовать за их посты чаще. -Сумма средств, полученная от процента кураторских отчислений, распределяется между кураторами в соответствии с их весом. Вес куратора определяется по одному из трех алгоритмов: -- Старый алгоритм (bounded) — алгоритм, в соответствии с которым доля кураторского вознаграждения определяется в зависимости от времени голосования и используемой Силы Голоса. В версии HF-19.0 этот метод распределения вознаграждения между кураторами сохраняется. -- Линейный алгоритм (linear). Вес куратора зависит от средств в виде Силы Голоса и не зависит от времени голосования. Устанавливается по умолчанию. -- Алгоритм квадратного корня (sqrt_root). Вес куратора вычисляется с учетом уже имеющихся голосов за пост (отданных другими кураторами) и зависит от времени голосования. Например, если проголосовали 2 куратора с одинаковой Силой Голоса, но в разное время, то второй из проголосовавших получит вознаграждение меньше первого в два раза. +Сумма средств, полученная от процента кураторских отчислений, распределяется между кураторами в соответствии с их весом. Вес куратора определяется по одному из трех алгоритмов: -В версии HF-19.0 делегатам предоставляется возможность выбирать один из трех приведенных алгоритмов через операцию `update_chain_properties`. +* Старый алгоритм \(bounded\) — алгоритм, в соответствии с которым доля кураторского вознаграждения определяется в зависимости от времени голосования и используемой Силы Голоса. В версии HF-19.0 этот метод распределения вознаграждения между кураторами сохраняется. +* Линейный алгоритм \(linear\). Вес куратора зависит от средств в виде Силы Голоса и не зависит от времени голосования. Устанавливается по умолчанию. +* Алгоритм квадратного корня \(sqrt\_root\). Вес куратора вычисляется с учетом уже имеющихся голосов за пост \(отданных другими кураторами\) и зависит от времени голосования. Например, если проголосовали 2 куратора с одинаковой Силой Голоса, но в разное время, то второй из проголосовавших получит вознаграждение меньше первого в два раза. -В операцию `comment_options_operation` добавлена структура `comment_curation_rewards_percent`. С помощью этой операции автор может задать процент кураторских отчислений. +В версии HF-19.0 делегатам предоставляется возможность выбирать один из трех приведенных алгоритмов через операцию `update_chain_properties`. + +В операцию `comment_options_operation` добавлена структура `comment_curation_rewards_percent`. С помощью этой операции автор может задать процент кураторских отчислений. **Примечание:** Поскольку данная функциональность не утверждена делегатами, в настоящий момент процент кураторских выплат зафиксирован и составляет 25 %. -## Устранение недостатка в ответе API-метода get_account -**(Задача [№825](https://github.com/GolosChain/golos/issues/825))** +## Устранение недостатка в ответе API-метода get\_account + +**\(Задача** [**№825**](https://github.com/GolosChain/golos/issues/825)**\)** -Во входящем ответе на запрос `get_accounts` API-метода информация о количестве постов и комментариев находилась исключительно в поле `post_count`, при этом поле `comment_count` всегда возвращалось пустым. Также при этом отсутствовало какое-либо сообщение об ошибке, что могло привести пользователей в конфузное состояние. +Во входящем ответе на запрос `get_accounts` API-метода информация о количестве постов и комментариев находилась исключительно в поле `post_count`, при этом поле `comment_count` всегда возвращалось пустым. Также при этом отсутствовало какое-либо сообщение об ошибке, что могло привести пользователей в конфузное состояние. -В версии HF-19.0 этот недостаток устранен. Был доработан метод `get_accounts` для корректной записи данных в соответствующие поля при создании поста и комментария. Поле `comment_count` содержит количество комментариев, а поле `post_count` — только количество постов. +В версии HF-19.0 этот недостаток устранен. Был доработан метод `get_accounts` для корректной записи данных в соответствующие поля при создании поста и комментария. Поле `comment_count` содержит количество комментариев, а поле `post_count` — только количество постов. ## Изменения в логике системы при долге системы, превышающем 10 % -**(Задача [№952](https://github.com/GolosChain/golos/issues/952))** -В предыдущих версиях блокчейна в логику системы в части эмиссии GBG был заложен следующий алгоритм: -- если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, не превышает 10 % от стоимости всех токенов GBG и GOLOS, авторам постов начисляется вознаграждение в соответствии со следующей схемой: - - если долг системы не превышает 2 %, то авторам постов начисляется вознаграждение в виде GBG; - - если долг системы выше 2 %, но не превышает 5 %, то авторам постов начисляется вознаграждение в виде GBG и GESTS. При этом, при увеличении долга системы от 2 до 5 % включительно количественное соотношение GBG к GESTS пропорционально уменьшается (например, при долге системы 3,5 % вознаграждение начисляется в виде GBG и GESTS в соотношении 1:1. При долге системы 5 % вознаграждение начисляется только в виде GESTS); - - если долг системы превышает 5 %, прекращается начисление вознаграждения авторам постов. При этом владельцам токенов GBG выплата процентных начислений не прекращается; -- если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, превышает 10 % от стоимости всех токенов GBG и GOLOS, выплата процентных начислений владельцам токенов GBG продолжается без прекращения эмиссии этого вида токенов. +**\(Задача** [**№952**](https://github.com/GolosChain/golos/issues/952)**\)** -В версии HF-19.0 внесены изменения в логику системы в части эмиссии GBG. Изменилась работа алгоритма при долге системы, превышающем 10 %. Измененная часть алгоритма: -- если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, превышает 10 % от стоимости всех токенов GBG и GOLOS, выплата процентных начислений владельцам токенов GBG прекращается без прекращения эмиссии этого вида токенов. +В предыдущих версиях блокчейна в логику системы в части эмиссии GBG был заложен следующий алгоритм: -При превышении долга системы на 10 % в системе устанавливается флаг, сигнализирующий достижение граничного значения токена GBG. Пользователь будет оповещен о состоянии этого флага при выполнении API-операции получения информации о текущем состоянии системы. +* если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, не превышает 10 % от стоимости всех токенов GBG и GOLOS, авторам постов начисляется вознаграждение в соответствии со следующей схемой: + * если долг системы не превышает 2 %, то авторам постов начисляется вознаграждение в виде GBG; + * если долг системы выше 2 %, но не превышает 5 %, то авторам постов начисляется вознаграждение в виде GBG и GESTS. При этом, при увеличении долга системы от 2 до 5 % включительно количественное соотношение GBG к GESTS пропорционально уменьшается \(например, при долге системы 3,5 % вознаграждение начисляется в виде GBG и GESTS в соотношении 1:1. При долге системы 5 % вознаграждение начисляется только в виде GESTS\); + * если долг системы превышает 5 %, прекращается начисление вознаграждения авторам постов. При этом владельцам токенов GBG выплата процентных начислений не прекращается; +* если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, превышает 10 % от стоимости всех токенов GBG и GOLOS, выплата процентных начислений владельцам токенов GBG продолжается без прекращения эмиссии этого вида токенов. +В версии HF-19.0 внесены изменения в логику системы в части эмиссии GBG. Изменилась работа алгоритма при долге системы, превышающем 10 %. Измененная часть алгоритма: + +* если общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, превышает 10 % от стоимости всех токенов GBG и GOLOS, выплата процентных начислений владельцам токенов GBG прекращается без прекращения эмиссии этого вида токенов. + +При превышении долга системы на 10 % в системе устанавливается флаг, сигнализирующий достижение граничного значения токена GBG. Пользователь будет оповещен о состоянии этого флага при выполнении API-операции получения информации о текущем состоянии системы. ## Сброс понижения силы голоса на другой аккаунт после восстановления учетной записи -**(Задача [№971](https://github.com/GolosChain/golos/issues/971))** -В предыдущих версиях блокчейна отсутствовала защита средств, имеющихся на счету аккаунта, в случае несанкционированного доступа к личному ключу аккаунта. Злоумышленник, завладев личным ключом аккаунта, мог поменять его и от имени аккаунта запустить операцию по выводу всех средств в виде GESTS. При этом при восстановлении аккаунта операция по выводу средств продолжалась и попытка отменить ее завершалась безуспешно. +**\(Задача** [**№971**](https://github.com/GolosChain/golos/issues/971)**\)** + +В предыдущих версиях блокчейна отсутствовала защита средств, имеющихся на счету аккаунта, в случае несанкционированного доступа к личному ключу аккаунта. Злоумышленник, завладев личным ключом аккаунта, мог поменять его и от имени аккаунта запустить операцию по выводу всех средств в виде GESTS. При этом при восстановлении аккаунта операция по выводу средств продолжалась и попытка отменить ее завершалась безуспешно. В версии HF-19.0 введена доработка, обеспечивающая блокировку операции по выводу средств со счета аккаунта в случае потери личного ключа или несанкционированного доступа к личному ключу аккаунта. -Доработана операция `withdraw_vesting`. Операция по выводу средств длится в течение 13 недель. Во время выполнения этой операции с частотой один раз в семь дней выводятся средства в виде GESTS. После восстановления учетной записи (аккаунта) автоматически отменяется операция `set_withdraw_vesting_route`. Удаляются все выводы из расписания. При этом все выплаты в GESTS восстанавливаются за исключением той части средств, которая уже до восстановления учетной записи была выведена в качестве выплат. +Доработана операция `withdraw_vesting`. Операция по выводу средств длится в течение 13 недель. Во время выполнения этой операции с частотой один раз в семь дней выводятся средства в виде GESTS. После восстановления учетной записи \(аккаунта\) автоматически отменяется операция `set_withdraw_vesting_route`. Удаляются все выводы из расписания. При этом все выплаты в GESTS восстанавливаются за исключением той части средств, которая уже до восстановления учетной записи была выведена в качестве выплат. ## Оптимизация расчета ожидаемых выплат автору и кураторам -**(Задача [№976](https://github.com/GolosChain/golos/issues/976))** -После публикации поста открывается окно для голосования, за время которого определяется процент начисления автору и кураторам от вознаграждения за публикацию поста. Алгоритм выплаты состоит из таких операций как просмотр списка кураторов, определение процента выплат для каждого из кураторов, а также время их голосования с учетом штрафного окна. На этот процесс затрачиваются значительные ресурсы системы. Чтобы автор и куратор могли получить информацию об ожидаемых (прогнозируемых) им выплатах, потребовалось бы выполнять более сложные расчеты и, соответственно, увеличивать нагрузку на систему. +**\(Задача** [**№976**](https://github.com/GolosChain/golos/issues/976)**\)** + +После публикации поста открывается окно для голосования, за время которого определяется процент начисления автору и кураторам от вознаграждения за публикацию поста. Алгоритм выплаты состоит из таких операций как просмотр списка кураторов, определение процента выплат для каждого из кураторов, а также время их голосования с учетом штрафного окна. На этот процесс затрачиваются значительные ресурсы системы. Чтобы автор и куратор могли получить информацию об ожидаемых \(прогнозируемых\) им выплатах, потребовалось бы выполнять более сложные расчеты и, соответственно, увеличивать нагрузку на систему. В новой версии блокчейна предложено для демонстрации ожидаемых выплат автору и кураторам расчет выполнять более простым способом, обеспечивающим получать значения выплат близким к реальным и с наименьшей нагрузкой на систему. После реализации стратегий с помощью окна аукциона получаемое сообщение имеет полную информацию о весе голосов кураторов, поэтому расчет ожидаемых выплат может быть оптимизирован. Из алгоритма вычисления ожидаемых выплат удалены операции, результат которых не оказывает существенного влияния на конечный результат. Сокращение операций в алгоритме вычисления ожидаемых выплат обеспечил снижение нагрузок на систему без существенного отклонения от реальных значений выплат. - ## Возможность постраничного просмотра и сортировки результата, получаемого от API-запроса -**(Задача [№981](https://github.com/GolosChain/golos/issues/981))** -Просмотр списка проголосовавших за пост выполняется через API-запросы вида `social_network::select_active_votes`. Количество проголосовавших может быть чрезмерно большим и поэтому просмотр списка голосов в виде «лайков» или «дизлайков» может занимать длительное время. В предыдущей версии блокчейна голоса появлялись в списке в соответствии с их появлением в окне голосования без учета их веса, что затрудняло анализ результатов голосования. +**\(Задача** [**№981**](https://github.com/GolosChain/golos/issues/981)**\)** -В версии HF-19.0 реализована новая функциональная возможность, обеспечивающий постраничный ввод списка проголосовавших, а также сортировку голосов по уменьшению их веса (голоса с наибольшим весом располагаются в начале списка). Сортировка голосов выполняется автоматически. Доработка позволяет сократить время на просмотр результатов голосования. +Просмотр списка проголосовавших за пост выполняется через API-запросы вида `social_network::select_active_votes`. Количество проголосовавших может быть чрезмерно большим и поэтому просмотр списка голосов в виде «лайков» или «дизлайков» может занимать длительное время. В предыдущей версии блокчейна голоса появлялись в списке в соответствии с их появлением в окне голосования без учета их веса, что затрудняло анализ результатов голосования. +В версии HF-19.0 реализована новая функциональная возможность, обеспечивающий постраничный ввод списка проголосовавших, а также сортировку голосов по уменьшению их веса \(голоса с наибольшим весом располагаются в начале списка\). Сортировка голосов выполняется автоматически. Доработка позволяет сократить время на просмотр результатов голосования. ## Устранена ошибка в подсчете количества личных сообщений -**(Задача [№990](https://github.com/GolosChain/golos/issues/990))** - -Пользователь имеет возможность получать статистическую информацию о количестве поступающих личных сообщений от аккаунтов, в том числе от закрепленного с ним в переписке (англ. pinned), от неизвестного (англ. unknown) и заблокированного (англ. ignored) аккаунтов. -В предыдущей версии блокчейна после удаления пользователем сообщений от одного из этих типов аккаунтов, данные о количестве личных сообщений от другого типа аккаунта могли быть также изменены и быть некорректными (например, отображать максимально возможное значение). -В версии HF-19.0 доработаны счетчики, обрабатывающие количество поступающих пользователю личных сообщений, для каждого типа аккаунтов. Доработка обеспечила корректный подсчет личных сообщений пользователя, поступающих от аккаунтов всех типов. + +**\(Задача** [**№990**](https://github.com/GolosChain/golos/issues/990)**\)** + +Пользователь имеет возможность получать статистическую информацию о количестве поступающих личных сообщений от аккаунтов, в том числе от закрепленного с ним в переписке \(англ. pinned\), от неизвестного \(англ. unknown\) и заблокированного \(англ. ignored\) аккаунтов. В предыдущей версии блокчейна после удаления пользователем сообщений от одного из этих типов аккаунтов, данные о количестве личных сообщений от другого типа аккаунта могли быть также изменены и быть некорректными \(например, отображать максимально возможное значение\). В версии HF-19.0 доработаны счетчики, обрабатывающие количество поступающих пользователю личных сообщений, для каждого типа аккаунтов. Доработка обеспечила корректный подсчет личных сообщений пользователя, поступающих от аккаунтов всех типов. ## Используемая терминология -**Аккаунт** (англ. account) — хранимая в системе учетная запись пользователя для его опознавания (аутентификации) и предоставления доступа к его личным данным и настройкам. -**Аккаунт-реферал** — аккаунт, созданный для приглашенного в систему пользователя (реферала) другим пользователем (реферером) этой системы. -**Медианное значение** — значение, определяемое выборкой из середины множества чисел, расположенных в определенном порядке (по убыванию или по возрастанию). Например, медианное значение множества {8, 8, 7, 2, 1} равняется 7, так как это число находится в середине множества. Если множество состоит из четного количества чисел, то результатом является полусумма двух соседних значений. Например, медианное значение множества {7, 5, 3, 1} равняется 4. -**Пост** (англ. to post — размещать, публиковать) — любая статья или запись на веб-странице, содержащая название, перечень ключевых слов и непосредственно текст. -**Реферал** (англ. referral) — пользователь системы, приглашенный и зарегистрировавший в системе по рекомендации другого пользователя этой системы. -**Реферер** (англ. referrer) — пользователь системы, привлекающий в данную систему других пользователей. -**Токен** (англ. token) — внутренняя платежная единица, предназначенная для представления цифрового баланса в некотором активе (не является криптовалютой). - - -**** + +**Аккаунт-реферал** — аккаунт, созданный для приглашенного в систему пользователя \(реферала\) другим пользователем \(реферером\) этой системы. +**Медианное значение** — значение, определяемое выборкой из середины множества чисел, расположенных в определенном порядке \(по убыванию или по возрастанию\). Например, медианное значение множества {8, 8, 7, 2, 1} равняется 7, так как это число находится в середине множества. Если множество состоит из четного количества чисел, то результатом является полусумма двух соседних значений. Например, медианное значение множества {7, 5, 3, 1} равняется 4. +**Реферал** \(англ. referral\) — пользователь системы, приглашенный и зарегистрировавший в системе по рекомендации другого пользователя этой системы. +**Реферер** \(англ. referrer\) — пользователь системы, привлекающий в данную систему других пользователей. + diff --git a/developers/hardforks/hf20_release.md b/developers/hardforks/hf20_release.md new file mode 100644 index 00000000..a1740911 --- /dev/null +++ b/developers/hardforks/hf20_release.md @@ -0,0 +1,12 @@ +# HF20: Устранение критического бага + +## Внесено изменение в программный код вычисления процента отчислений делегатору при голосовании за пост \(задача [№1074](https://github.com/GolosChain/golos/issues/1074)\) + +Делегаторам, для которых операция вычисления процента выплаты от кураторских вознаграждений завершилась с ошибкой, выплата в полном объеме будет зачислена на баланс куратора. Данное решение было согласовано с пострадавшими кураторами и делегаторами. + +Делегаторы, для которых операция вычисления процента выплаты от кураторских вознаграждений завершилась успешно, получат вознаграждение в соответствии с вычисленным процентом + +## Внесен запрет на изменение процента выплаты от кураторских вознаграждений после начала голосования \(задача [№1075](https://github.com/GolosChain/golos/issues/1075)\) + +Автор поста может многократно изменять процент выплаты от кураторских вознаграждений. Автору поста будет отказано в изменении значения процента после того, как первый куратор проголосует за данный пост. + diff --git a/developers/hardforks/hf22_release.md b/developers/hardforks/hf22_release.md new file mode 100644 index 00000000..cf19d38b --- /dev/null +++ b/developers/hardforks/hf22_release.md @@ -0,0 +1,40 @@ +# HF22: Новые возможности + +## Система воркеров + +О системе воркеров/исполнителей можно прочитать [здесь](https://golos.id/ru--golos/@lex/sistema-vorkerov-dlya-golos-blockchain), этот функционал позволит привлечь пользователей к участию в развитии Golos Blockchain, появлению новых приложений, клиентов, игр, ботов, документации, маркетинговой активности и многому другому. + +Важно, что не только делегаты, а все участники сообщества могут голосовать по заявкам воркеров. + +## Распределение эмиссии + +У делегатов появилась возможность менять параметры % распределения эмиссии по пулам + +* worker\_reward\_percent +* witness\_reward\_percent +* vesting\_reward\_percent + +Также были сняты ограничения по параметрам на % прибыли от делегирования `max_delegated_vesting_interest_rate` \([исключен предел](https://github.com/GolosChain/golos/issues/1008) в макс. 80%\) и кураторских отчислений `min_curation_percent` \([исключен предел](https://github.com/GolosChain/golos/issues/1009) в мин. 25%\). Оба параметра опционально позволят исп. делегатам значения в диапазоне от 0 до 100%. Параметр количества апвоутов в день `vote_regeneration_per_day` сделан голосуемым делегатами \(по умолчанию 10 вместо 40\). + +Исправлена и [ошибка](https://github.com/GolosChain/golos/issues/1010) из-за которой пользователи не могли добавлять посты в случае превышения порога активности на публикацию комментариев. + +## Понижение СГ при неактивности + +В случае если на аккаунте в течении 12 месяцев \(срок голосуемый делегатами `account_idleness_time`\) не было совершенно действий с использованием активного ключа \(перевод токенов, ставка на внутренней бирже, голос за делегата и пр.\) - отменяется делегирование и запускается механизм понижения Силы Голоса в ликвидные токены Голос. + +Тем самым такие аккаунты перестанут влиять на выбор делегатов и получать % на вестинг/СГ из эмиссии при "полной пассивности" участия в проекте. + +## Принцип голосования за делегатов + +Важным [изменением](https://github.com/GolosChain/golos/issues/820) станет и смена принципа голосования за делегатов. Если ранее можно было выбирать 30 делегатов с полным весом своего стека СГ за каждого из них \(о минусах подобного писали [тут](https://golos.id/newgolos/@newgolos/voterules323289)\), после 22ХФ размер стека СГ стал делиться на кол-во поддерживаемых делегатов. + +Напр. если у вас 30 000 СГ и вы поддержите 3 делегатов, в поддержку каждого из них "пойдет" по 10 000 СГ. + +Также в код был добавлен автоматический сброс голосов с делегатов, у которых прошло 12 месяцев \(срок голосуемый делегатами `witness_idleness_time`\) с момента подписания последнего блока. + +## Решение по вопросу GBG + +С учётом того, что вариант из [поста](https://golos.id/golos/@gusaru/sostoyanie-defolta-golos-blockchain-i-chto-s-etim-delat) @gusaru ранее [рассматривался](https://steemit.com/steem/@dantheman/steem-dollar-stability-enhancements) как оптимальный и одним из создателей Bitshares/Steem/EOS, в составе ХФ была принята именно эта реализация: _при объеме долга более 20% запускается механизм ежедневной конвертации 1% доступных на балансах GBG в GOLOS_ \(ордера на внутренней бирже перед конвертацией будут отменяться\). + +Процент ежедневной конвертации `sbd_debt_convert_rate` голосуемый делегатами, по умолчанию 1%. + diff --git a/golosd/HardFork/SF-0.18.4_ReleaseNotice-rus.md b/developers/hardforks/sf18.4_release.md similarity index 57% rename from golosd/HardFork/SF-0.18.4_ReleaseNotice-rus.md rename to developers/hardforks/sf18.4_release.md index d798cac8..c66b9ee3 100644 --- a/golosd/HardFork/SF-0.18.4_ReleaseNotice-rus.md +++ b/developers/hardforks/sf18.4_release.md @@ -1,516 +1,584 @@ -# GOLOS·CORE -# Очередная версия SoftFork 0.18.4 +# SF18.4: Новые возможности -***Golos·Core объявляет о выпуске очередной версии SoftFork 0.18.4, в которой реализованы новые функциональные возможности, а также устранены недостатки предыдущих версий. Обновления поддержаны большинством голосов делегатов.*** - - -**Важное:** -***SF 0.18.4 требует выполнения переиндексации из всех предыдущих версий.*** - - - -**** ## Дополнительная информация в оповещениях о подписанных блоках + ### Получение информации о виртуальных операциях в блоке -В предыдущих версиях SF пользователь мог подписаться на получение актуальной информации в виде оповещения о новых блоках, создаваемых в блокчейне. Операция выполнялась вызовом метода `set_block_applied_callback()`. Получаемое пользователем оповещение было недостаточно полным и содержало только информацию о подписанном блоке без информации о виртуальных операциях в этом блоке. + +В предыдущих версиях SF пользователь мог подписаться на получение актуальной информации в виде оповещения о новых блоках, создаваемых в блокчейне. Операция выполнялась вызовом метода `set_block_applied_callback()`. Получаемое пользователем оповещение было недостаточно полным и содержало только информацию о подписанном блоке без информации о виртуальных операциях в этом блоке. В версии SF-0.18.4 в вызов метода `set_block_applied_callback()` добавлен настраиваемый параметр type, принимающий четыре значения. В зависимости от задаваемого значения этого параметра, пользователь может получать следующую информацию о блоке: — подписанный блок; — заголовок блока; — виртуальные операции блока; -— подписанный блок и виртуальные операции. - -Пользователь имеет возможность получать не только наиболее полную информацию о подписанном блоке, но также задавать ее содержимое по своему усмотрению. +— подписанный блок и виртуальные операции. +Пользователь имеет возможность получать не только наиболее полную информацию о подписанном блоке, но также задавать ее содержимое по своему усмотрению. -Соответствие задаваемого значения параметра и типа получаемой информации приведено в следующей таблице. +Соответствие задаваемого значения параметра и типа получаемой информации приведено в следующей таблице. +| Значение параметра | Альтернативное значение параметра | Тип информации в оповещении | +| :--- | :--- | :--- | +| «block» | 0 | Подписанный блок \(по аналогии с версией HF 18.0\) | +| «header» | 1 | Заголовок блока \(по аналогии с версией HF 16.4\) | +| «virtual\_ops» | 2 | Только виртуальные операции блока | +| «full» | 3 | Подписанный блок и виртуальные операции блока | -Значение параметра | Альтернативное значение параметра | Тип информации в оповещении -:----------------- |:-------------- |:------------------------- -«block» | 0 | Подписанный блок (по аналогии с версией HF 18.0) -«header» | 1 | Заголовок блока (по аналогии с версией HF 16.4) -«virtual_ops» | 2 | Только виртуальные операции блока -«full» | 3 | Подписанный блок и виртуальные операции блока - - -Любое другое задаваемое значение параметра принимается методом `set_block_applied_callback()` как «block». +Любое другое задаваемое значение параметра принимается методом `set_block_applied_callback()` как «block». Доработка выполнена с сохранением обратной совместимости с предыдущими версиями SF. В доработке применяется ранее неиспользуемый параметр, в поле которого был ноль. В версии SF-0.18.4 это поле отведено под тип возвращаемого результата. В случае задания в этом поле нулевого значения, возвращаемый результат будет соответствовать результату предыдущих версий. Добавление трех новых значений этого параметра расширяет возможность API. -Метод имеет следующий вид: +Метод имеет следующий вид: + ```cpp void set_block_applied_callback( - block_applied_callback_result_type type + block_applied_callback_result_type type ) ``` + Параметр: -`type` — тип информации в получаемом оповещении. +`type` — тип информации в получаемом оповещении. + ### Получение информации о транзакциях на Узле, не включенных в блок -В версии SF-0.18.4 введен дополнительный (ранее разработанный, но заблокированный для использования) вид операции оповещения пользователя о блоках. Данная операция выполняет отправку сообщения пользователю о появившихся на Узле блокчейна транзакциях, уже подписанных, но еще не включенных в блок. Информация о таких транзакциях отсутствует в блоках и поэтому не может быть доступна пользователю с помощью обычного вызова `set_block_applied_callback()`. -Пользователю для подписания на получение оповещения о таких транзакциях необходимо вызвать API-метод `set_pending_transaction_callback()`. +В версии SF-0.18.4 введен дополнительный \(ранее разработанный, но заблокированный для использования\) вид операции оповещения пользователя о блоках. Данная операция выполняет отправку сообщения пользователю о появившихся на Узле блокчейна транзакциях, уже подписанных, но еще не включенных в блок. Информация о таких транзакциях отсутствует в блоках и поэтому не может быть доступна пользователю с помощью обычного вызова `set_block_applied_callback()`. + +Пользователю для подписания на получение оповещения о таких транзакциях необходимо вызвать API-метод `set_pending_transaction_callback()`. + ### Получение информации о вознаграждении подписчика блока -В версии SF-0.18.4 введена новая виртуальная (не заданная явным образом) операция `producer_reward_operation()`, генерируемая на каждом из блоков. Операция оповещает пользователя о вознаграждении в виде GESTS подписчика блока — продюсера блока, которым может являться одно из следующих лиц: + +В версии SF-0.18.4 введена новая виртуальная \(не заданная явным образом\) операция `producer_reward_operation()`, генерируемая на каждом из блоков. Операция оповещает пользователя о вознаграждении в виде GESTS подписчика блока — продюсера блока, которым может являться одно из следующих лиц: — делегат, входящий в утвержденный список делегатов; — делегат, выбранный случайным образом; -— майнер. +— майнер. Виртуальная операция имеет вид: + ```cpp struct producer_reward_operation { - account_name_type producer; - asset vesting_shares + account_name_type producer; + asset vesting_shares }; ``` + Параметры: `producer` — имя аккаунта-продюсера блока; -`vesting_shares` — размер вознаграждения (в GESTS). +`vesting_shares` — размер вознаграждения \(в GESTS\). + +Виртуальная операция хранится в истории Узла блокчейна и может быть запрошена API-методом `get_ops_in_block()` для получения информации о вознаграждении продюсера блока. Метод имеет вид: -Виртуальная операция хранится в истории Узла блокчейна и может быть запрошена API-методом `get_ops_in_block()` для получения информации о вознаграждении продюсера блока. Метод имеет вид: ```cpp std::vector get_ops_in_block( - uint32_t block_num, - bool only_virtual + uint32_t block_num, + bool only_virtual ) ``` -Параметры: + +Параметры: `block_num` — идентификатор блока, виртуальные операции которого запрашиваются; -`only_virtual` — «true», если возвращаются только виртуальные операции. +`only_virtual` — «true», если возвращаются только виртуальные операции. -## Улучшение диагностики ошибок -В предыдущих версиях диагностическая информация об ошибках, возникающих в работе с блокчейном, выдавалась пользователю в виде малоинформативного текстового сообщения, анализ которого был затруднен. Текст сообщения содержал общую информацию и пользователю сложно было выявить причину возникновения ошибки. +## Улучшение диагностики ошибок -В версии SF-0.18.4 реализовано решение, обеспечивающее выдачу пользователю диагностической информации об ошибке с описанием уровня иерархической структуры блокчейна, на котором возникает ошибка. Решение основано на разбиении всех ошибок по категориям и формировании диагностической информации для каждой категории. +В предыдущих версиях диагностическая информация об ошибках, возникающих в работе с блокчейном, выдавалась пользователю в виде малоинформативного текстового сообщения, анализ которого был затруднен. Текст сообщения содержал общую информацию и пользователю сложно было выявить причину возникновения ошибки. + +В версии SF-0.18.4 реализовано решение, обеспечивающее выдачу пользователю диагностической информации об ошибке с описанием уровня иерархической структуры блокчейна, на котором возникает ошибка. Решение основано на разбиении всех ошибок по категориям и формировании диагностической информации для каждой категории. Был проведен анализ ошибок непосредственно в местах их формирования с последующей их классификацией по информативным признакам. В результате анализа было выделено три класса ошибок: 1. ошибки пользователя в задании параметров; -2. ошибки пользователя при выполнении операций бизнес-логики (например, превышение bandwidth; -3. ошибки в тексте программы (внутренние ошибки блокчейна, не зависящие от пользователя). - +2. ошибки пользователя при выполнении операций бизнес-логики \(например, превышение bandwidth; +3. ошибки в тексте программы \(внутренние ошибки блокчейна, не зависящие от пользователя\). Каждый из этих классов ошибок был разбит на подклассы и далее на категории ошибок. Были получены следующие категории ошибок: -1. неподдерживаемая блокчейном операция; -2. ошибка количества аргументов, переданных плагину; -3. ошибка значения параметра (проверка синтаксиса заданного значения параметра, в том числе: наличие недопустимых символов в именах аккаунтов, корректность записи единиц актива, превышение максимально допустимого количества символов в комментарии); -4. превышение лимита на выдачу результата операции; -5. ошибка структуры запроса JSON-API (например, наличие незаполненного поля, запрос к несуществующему методу); -6. нарушение структуры транзакции; -7. отсутствие заданного объекта (например, отсутствие аккаунта с заданным именем или транзакции с заданным идентификатором); +1. неподдерживаемая блокчейном операция; +2. ошибка количества аргументов, переданных плагину; +3. ошибка значения параметра \(проверка синтаксиса заданного значения параметра, в том числе: наличие недопустимых символов в именах аккаунтов, корректность записи единиц актива, превышение максимально допустимого количества символов в комментарии\); +4. превышение лимита на выдачу результата операции; +5. ошибка структуры запроса JSON-API \(например, наличие незаполненного поля, запрос к несуществующему методу\); +6. нарушение структуры транзакции; +7. отсутствие заданного объекта \(например, отсутствие аккаунта с заданным именем или транзакции с заданным идентификатором\); 8. отсутствие требуемой версии HardFork; -9. ошибка бизнес-логики (например, попытка клиента подписать на себя бизнес-объект), в том числе: +9. ошибка бизнес-логики \(например, попытка клиента подписать на себя бизнес-объект\), в том числе: — отсутствие достаточного количества активов для выполнения операции; -— превышение значения bandwidth (например, превышение количества размещаемых постов или отдаваемых голосов за определенный период); -10. ошибка сервера (например, отсутствие доступа к серверу); +— превышение значения bandwidth \(например, превышение количества размещаемых постов или отдаваемых голосов за определенный период\); +10. ошибка сервера \(например, отсутствие доступа к серверу\); 11. выполнение операции на заблокированном кошельке; 12. ошибка программного кода , в том числе: -— ошибка, возникающая в используемых библиотеках; -— ошибка кода (например, недопустимое использование функции внутри кода). - +— ошибка, возникающая в используемых библиотеках; +— ошибка кода \(например, недопустимое использование функции внутри кода\). Для каждой из категорий ошибок сформирована диагностическая информация и добавлена в каталог сообщений. Конкретные ошибки внутри категории разделяются по дополнительному полю. Кроме этого, доработана система возврата диагностической информации о возникшей ошибке при обработке запроса в формате JSON. -Все ошибки, за исключением ошибок категории 12, являются пользовательскими и могут анализироваться непосредственно пользователем. +Все ошибки, за исключением ошибок категории 12, являются пользовательскими и могут анализироваться непосредственно пользователем. Доработка обеспечивает выдачу пользователю наиболее полной диагностической информации об ошибке в виде словаря сообщений. ## Создание многофункционального плагина для обработки личных сообщений пользователя -В версии SF-0.18.4 реализован новый плагин `private_message_operations` расширяющий возможности пользователя в обмене сообщениями с другими пользователями, а также в обработке личных сообщений. + +В версии SF-0.18.4 реализован новый плагин `private_message_operations` расширяющий возможности пользователя в обмене сообщениями с другими пользователями, а также в обработке личных сообщений. Введение нового плагина добавило пользователю следующие функциональные возможности: — обмен сообщениями с другими пользователями без использования токенов; -— получение подписки на (виртуальные) операции, связанные с работой плагина; +— получение подписки на \(виртуальные\) операции, связанные с работой плагина; — получение списка пользователей, с которыми было общение; -— создание списка "закрепленных контактов" с возможностью добавления в список нового пользователя (закрепление контакта), а также удаления из списка незадействованного в общении пользователя (удаление контакта); -— получение истории обмена сообщениями с конкретным пользователем (по заданному имени пользователя); -— получение истории обмена сообщениями по заданному имени пользователя, отфильтрованных по определенным признакам (например, по дате, количеству сообщений или по другим признакам); +— создание списка "закрепленных контактов" с возможностью добавления в список нового пользователя \(закрепление контакта\), а также удаления из списка незадействованного в общении пользователя \(удаление контакта\); +— получение истории обмена сообщениями с конкретным пользователем \(по заданному имени пользователя\); +— получение истории обмена сообщениями по заданному имени пользователя, отфильтрованных по определенным признакам \(например, по дате, количеству сообщений или по другим признакам\); — постраничный просмотр сообщений с пользователем, с которым ведется переписка; — редактирование отправленного сообщения; -— удаление отправленного сообщения (с пометкой сообщения как удаленного). +— удаление отправленного сообщения \(с пометкой сообщения как удаленного\). ### Операции с личными сообщениями пользователя -#### Отправка, редактирование личных сообщений -Для отправки и редактирования сообщений пользователя используется следующий метод: + +**Отправка, редактирование личных сообщений** + +Для отправки и редактирования сообщений пользователя используется следующий метод: + ```cpp struct private_message_operation { - account_name_type from; - account_name_type to; - uint64_t nonce; - public_key_type from_memo_key; - public_key_type to_memo_key; - uint32_t checksum; - bool update; - vector encrypted_message + account_name_type from; + account_name_type to; + uint64_t nonce; + public_key_type from_memo_key; + public_key_type to_memo_key; + uint32_t checksum; + bool update; + vector encrypted_message }; ``` + Параметры: `from` — имя аккаунта, отправляющего сообщение; `to` — имя аккаунта, которому адресовано сообщение; -`nonce` — произвольное целочисленное значение, уникальное значение части ключа (рекомендуется использовать текущее время в миллисекундах); +`nonce` — произвольное целочисленное значение, уникальное значение части ключа \(рекомендуется использовать текущее время в миллисекундах\); `from_memo_key` — публичный ключ категории `memo` отправителя, используемого для шифрования сообщения; `to_memo_key` — публичный ключ категории `memo` получателя сообщения, используемого для расшифровки сообщения; `checksum` — контрольная сумма результата ключа шифрования; -`update` — “true”, если сообщение редактируется (поля `from`, `to`, `nonce`); “false”, если сообщение создается; -`encrypted_message` — результирующее сообщение. +`update` — “true”, если сообщение редактируется \(поля `from`, `to`, `nonce`\); “false”, если сообщение создается; +`encrypted_message` — результирующее сообщение. -Для редактирования сообщения требуется указывать уникальный ключ (поля `from`, `to`, `nonce`). Алгоритм получения ключа шифрования аналогичен алгоритму шифрования поля `memo` в операциях с переводами средств. +Для редактирования сообщения требуется указывать уникальный ключ \(поля `from`, `to`, `nonce`\). Алгоритм получения ключа шифрования аналогичен алгоритму шифрования поля `memo` в операциях с переводами средств. + +Внутри зашифрованного сообщений содержится структура в формате JSON, которая может быть расширена. Структура имеет вид: -Внутри зашифрованного сообщений содержится структура в формате JSON, которая может быть расширена. Структура имеет вид: ```cpp struct message { - string subject; - string body + string subject; + string body }; ``` -#### Удаление личного сообщения -Удаление личного сообщения выполняется из персональных ящиков тех аккаунтов, которые являются отправителем или получателем удаляемого сообщение. В операции требуется указывать имя аккаунта, запросившего данную операцию. Операция удаления выполняется вызовом следующего метода: + +**Удаление личного сообщения** + +Удаление личного сообщения выполняется из персональных ящиков тех аккаунтов, которые являются отправителем или получателем удаляемого сообщение. В операции требуется указывать имя аккаунта, запросившего данную операцию. Операция удаления выполняется вызовом следующего метода: + ```cpp struct private_delete_message_operation { - account_name_type requester; - account_name_type from; - account_name_type to; - uint64_t nonce; - time_point_sec start_date; - time_point_sec stop_date + account_name_type requester; + account_name_type from; + account_name_type to; + uint64_t nonce; + time_point_sec start_date; + time_point_sec stop_date }; ``` + Параметры: `requester` — имя аккаунта, запросившего опреацию удаления; `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); `start_date` — дата и время, начиная от которого сообщения должны быть удалены; -`stop_date` — дата и время, заканчиваясь которым сообщения должны быть удалены. +`stop_date` — дата и время, заканчиваясь которым сообщения должны быть удалены. -Для удаления сообщения требуется указать уникальный ключ (поля `from`, `to`, `nonce`). Для удаления серии сообщений дополнительно требуется указать диапазон сообщений `start_date-stop_date`. +Для удаления сообщения требуется указать уникальный ключ \(поля `from`, `to`, `nonce`\). Для удаления серии сообщений дополнительно требуется указать диапазон сообщений `start_date-stop_date`. + +**Пометка личных сообщений как прочитанных** + +Сообщение \(или группа сообщений\) может быть помечена меткой вида «прочитанное». Операция выполняется аналогично операции удаления сообщений и вызывается следующим методом: -#### Пометка личных сообщений как прочитанных -Сообщение (или группа сообщений) может быть помечена меткой вида «прочитанное». Операция выполняется аналогично операции удаления сообщений и вызывается следующим методом: ```cpp struct private_mark_message_operation { - account_name_type from; - account_name_type to; - uint64_t nonce; - time_point_sec start_date; - time_point_sec stop_date + account_name_type from; + account_name_type to; + uint64_t nonce; + time_point_sec start_date; + time_point_sec stop_date }; ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); `start_date` — дата и время, начиная от которого сообщения должны быть помечены как прочитанные; -`stop_date` — дата и время, заканчиваясь которым сообщения должны быть помечены как прочитанные. +`stop_date` — дата и время, заканчиваясь которым сообщения должны быть помечены как прочитанные. -Для пометки сообщения требуется указать уникальный ключ (поля `from`, `to`, `nonce`). Для пометки серии сообщений дополнительно требуется указать диапазон сообщений `start_date-stop_date`. +Для пометки сообщения требуется указать уникальный ключ \(поля `from`, `to`, `nonce`\). Для пометки серии сообщений дополнительно требуется указать диапазон сообщений `start_date-stop_date`. -#### Создание и настройка контакт-листа аккаунтов -Для удобства отслеживания входящих и исходящих сообщений в систему личных сообщений добавлен контакт-лист, содержащий перечень аккаунтов, с которыми пользователь обменивается сообщениями. Контакт-лист для пользователя создается сразу после первого обмена сообщением с любым из аккаунтов. После каждой отправки или приема очередного сообщения этот лист пополняется новым аккаунтом, с которым выполнялся обмен данным сообщением. +**Создание и настройка контакт-листа аккаунтов** + +Для удобства отслеживания входящих и исходящих сообщений в систему личных сообщений добавлен контакт-лист, содержащий перечень аккаунтов, с которыми пользователь обменивается сообщениями. Контакт-лист для пользователя создается сразу после первого обмена сообщением с любым из аккаунтов. После каждой отправки или приема очередного сообщения этот лист пополняется новым аккаунтом, с которым выполнялся обмен данным сообщением. Пользователь может добавлять в контакт-лист нового аккаунта, с которым еще не обменивался сообщением. Метод, выполняющий создание нового контакта, имеет следующий вид: + ```cpp struct private_contact_operation { - account_name_type owner; - account_name_type contact; - private_contact_type type; - string json_metadata + account_name_type owner; + account_name_type contact; + private_contact_type type; + string json_metadata }; ``` + Параметры: `owner` — имя аккаунта, создающего контакт; `contact` — имя аккаунта, добавляемого в контакт-лист; -`type` — тип контакта (`pinned`, чтобы добавить контакт); +`type` — тип контакта \(`pinned`, чтобы добавить контакт\); `json_metadata` — данные о добавляемом в контакт-лист аккаунте в формате JSON. -Разрешенные типы контактов: +Разрешенные типы контактов: + ```cpp enum private_contact_type { - unknown = 1, // неизвестный контакт - pinned = 2, // контакт, который персонально добавляется контакт лист - ignored = 3 // игнорируемый контакт + unknown = 1, // неизвестный контакт + pinned = 2, // контакт, который персонально добавляется контакт лист + ignored = 3 // игнорируемый контакт }; ``` + Для удаления контакта из контакт-списка, необходимо задать тип `unknown` и удалить все его сообщения. Для внесения аккаунта в контакт-лист необходимо задать тип `pinned`. Для прекращения приема сообщений от контакта из контакт-списка, необходимо задать тип `ignored`. -Для прекращения приема сообщений от всех аккаунтов, за исключением находящихся в контакт-листе, необходимо настроить контакт-лист. Операция по настройке контакт-листа выполняется вызовом следующего метода: +Для прекращения приема сообщений от всех аккаунтов, за исключением находящихся в контакт-листе, необходимо настроить контакт-лист. Операция по настройке контакт-листа выполняется вызовом следующего метода: + ```cpp struct private_settings_operation { - account_name_type owner; - bool ignore_messages_from_unknown_contact + account_name_type owner; + bool ignore_messages_from_unknown_contact }; ``` + Параметры: -`owner` — имя аккаунта, собственника контакт-листа; -`ignore_messages_from_unknown_contact` — "true" для прекращения получения сообщений от неизвестного контакта. +`owner` — имя аккаунта, собственника контакт-листа; +`ignore_messages_from_unknown_contact` — "true" для прекращения получения сообщений от неизвестного контакта. + +### Операции с личными сообщениями пользователя с использованием клиентского приложения cli\_wallet + +**Отправка личного сообщения** + +Отправление личного сообщения аккаунту выполняется вызовом следующего метода: -### Операции с личными сообщениями пользователя с использованием клиентского приложения cli_wallet -#### Отправка личного сообщения -Отправление личного сообщения аккаунту выполняется вызовом следующего метода: ```cpp send_private_message( - string from, - string to, - message_body message, - bool broadcast + string from, + string to, + message_body message, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`message` — сообщение вида ({"subject":"", "body":""}) -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`message` — сообщение вида \({"subject":"", "body":""}\) +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Редактирование личного сообщения** + +Редактирование личного сообщения выполняется следующим методом: -#### Редактирование личного сообщения -Редактирование личного сообщения выполняется следующим методом: ```cpp edit_private_message( - string from, - string to, - uint64_t nonce, - message_body message, - bool broadcast + string from, + string to, + uint64_t nonce, + message_body message, + bool broadcast ); ``` + Параметры: -`from` — имя аккаунта-отправителя сообщения; +`from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); -`message` — сообщение вида ({"subject":"", "body":""}); -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); +`message` — сообщение вида \({"subject":"", "body":""}\); +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Получение списка входящих сообщений** + +Для получения списка входящих сообщений используется следующий метод: -#### Получение списка входящих сообщений -Для получения списка входящих сообщений используется следующий метод: ```cpp get_private_inbox( - string to, - message_box_query query + string to, + message_box_query query ); ``` + Параметры: `to` — имя аккаунта-получателя сообщения; -`query` — параметры поиска. +`query` — параметры поиска. + +**Получение списка отправленных сообщений** + +Для получения списка отправленных сообщений используется следующий метод: -#### Получение списка отправленных сообщений -Для получения списка отправленных сообщений используется следующий метод: ```cpp get_private_outbox( - string from, - message_box_query query + string from, + message_box_query query ); ``` + Параметры: -`from` — имя аккаунта-отправителя сообщения; -`query` — параметры поиска. +`from` — имя аккаунта-отправителя сообщения; +`query` — параметры поиска. + +**Получение списка из канала сообщений** -#### Получение списка из канала сообщений Для получения списка из канала сообщений используется следующий метод: + ```cpp get_private_thread( - string from, - string to, - message_thread_query query + string from, + string to, + message_thread_query query ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`query` — параметры поиска. +`query` — параметры поиска. + +**Настройка личных сообщений** -#### Настройка личных сообщений Для настройки личных сообщений используется следующий метод: + ```cpp set_private_settings( - string owner, - settings_api_object settings, - bool broadcast + string owner, + settings_api_object settings, + bool broadcast ); ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; `settings` — настройки; -`broadcast` — “true”, если операция пересылается на сервер. “false”, если транзакция выводится на экран. +`broadcast` — “true”, если операция пересылается на сервер. “false”, если транзакция выводится на экран. + +**Получение настроек личных сообщений** -#### Получение настроек личных сообщений Для получения настроек личных сообщений используется следующий метод: + ```cpp get_private_settings(string owner) ``` + Параметр: -`owner` — имя аккаунта, собственника контакт-листа. +`owner` — имя аккаунта, собственника контакт-листа. + +**Добавление и изменение контакта личных сообщений в контакт-листе** + +Для добавления или изменения контакта в контакт-листе используется следующий метод: -#### Добавление и изменение контакта личных сообщений в контакт-листе -Для добавления или изменения контакта в контакт-листе используется следующий метод: ```cpp add_private_contact( - string owner, - string contact, - private_contact_type type, - string json_metadata, - bool broadcast + string owner, + string contact, + private_contact_type type, + string json_metadata, + bool broadcast ) ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; -`contact` — имя аккаунта, контакт которого добавляется или изменяется в контакт-листе; -`type` — тип контакта (`unknown` - неопределенный, `pinned` - закрепленный, `ignored` - игнорируемый); +`contact` — имя аккаунта, контакт которого добавляется или изменяется в контакт-листе; +`type` — тип контакта \(`unknown` - неопределенный, `pinned` - закрепленный, `ignored` - игнорируемый\); `json_metadata` — данные контакта в формате JSON; -`broadcast` — "true", если операция пересылается на сервер; "false", если транзакция выводится на экран. +`broadcast` — "true", если операция пересылается на сервер; "false", если транзакция выводится на экран. + +**Получение списка контактов личных сообщений из контакт-листа** + +Для выполнения данной операции необходимо задать тип контактов, по которому будет сформирован требуемый список контактов, имеющихся в в контакт-листе. Операция выполняется с использованием следующего метода: -#### Получение списка контактов личных сообщений из контакт-листа -Для выполнения данной операции необходимо задать тип контактов, по которому будет сформирован требуемый список контактов, имеющихся в в контакт-листе. Операция выполняется с использованием следующего метода: ```cpp get_private_contacts( - string owner, - private_contact_type type, - int limit, - int offset + string owner, + private_contact_type type, + int limit, + int offset ); ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; `type` — тип контактов, по которому формируется список; `limit` — максимальное количество контактов в формируемом списке; `offset` — смещение относительно начала контактов в контакт-листе, от которого формируется список. +**Получение информации об отдельном контакте** -#### Получение информации об отдельном контакте Для получения информации об отдельном контакте из контакт-листа используется следующий метод: + ```cpp get_private_contact( - string owner, - string contact + string owner, + string contact ); ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; -`contact` — имя аккаунта контакта. +`contact` — имя аккаунта контакта. + +**Удаление личного сообщения из списка входящих** -#### Удаление личного сообщения из списка входящих Для удаления личных сообщений из списка входящих используется следующий метод: + ```cpp delete_inbox_private_message( - string from, - string to, - uint64_t nonce, - bool broadcast + string from, + string to, + uint64_t nonce, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Удаление серии сообщений из списка входящих** -#### Удаление серии сообщений из списка входящих Для удаления серии личных сообщений из списка входящих используется следующий метод: ```cpp delete_inbox_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast + string from, + string to, + time_point_sec start_date, + time_point_sec stop_date, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; `start_date` — дата и время, начиная от которого входящие сообщения должны быть удалены; `stop_date` — дата и время, заканчиваясь которым входящие сообщения должны быть удалены; -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Удаление сообщения из списка отправленных** -#### Удаление сообщения из списка отправленных Для удаления личного сообщения из списка отправленных используется следующий метод: + ```cpp delete_inbox_private_message( - string from, - string to, - uint64_t nonce, - bool broadcast + string from, + string to, + uint64_t nonce, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Удаление серии сообщений из списка отправленных** -#### Удаление серии сообщений из списка отправленных Для удаления серии личных сообщений из списка отправленных используется следующий метод: ```cpp delete_outbox_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast + string from, + string to, + time_point_sec start_date, + time_point_sec stop_date, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; `start_date` — дата и время, начиная от которого отправленные сообщения должны быть удалены; `stop_date` — дата и время, заканчиваясь которым отправленные сообщения должны быть удалены; -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Пометка личного сообщения как прочитанного** -#### Пометка личного сообщения как прочитанного Операция выполняется аналогично операции удаления сообщения и вызывается следующим методом: + ```cpp mark_private_message( - string from, - string to, - const uint64_t nonce, - bool broadcast + string from, + string to, + const uint64_t nonce, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — уникальное значение части ключа (поля `from`, `to`, `nonce`); -`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. +`nonce` — уникальное значение части ключа \(поля `from`, `to`, `nonce`\); +`broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. + +**Пометка серии личных сообщений как прочитанных** -#### Пометка серии личных сообщений как прочитанных Операция выполняется аналогично операции удаления сообщений и вызывается следующим методом: + ```cpp mark_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast + string from, + string to, + time_point_sec start_date, + time_point_sec stop_date, + bool broadcast ); ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; -`to` — имя аккаунта-получателя сообщения; +`to` — имя аккаунта-получателя сообщения; `start_date` — дата и время, начиная от которого сообщения должны быть помечены как прочитанные; `stop_date` — дата и время, заканчиваясь которым сообщения должны быть помечены как прочитанные; `broadcast` — “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран. ### API личных сообщений пользователя -#### Получение списка личных сообщений + +**Получение списка личных сообщений** + При выполнении операции получения списка сообщений пользователю приходит структура следующего вида: + ```cpp struct message_api_object { - account_name_type from; - account_name_type to; - uint64_t nonce; - public_key_type from_memo_key; - public_key_type to_memo_key; - uint32_t checksum; - std::vector encrypted_message; - time_point_sec create_date; - time_point_sec receive_date; - time_point_sec read_date; - time_point_sec remove_date + account_name_type from; + account_name_type to; + uint64_t nonce; + public_key_type from_memo_key; + public_key_type to_memo_key; + uint32_t checksum; + std::vector encrypted_message; + time_point_sec create_date; + time_point_sec receive_date; + time_point_sec read_date; + time_point_sec remove_date }; ``` + Параметры: `from` — имя аккаунта-отправителя сообщения; `to` — имя аккаунта-получателя сообщения; -`nonce` — случайное число, необходимое для дешифрования сообщения и являющееся составной частью уникального ключа (с содержанием полей `from`, `to` и `nonce`); +`nonce` — случайное число, необходимое для дешифрования сообщения и являющееся составной частью уникального ключа \(с содержанием полей `from`, `to` и `nonce`\); `from_memo_key` — публичная часть ключа `memo` аккаунта-отправителя; `to_memo_key` — публичная часть ключа `memo` аккаунта-получателя; `checksum` — контрольная сумма ключа шифрования; @@ -520,399 +588,441 @@ struct message_api_object { `read_date` — дата и время прочтения сообщения; `remove_date` — дата и время удаления сообщения из ящика аккаунта собеседника. -#### Просмотр сообщений, получаемых из ящиков входящих и исходящих сообщений -Для просмотра сообщений, хранящихся в ящиках входящих и исходящих сообщений, используется структура следующего вида: +**Просмотр сообщений, получаемых из ящиков входящих и исходящих сообщений** + +Для просмотра сообщений, хранящихся в ящиках входящих и исходящих сообщений, используется структура следующего вида: + ```cpp struct message_box_query { - set select_accounts; - set filter_accounts; - time_point_sec newest_date; - bool unread_only; - uint16_t limit; - uint32_t offset + set select_accounts; + set filter_accounts; + time_point_sec newest_date; + bool unread_only; + uint16_t limit; + uint32_t offset }; ``` + Параметры: -`select_accounts` — список имен аккаунтов, выбранных для просмотра их сообщений; -`filter_accounts` — список имен аккаунтов, исключенных для просмотра их сообщений; -`newest_date` — дата и время, начиная с которого показываются сообщения; +`select_accounts` — список имен аккаунтов, выбранных для просмотра их сообщений; +`filter_accounts` — список имен аккаунтов, исключенных для просмотра их сообщений; `newest_date` — дата и время, начиная с которого показываются сообщения; `unread_only` — показывать только непрочитанные сообщения; `limit` — максимальное количество выдаваемых сообщений; -`offset` — смещение относительно начала списка, с которого выдаются сообщения. -#### Получение списка входящих сообщений для аккаунта-получателя сообщений -Для получения списка входящих сообщений для аккаунта-получателя используется запрос следующего вида: +`offset` — смещение относительно начала списка, с которого выдаются сообщения. + +**Получение списка входящих сообщений для аккаунта-получателя сообщений** + +Для получения списка входящих сообщений для аккаунта-получателя используется запрос следующего вида: + ```cpp get_inbox( - string to, - message_box_query + string to, + message_box_query ) ``` + Параметры: `to` — имя аккауна-получателя сообщений; -`message_box_query` — запрос на получение сообщений; +`message_box_query` — запрос на получение сообщений; Результатом является получение пользователем вектора вида: `vector`. -#### Получение списка исходящих сообщений для аккаунта-отправителя сообщений -Для получения списка исходящих сообщений для аккаунта-отправителя используется запрос следующего вида: +**Получение списка исходящих сообщений для аккаунта-отправителя сообщений** + +Для получения списка исходящих сообщений для аккаунта-отправителя используется запрос следующего вида: + ```cpp get_outbox( - from, - message_box_query + from, + message_box_query ) ``` + Параметры: `from` — имя аккауна-отправителя сообщений; -`message_box_query` — запрос на получение сообщений. +`message_box_query` — запрос на получение сообщений. + +Результатом запроса является получение пользователем вектора вида: `vector`. +**Фильтрация списка сообщений** -Результатом запроса является получение пользователем вектора вида: `vector`. +Фильтрации списка сообщений в канале сообщений \(между пользователями `from` и `to`\) выполняется с использованием структуры следующего вида: -#### Фильтрация списка сообщений -Фильтрации списка сообщений в канале сообщений (между пользователями `from` и `to`) выполняется с использованием структуры следующего вида: ```cpp struct message_thread_query { - time_point_sec newest_date; - bool unread_only; - uint16_t limit; - uint32_t offset + time_point_sec newest_date; + bool unread_only; + uint16_t limit; + uint32_t offset }; ``` + Параметры: -`newest_date` — дата и время, начиная с которого показываются сообщения; +`newest_date` — дата и время, начиная с которого показываются сообщения; `unread_only` — показывать только непрочитанные сообщения; `limit` — максимальное количество выдаваемых сообщений; -`offset` — смещение относительно начала списка, с которого выдаются сообщения. +`offset` — смещение относительно начала списка, с которого выдаются сообщения. + +**Получение потока сообщений между отправителем и получателем сообщений** + +Получение потока сообщений \(между пользователями `from` и `to`\) выполняется с использованием метода следующего вида: -#### Получение потока сообщений между отправителем и получателем сообщений -Получение потока сообщений (между пользователями `from` и `to`) выполняется с использованием метода следующего вида: ```cpp get_thread( - string from, - string to, - message_thread_query + string from, + string to, + message_thread_query ) ``` + Параметры: `from` — имя аккаунта-отправителя сообщений; `to` — имя аккаунта-получателя сообщений; -`message_thread_query` — запрос на получение потока сообщений. +`message_thread_query` — запрос на получение потока сообщений. Результатом запроса является получение пользователем вектора вида: `vector`. -#### Получение актуальных настроек модуля личных сообщений + +**Получение актуальных настроек модуля личных сообщений** + Для получения актуальных настроек модуля личных сообщений используется API-запрос следующего вида: + ```cpp get_settings(string owner) ``` + Параметр: -`owner` — имя аккаунта, собственника контакт-листа. +`owner` — имя аккаунта, собственника контакт-листа. Результатом запроса является получение структуры следующего вида: + ```cpp struct settings_api_object { - bool ignore_messages_from_unknown_contact; + bool ignore_messages_from_unknown_contact; }; ``` + Параметр: `ignore_messages_from_unknown_contact` — “true”, если блокируются сообщения от неизвестных контактов. -#### Получение данных о размерах контакт-листа +**Получение данных о размерах контакт-листа** + +Для получения данных о размерах контакт листа используется запрос следующего вида: -Для получения данных о размерах контакт листа используется запрос следующего вида: ```cpp get_contacts_size(string owner) ``` -Параметр: -`owner` — имя аккаунта, собственника контакт-листа. +Параметр: +`owner` — имя аккаунта, собственника контакт-листа. Результатом запроса является получение структуры следующего вида: + ```cpp struct contacts_size_api_object { - map size + map size }; ``` + Параметры: -`size` — данные размера контакт-листа в виде следующей структуры: +`size` — данные размера контакт-листа в виде следующей структуры: + ```cpp struct contacts_size_info { - int total_contacts; - int total_outbox_messages; - int unread_outbox_messages; - int total_inbox_messages; - int unread_inbox_messages + int total_contacts; + int total_outbox_messages; + int unread_outbox_messages; + int total_inbox_messages; + int unread_inbox_messages }; ``` -`total_contacts` — общее количество имен аккаунтов (контактов) в контакт-листе; + +`total_contacts` — общее количество имен аккаунтов \(контактов\) в контакт-листе; `total_outbox_messages` — общее количество исходящих сообщений; `unread_outbox_messages` — общее количество непрочитанных исходящих сообщений; `total_inbox_messages` — общее количество входящих сообщений; -`unread_inbox_messages` — общее количество непрочитанных входящих сообщений +`unread_inbox_messages` — общее количество непрочитанных входящих сообщений + +**Получения данных об отдельно взятом контакте** -#### Получения данных об отдельно взятом контакте Для получения данных об отдельно взятом контакте используется запрос следующего вида: + ```cpp get_contact_info( - string owner, - string contact + string owner, + string contact ) ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; -`contact` — имя аккаунта, данные о котором требуется получить. +`contact` — имя аккаунта, данные о котором требуется получить. Результатом запроса является получение структуры следующего вида: + ```cpp struct contact_api_object { - account_name_type owner; - account_name_type contact; - string json_metadata; - private_contact_type local_type; - private_contact_type remote_type; - contact_size_info size + account_name_type owner; + account_name_type contact; + string json_metadata; + private_contact_type local_type; + private_contact_type remote_type; + contact_size_info size }; ``` + Параметры: -`owner` — имя аккаунта, собственника контакт-листа (не более 16 символов); -`contact` — имя контакта, данные о котором выдаются (не более 16 символов); +`owner` — имя аккаунта, собственника контакт-листа \(не более 16 символов\); +`contact` — имя контакта, данные о котором выдаются \(не более 16 символов\); `json_metadata` — данные об аккаунте в формате JSON; `local_type` — тип контакта в контакт-листе аккаунта с именем `owner`; `remote_type` — тип контакта в контакт-листе аккаунта с именем `contact`; `size` — данные размера контакт-листа. +**Получения полного списка контактов, имеющихся в контакт-листе** + +Для получения полного списка имен аккаунтов \(контактов\), имеющихся в контакт-листе, используется запрос следующего вида: -#### Получения полного списка контактов, имеющихся в контакт-листе -Для получения полного списка имен аккаунтов (контактов), имеющихся в контакт-листе, используется запрос следующего вида: ```cpp get_contacts( - string owner, - private_contact_type type, - int limit, - int offset + string owner, + private_contact_type type, + int limit, + int offset ) ``` + Параметры: `owner` — имя аккаунта, собственника контакт-листа; -`type` — тип контактов, список которых требуется получить (`unknown`, `pinned`, `ignored`); +`type` — тип контактов, список которых требуется получить \(`unknown`, `pinned`, `ignored`\); `limit` — максимальное количество выдаваемых контактов; `offset` — смещение относительно начала списка, с которого выдаются контакты. Результатом запроса является получение массива структур вида `vector`. +**Подписка на события о личных сообщениях** -#### Подписка на события о личных сообщениях Для подписки на события о личных сообщениях используется вызов следующего вида: + ```cpp set_callback(callback_query) ``` + Параметр `callback_query` в этом вызове является структурой следующего вида: + ```cpp struct callback_query { - set select_accounts; - set filter_accounts; - set select_events; - set filter_events + set select_accounts; + set filter_accounts; + set select_events; + set filter_events }; ``` + Параметры: `select_accounts` — список имен аккаунтов, выбранных для просмотра их сообщений; `filter_accounts` — список имен аккаунтов, исключенных для просмотра их сообщений; `select_events` — список событий для мониторинга; -`filter_events ` — список событий для исключения из мониторинга. - +`filter_events` — список событий для исключения из мониторинга. Список событий является перечислением следующего вида: + ```cpp enum callback_event_type { - message, // мониторинг сообщений - mark, // пометка сообщений как прочитанных - remove_inbox, // удаление входящих сообщений - remove_outbox, // удаление исходящих сообщений - contact // добавление имени аккаунта в контакт-лист + message, // мониторинг сообщений + mark, // пометка сообщений как прочитанных + remove_inbox, // удаление входящих сообщений + remove_outbox, // удаление исходящих сообщений + contact // добавление имени аккаунта в контакт-лист }; ``` На события `message`, `mark`, `remove_inbox` и `remove_outbox` будет приходить структура следующего вида: + ```cpp struct callback_message_event { - callback_event_type type; // тип контакта (`unknown`, `pinned`, `ignored`) - message_api_object message // объект сообщения + callback_event_type type; // тип контакта (`unknown`, `pinned`, `ignored`) + message_api_object message // объект сообщения }; ``` На события `contact` будет приходить структура следующего вида: + ```cpp struct callback_contact_event { - callback_event_type type; // тип контакта (`unknown`, `pinned`, `ignored`) - contact_api_object contact // объект контакта + callback_event_type type; // тип контакта (`unknown`, `pinned`, `ignored`) + contact_api_object contact // объект контакта }; ``` + ## Расширение возможностей пользователя с операциями над реблогами -В предыдущих версиях пользователю предоставлялись только небольшие возможности с операциями над размещенными в его блоге постами (реблогами), которые являлись копиями публикаций других блогов (например, собственник блога (блоггер) не мог удалить из него ранее размещенный в нем реблог или дополнить этот реблог собственным комментарием). Версия SF-0.18.4 предоставляет пользователю такие возможности. +В предыдущих версиях пользователю предоставлялись только небольшие возможности с операциями над размещенными в его блоге постами \(реблогами\), которые являлись копиями публикаций других блогов \(например, собственник блога \(блоггер\) не мог удалить из него ранее размещенный в нем реблог или дополнить этот реблог собственным комментарием\). Версия SF-0.18.4 предоставляет пользователю такие возможности. ### Удаление реблога -В новой версии, в отличие от предыдущих версий, блоггеру предоставляется возможность удалять реблоги, а также скопированные случайным образом в его блог сторонние публикации. Для этого в плагин `follow` добавлен новый метод `delete_reblog_operation()`. Вызов этого метода возможен из `cli_wallet` с использованием эвалюатора `custom_json`. Операция удаления реблога формируется в ручном режиме. -Пример вызова операции удаления реблога: +В новой версии, в отличие от предыдущих версий, блоггеру предоставляется возможность удалять реблоги, а также скопированные случайным образом в его блог сторонние публикации. Для этого в плагин `follow` добавлен новый метод `delete_reblog_operation()`. Вызов этого метода возможен из `cli_wallet` с использованием эвалюатора `custom_json`. Операция удаления реблога формируется в ручном режиме. + +Пример вызова операции удаления реблога: + ```cpp begin_builder_transaction add_operation_to_builder_transaction 0 ["custom_json", {"required_posting_auths":[""], \ - "id": "follow", "json":"["delete_reblog", {"account":"","author":"", \ - "permlink":""}]"}] + "id": "follow", "json":"["delete_reblog", {"account":"","author":"", \ + "permlink":""}]"}] sign_builder_transaction 0 true -``` +``` + В приведенном примере: `begin_builder_transaction` — команда вызова транзакции, в состав которой входит операция удаления реблога; `add_operation_to_builder_transaction` — команда, формирующая операцию удаления реблога, которой присвоен идентификационный номер “0”; `` — имя аккаунта-реблоггера, скопировавшего в свой блог сторонний пост; `` — имя аккаунта оригинального поста; -`` — заголовок удаляемого реблога; -`sign_builder_transaction` — команда для получения одобрения транзакции с отправлением ее на демон. - -Для удаления более одного реблога необходимо сформировать транзакцию с несколькими операциями. +`` — заголовок удаляемого реблога; +`sign_builder_transaction` — команда для получения одобрения транзакции с отправлением ее на демон. +Для удаления более одного реблога необходимо сформировать транзакцию с несколькими операциями. ### Добавление комментария к реблогу -В новой версии, в отличие от предыдущих, автору реблога предоставляется возможность добавлять к реблогу собственный комментарий. Для этого в плагине `follow` доработан метод `reblog_operation`. Вызов этого метода возможен из `cli_wallet` с использованием эвалюатора `custom_json`. Операция добавления комментария к реблогу формируется в ручном режиме. +В новой версии, в отличие от предыдущих, автору реблога предоставляется возможность добавлять к реблогу собственный комментарий. Для этого в плагине `follow` доработан метод `reblog_operation`. Вызов этого метода возможен из `cli_wallet` с использованием эвалюатора `custom_json`. Операция добавления комментария к реблогу формируется в ручном режиме. -**Изменения в клиентском приложении cli_wallet** +**Изменения в клиентском приложении cli\_wallet** -Для добавления комментария в реблог в вызываемую из приложения `cli_wallet` операцию `reblog_operation` добавлены следующие поля: +Для добавления комментария в реблог в вызываемую из приложения `cli_wallet` операцию `reblog_operation` добавлены следующие поля: -Имя поля | Тип | Назначение -:--------- |:---------- |:------------ -body | string (UTF-8) | Содержит тело добавляемого к реблогу комментария -title | string (UTF-8) | Содержит заголовок добавляемого к реблогу комментария -json_metadata | string (UTF-8) | Содержит метаданные добавляемого комментария в формате JSON +| Имя поля | Тип | Назначение | +| :--- | :--- | :--- | +| body | string \(UTF-8\) | Содержит тело добавляемого к реблогу комментария | +| title | string \(UTF-8\) | Содержит заголовок добавляемого к реблогу комментария | +| json\_metadata | string \(UTF-8\) | Содержит метаданные добавляемого комментария в формате JSON | -**Примечание:** Наличие поля `body` в вызове является обязательным для операции реблога поста с добавлением комментария. +**Примечание:** Наличие поля `body` в вызове является обязательным для операции реблога поста с добавлением комментария. + +Пример вызова операции реблога поста с добавлением комментария: -Пример вызова операции реблога поста с добавлением комментария: ```cpp begin_builder_transaction add_operation_to_builder_transaction 0 ["custom_json", {"required_posting_auths":[""], \ - "id": "follow", "json":"["reblog", {"account":"","author":"", \ - "permlink":"","title":"","body":""}]"}] + "id": "follow", "json":"["reblog", {"account":"","author":"", \ + "permlink":"","title":"","body":""}]"}] sign_builder_transaction 0 true ``` + В приведенном примере: `begin_builder_transaction` — команда вызова транзакции, в состав которой входит операция реблога поста с добавлением комментария; `add_operation_to_builder_transaction` — команда, формирующая операцию реблога поста с добавлением комментария, которой присвоен идентификационный номер “0”; - `` — имя аккаунта-блоггера, выполняющего реблог поста; +`` — имя аккаунта-блоггера, выполняющего реблог поста; `` — имя аккаунта, автора оригинального поста; -`` — копируемый пост; -`` — заголовок добавляемого комментария; -`` — тело добавляемого комментария; -`sign_builder_transaction` — команда для получения одобрения транзакции с отправлением ее на демон. +`` — копируемый пост; +`` — заголовок добавляемого комментария; +`` — тело добавляемого комментария; +`sign_builder_transaction` — команда для получения одобрения транзакции с отправлением ее на демон. -**Изменения в API-методах:** +**Изменения в API-методах:** -Ответы API-методов `get_blog` и `get_blog_entries` дополнены полями, приведенными в следующей таблице: +Ответы API-методов `get_blog` и `get_blog_entries` дополнены полями, приведенными в следующей таблице: -Имя поля | Тип | Назначение -:------------- |:-------- |:--------------- -`reblog_title` | string | Содержит заголовок реблога, к которому добавляется комментарий - `reblog_body` | string | Содержит тело реблога - `reblog_json_metadata` | string | Содержит метаданные реблога +| Имя поля | Тип | Назначение | +| :--- | :--- | :--- | +| `reblog_title` | string | Содержит заголовок реблога, к которому добавляется комментарий | +| `reblog_body` | string | Содержит тело реблога | +| `reblog_json_metadata` | string | Содержит метаданные реблога | -Ответы API-методов `get_feed`, `get_feed_entries`, `get_discussions_by_blog` и `get_discussions_by_feed` дополнены массивом объектов `reblog_entries`, структура которого дополнена полями, приведенными в следующей таблице: +Ответы API-методов `get_feed`, `get_feed_entries`, `get_discussions_by_blog` и `get_discussions_by_feed` дополнены массивом объектов `reblog_entries`, структура которого дополнена полями, приведенными в следующей таблице: -Имя поля | Тип | Назначение -:------------- |:-------- |:--------------- -`author` | string | Содержит имя аккаунта-блоггера -`reblog_title` | string | Содержит заголовок реблога, к которому добавляется комментарий - `reblog_body` | string | Содержит тело реблога - `reblog_json_metadata` | string | Содержит метаданные реблога +| Имя поля | Тип | Назначение | +| :--- | :--- | :--- | +| `author` | string | Содержит имя аккаунта-блоггера | +| `reblog_title` | string | Содержит заголовок реблога, к которому добавляется комментарий | +| `reblog_body` | string | Содержит тело реблога | +| `reblog_json_metadata` | string | Содержит метаданные реблога | ## Возможность настройки конфигурационного файла для хранения только необходимой информации на Узле -С целью сбережения ресурсов памяти пользователь заинтересован хранить на Узле блокчейна только необходимую для него информацию, такую как метаданные аккаунта, сопроводительный текст (примечание) в операциях перевода средств, последние обновления постов и комментариев. После закрытия поста актуальность такой информации исчезает и ее необходимо удалять. +С целью сбережения ресурсов памяти пользователь заинтересован хранить на Узле блокчейна только необходимую для него информацию, такую как метаданные аккаунта, сопроводительный текст \(примечание\) в операциях перевода средств, последние обновления постов и комментариев. После закрытия поста актуальность такой информации исчезает и ее необходимо удалять. -Для хранения на Узле блокчейна только важную информацию пользователю нет необходимости создавать Узел в варианте полной конфигурации памяти. Для снижения потребления ресурсов памяти пользователь мог построить Узел в варианте конфигурации LOW_MEM. +Для хранения на Узле блокчейна только важную информацию пользователю нет необходимости создавать Узел в варианте полной конфигурации памяти. Для снижения потребления ресурсов памяти пользователь мог построить Узел в варианте конфигурации LOW\_MEM. +В предыдущих версиях для включения или выключение режима на хранение важной информации на Узле требовалось заново перестраивать Узел в одном из вариантов конфигурации — стандартном или LOW\_MEM соответственно. Поскольку на перестроения затрачивалось значительное время, это негативно сказывалось на быстродействие Узла. -В предыдущих версиях для включения или выключение режима на хранение важной информации на Узле требовалось заново перестраивать Узел в одном из вариантов конфигурации — стандартном или LOW_MEM соответственно. Поскольку на перестроения затрачивалось значительное время, это негативно сказывалось на быстродействие Узла. -### Возможность настройки конфигурационного файла для хранения метаданных аккаунта -В версии SF-0.18.4 для хранения метаданных аккаунта на Узле блокчейна (без перестроения Узла в варианте конфигурации LOW_MEM) добавлены новые флаги `store-account-metadata` и `store-account-metadata-list` в конфигурационный файл `config.ini`, а также внесены изменения в API-библиотеку. Использование этих флагов обеспечивает более гибкое настройку Узла для хранения важной информации в режиме сбережения памяти. +### Возможность настройки конфигурационного файла для хранения метаданных аккаунта +В версии SF-0.18.4 для хранения метаданных аккаунта на Узле блокчейна \(без перестроения Узла в варианте конфигурации LOW\_MEM\) добавлены новые флаги `store-account-metadata` и `store-account-metadata-list` в конфигурационный файл `config.ini`, а также внесены изменения в API-библиотеку. Использование этих флагов обеспечивает более гибкое настройку Узла для хранения важной информации в режиме сбережения памяти. -Для включения или выключения режима на хранение метаданных аккаунта пользователю достаточно настроить конфигурационный файл `config.ini` и один раз перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется. +Для включения или выключения режима на хранение метаданных аккаунта пользователю достаточно настроить конфигурационный файл `config.ini` и один раз перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется. **Изменения в конфигурационном файле config.ini** -Файл `config.ini` дополнен настраиваемыми флагами, приведенными в следующей таблице: - -Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение -:------------------- |:---------- |:--------------------- |:------------------------- -`store-account-metadata` | bool | — | “true” — включение режима на хранение метаданных для всех аккаунтов, заданными в списке флага `store-account-metadata-list`. "false" — выключение режима на хранение метаданных для всех аккаунтов -`store-account-metadata-list` | string | — | Список имен аккаунтов, для которых сохраняются метаданные +Файл `config.ini` дополнен настраиваемыми флагами, приведенными в следующей таблице: +| Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение | +| :--- | :--- | :--- | :--- | +| `store-account-metadata` | bool | — | “true” — включение режима на хранение метаданных для всех аккаунтов, заданными в списке флага `store-account-metadata-list`. "false" — выключение режима на хранение метаданных для всех аккаунтов | +| `store-account-metadata-list` | string | — | Список имен аккаунтов, для которых сохраняются метаданные | -**Изменение в API-библиотеке** -API-метод `account_api_object()` использует пустое значение json_metadata без необходимости задания режима LOW_MEM для случая, если у Узла блокчейна выключен режим хранения метаданных. +**Изменение в API-библиотеке** +API-метод `account_api_object()` использует пустое значение json\_metadata без необходимости задания режима LOW\_MEM для случая, если у Узла блокчейна выключен режим хранения метаданных. +### Возможность настройки конфигурационного файла для хранения сопроводительной информации в операциях перевода средств -### Возможность настройки конфигурационного файла для хранения сопроводительной информации в операциях перевода средств - -В версии SF-0.18.4 для хранения на Узле блокчейна (без перестроения Узла в варианте конфигурации LOW_MEM) сопроводительного текста поля `memo` в операциях перевода средств из кошельков добавлен новый флаг `store-memo-in-savings-withdraws` в конфигурационный файл `config.ini`. Использование этого флага обеспечивает более гибкое задание режима сбережения памяти. +В версии SF-0.18.4 для хранения на Узле блокчейна \(без перестроения Узла в варианте конфигурации LOW\_MEM\) сопроводительного текста поля `memo` в операциях перевода средств из кошельков добавлен новый флаг `store-memo-in-savings-withdraws` в конфигурационный файл `config.ini`. Использование этого флага обеспечивает более гибкое задание режима сбережения памяти. Для включения или выключения режима на хранение сопроводительного сообщения поля `memo` пользователю достаточно настроить конфигурационный файл `config.ini` и всего один раз перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется. -** Изменения в конфигурационном файле config.ini** -Файл `config.ini` дополнен настраиваемым флагом, приведенным в следующей таблице: +**Изменения в конфигурационном файле config.ini** +Файл `config.ini` дополнен настраиваемым флагом, приведенным в следующей таблице: -Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение -:------------- |:------------------ |:----------- |:----------- -`store-memo-in-savings-withdraws` | bool | true | "true" — включение режима на хранение сообщения поля `memo` для всех операций по переводу средств из кошельков +| Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение | +| :--- | :--- | :--- | :--- | +| `store-memo-in-savings-withdraws` | bool | true | "true" — включение режима на хранение сообщения поля `memo` для всех операций по переводу средств из кошельков | ### Возможность настройки конфигурационного файла для хранения изменений в постах и комментариях с учетом глубины истории этих изменений - В предыдущих версиях пользователю для включения или выключения режима на хранение комментариев полей `last_update` и `active` необходимо было каждый раз перестраивать Узел. +В предыдущих версиях пользователю для включения или выключения режима на хранение комментариев полей `last_update` и `active` необходимо было каждый раз перестраивать Узел. -В версии SF-0.18.4 для устранения этого недостатка введен новый флаг `store-comment-last-update` в конфигурационный файл `config.ini`, а также внесены изменения в API-библиотеку. Использование этого флага предоставляет пользователю возможность устанавливать глубину истории хранения с учетом даты изменения и даты последнего обновления. Для включения или выключения режима на хранение комментариев полей `last_update` и `active` необходимо настроить конфигурационный файл `config.ini` и перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется. +В версии SF-0.18.4 для устранения этого недостатка введен новый флаг `store-comment-last-update` в конфигурационный файл `config.ini`, а также внесены изменения в API-библиотеку. Использование этого флага предоставляет пользователю возможность устанавливать глубину истории хранения с учетом даты изменения и даты последнего обновления. Для включения или выключения режима на хранение комментариев полей `last_update` и `active` необходимо настроить конфигурационный файл `config.ini` и перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется. **Изменения в конфигурационном файле config.ini** -Файл `config.ini` дополнен настраиваемым флагом, приведенным в следующей таблице: - -Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение -:------------- |:------------------ |:----------- |:----------- -`store-comment-last-update` | bool | true | “true” — включение режима на хранение изменений в постах и комментариях. “false” — выключение режима +Файл `config.ini` дополнен настраиваемым флагом, приведенным в следующей таблице: +| Имя флага | Тип | Значение по умолчанию | Устанавливаемое значение | +| :--- | :--- | :--- | :--- | +| `store-comment-last-update` | bool | true | “true” — включение режима на хранение изменений в постах и комментариях. “false” — выключение режима | **Изменения в API-библиотеке** -В версии SF-0.18.4 поля `last_update` и `active` являются произвольными и в возвращаемом значении API-метода `comment_api_object()` могут отсутствовать. +В версии SF-0.18.4 поля `last_update` и `active` являются произвольными и в возвращаемом значении API-метода `comment_api_object()` могут отсутствовать. -Изменены имена аргументов, представленных в следующей таблице. - -Имя аргумента в предыдущей версии | Имя аргумента в версии SF-0.18.4 -:----------- |:------------------- -`discussion_helper::impl fill_comment_content` | `fill_comment_info` -`discussion_helper::discussion_helper() fill_comment_content` | `fill_comment_info` +Изменены имена аргументов, представленных в следующей таблице. + +| Имя аргумента в предыдущей версии | Имя аргумента в версии SF-0.18.4 | +| :--- | :--- | +| `discussion_helper::impl fill_comment_content` | `fill_comment_info` | +| `discussion_helper::discussion_helper() fill_comment_content` | `fill_comment_info` | ### Возможность настройки конфигурационного файла для хранения истории о вознаграждениях за публикации -После окончания выплат в виде вознаграждений автору за публикацию поста, а также лицам, принимавшим участие в голосовании, данные о выплатах становятся неактуальными и в дальнейшем не используются в системе. Пользователь, в случае необходимости, может хранить на своем Узле историю о вознаграждениях за публикации и использовать ее по своему усмотрению без необходимости перестроения Узла в варианте конфигурации LOW_MEM. -В конфигурационный файл `config.ini` добавлена новая переменная `store-comment-rewards`, а также внесены изменения в API-библиотеку. Использование этой переменной обеспечивает хранение на Узле блокчейна историю выплат вознаграждений без необходимости перестроения Узла в варианте конфигурации LOW_MEM. -**Изменения в API-библиотеке** -Структура объекта комментариев дополнена новыми параметрами (помечены комментарием “новый”): + +После окончания выплат в виде вознаграждений автору за публикацию поста, а также лицам, принимавшим участие в голосовании, данные о выплатах становятся неактуальными и в дальнейшем не используются в системе. Пользователь, в случае необходимости, может хранить на своем Узле историю о вознаграждениях за публикации и использовать ее по своему усмотрению без необходимости перестроения Узла в варианте конфигурации LOW\_MEM. +В конфигурационный файл `config.ini` добавлена новая переменная `store-comment-rewards`, а также внесены изменения в API-библиотеку. Использование этой переменной обеспечивает хранение на Узле блокчейна историю выплат вознаграждений без необходимости перестроения Узла в варианте конфигурации LOW\_MEM. **Изменения в API-библиотеке** +Структура объекта комментариев дополнена новыми параметрами \(помечены комментарием “новый”\): + ```cpp struct comment_api_object { - … - asset total_payout_value; - asset beneficiary_payout_value; - asset beneficiary_gests_payout_value; - asset curator_payout_value; - asset curator_gests_payout_value; // новый - - share_type author_rewards; - asset author_gbg_payout_value; // новый - asset author_golos_payout_value; // новый - asset author_gests_payout_value; // новый - … + … + asset total_payout_value; + asset beneficiary_payout_value; + asset beneficiary_gests_payout_value; + asset curator_payout_value; + asset curator_gests_payout_value; // новый + + share_type author_rewards; + asset author_gbg_payout_value; // новый + asset author_golos_payout_value; // новый + asset author_gests_payout_value; // новый + … } ``` + Параметры: -`total_payout_value` — общая сумма выплат в GBG; +`total_payout_value` — общая сумма выплат в GBG; `beneficiary_payout_value` — бенефициарские выплаты в GBG; `beneficiary_gests_payout_value` — бенефициарские выплаты в GESTS; `curator_payout_value` — кураторские выплаты в GBG; @@ -920,152 +1030,107 @@ struct comment_api_object { `author_rewards` — авторские вознаграждения в GOLOS; `author_gbg_payout_value` — авторские выплаты в GBG; `author_golos_payout_value` — авторские выплаты в GOLOS; -`author_gests_payout_value` — авторские выплаты в GESTS. +`author_gests_payout_value` — авторские выплаты в GESTS. ### Возможность настройки конфигурационного файла для хранения истории постов или комментариев -Пользователю предоставляется возможность более гибко настраивать конфигурационный файл для хранения контента поста или комментариев до определенного времени. Конфигурационный файл `config.ini` дополнен новыми параметрами `comment-title-depth`, `comment-body-depth`, `comment-json-metadata-depth` и `set-content-storing-depth-null-after-update`. +Пользователю предоставляется возможность более гибко настраивать конфигурационный файл для хранения контента поста или комментариев до определенного времени. Конфигурационный файл `config.ini` дополнен новыми параметрами `comment-title-depth`, `comment-body-depth`, `comment-json-metadata-depth` и `set-content-storing-depth-null-after-update`. -Первые три параметра используется для настройки глубины истории хранения заголовка, тела и метаданных постов (или комментариев) соответственно. Задание нулевых значений для всех этих параметров в конфигурационном файле означает, что контент не должен сохраняться. Ненулевое целочисленное значение хотя бы одного из этих параметров означает хранение соответствующей ему части контента до момента оплаты за этот пост (или комментарий). +Первые три параметра используется для настройки глубины истории хранения заголовка, тела и метаданных постов \(или комментариев\) соответственно. Задание нулевых значений для всех этих параметров в конфигурационном файле означает, что контент не должен сохраняться. Ненулевое целочисленное значение хотя бы одного из этих параметров означает хранение соответствующей ему части контента до момента оплаты за этот пост \(или комментарий\). +Параметр `set-content-storing-depth-null-after-update` используется для случая, когда контент необходимо сохранять только после его изменения. Задание этого параметра автоматически отменяет действие первых трех параметров. -Параметр `set-content-storing-depth-null-after-update` используется для случая, когда контент необходимо сохранять только после его изменения. Задание этого параметра автоматически отменяет действие первых трех параметров. +Для сбережения ресурсов памяти пользователь может сохранять контент не полностью, а только определенную его часть без необходимости перестроения Узла в варианте конфигурации LOW\_MEM. - -Для сбережения ресурсов памяти пользователь может сохранять контент не полностью, а только определенную его часть без необходимости перестроения Узла в варианте конфигурации LOW_MEM. - Параметры приведены в следующей таблице. -Имя параметра | Тип | Значение по умолчанию | Устанавливаемое значение -:------------- |:------------------ |:----------- |:----------- -`comment-title-depth` | uint32_t | — | Максимальное количество блоков для хранения заголовков -`comment-body-depth` | uint32_t | — | Максимальное количество блоков для хранения тела поста или комментария -`comment-json-metadata-depth` | uint32_t | — | Максимальное количество блоков для хранения метаданных в формате JSON -`set-content-storing-depth-null-after-update` | bool | "false" | "true", если глубина хранения контента должна обнуляться после изменения контента - - +| Имя параметра | Тип | Значение по умолчанию | Устанавливаемое значение | +| :--- | :--- | :--- | :--- | +| `comment-title-depth` | uint32\_t | — | Максимальное количество блоков для хранения заголовков | +| `comment-body-depth` | uint32\_t | — | Максимальное количество блоков для хранения тела поста или комментария | +| `comment-json-metadata-depth` | uint32\_t | — | Максимальное количество блоков для хранения метаданных в формате JSON | +| `set-content-storing-depth-null-after-update` | bool | "false" | "true", если глубина хранения контента должна обнуляться после изменения контента | ### Возможность настройки конфигурационного файла для удаление устаревшей информации -В предыдущих версиях удаление устаревших голосов (объектов) выполнялось с помощью опции LOW_MEMORY_NODE, которая могла быть установлена либо в командной строке, либо в конфигурационном файле с помощью флага компиляции «–DLOW_MEMORY_NODE=ON/OFF». -Удаление голосов выполнялось после закрытия поста и проведения всех необходимых расчетов с целью освобождения памяти от устаревшей информации и, следовательно, сокращения времени, затрачиваемое на начальную синхронизацию. -Также удаление голосов можно было выполнить с помощью другой опции `clear-votes-before-block, bpo::value()->default_value(0)`, обеспечивающей удаление всех голосов до определенного фиксированного блока. Недостаток такого способа был в том, что он не обеспечивал удаление вновь пришедших голосов, которые заново накапливались в системе и по истечении определенного времени также становились ненужными. +В предыдущих версиях удаление устаревших голосов \(объектов\) выполнялось с помощью опции LOW\_MEMORY\_NODE, которая могла быть установлена либо в командной строке, либо в конфигурационном файле с помощью флага компиляции «–DLOW\_MEMORY\_NODE=ON/OFF». +Удаление голосов выполнялось после закрытия поста и проведения всех необходимых расчетов с целью освобождения памяти от устаревшей информации и, следовательно, сокращения времени, затрачиваемое на начальную синхронизацию. +Также удаление голосов можно было выполнить с помощью другой опции `clear-votes-before-block, bpo::value()->default_value(0)`, обеспечивающей удаление всех голосов до определенного фиксированного блока. Недостаток такого способа был в том, что он не обеспечивал удаление вновь пришедших голосов, которые заново накапливались в системе и по истечении определенного времени также становились ненужными. Для удаления устаревших голосов в версии SF-0.18.4 конфигурационный файл `config.ini` дополнен новым параметром `clear-votes-older-n-blocks, bpo::value()->default_value(0xFFFFFFFF)` обеспечивающим сохранение голосов N блоков и удаление голосов в блоках старше N. -Соответствие задаваемого значения N и выполняемой операции приведено в следующей таблице. +Соответствие задаваемого значения N и выполняемой операции приведено в следующей таблице. -Значение N | Количество блоков с сохраняемыми голосами | Выполняемая операция | Комментарий -:------------ |:---------- |:---------- |:----------- -N = 0 | 0 | Удаление голосов сразу после закрытия поста | Используется для случая, когда не требуется сохранения голосов -N > 0 | N | Удаление голосов в блоках старше N | Используется для сохранения голосов N блоков от текущего и удаления голосов в блоках старше N. Значение N показывает разность (возраст) между текущим блоком и блоком, в котором есть голос -N = -1 | Все блоки | Удаление голосов не выполняется | Значение «-1» преобразуется в максимально возможное беззнаковое число (аналог бесконечности). Используется для хранения голосов длительное время +| Значение N | Количество блоков с сохраняемыми голосами | Выполняемая операция | Комментарий | +| :--- | :--- | :--- | :--- | +| N = 0 | 0 | Удаление голосов сразу после закрытия поста | Используется для случая, когда не требуется сохранения голосов | +| N > 0 | N | Удаление голосов в блоках старше N | Используется для сохранения голосов N блоков от текущего и удаления голосов в блоках старше N. Значение N показывает разность \(возраст\) между текущим блоком и блоком, в котором есть голос | +| N = -1 | Все блоки | Удаление голосов не выполняется | Значение «-1» преобразуется в максимально возможное беззнаковое число \(аналог бесконечности\). Используется для хранения голосов длительное время | +Во всех случаях удаление голосов не выполняется до закрытия поста. - -Во всех случаях удаление голосов не выполняется до закрытия поста. - -**Примечание:** Доработка выполнена по просьбе делегатов. +**Примечание:** Доработка выполнена по просьбе делегатов. ### Возможность настройки конфигурационного файла для увеличения количества ключевых слов или фраз для поиска нужной информации в постах -В предыдущих версиях количество тегов (ключевых слов или фраз) в запросе к Узлу блокчейна ограничивалось пятью, что не всегда было достаточным для более детального описания запрашиваемой информации в постах. +В предыдущих версиях количество тегов \(ключевых слов или фраз\) в запросе к Узлу блокчейна ограничивалось пятью, что не всегда было достаточным для более детального описания запрашиваемой информации в постах. -В новой версии максимальное количество тегов в запросе к Узлу блокчейна может быть увеличено до 15 включительно. Кроме этого, введено ограничение на размер тега, составляющее 512 символов. В конфигурационный файл `config.ini` добавлены параметры `tags-number` и `tag-max-length`, с помощью которых пользователь может задать количество и размер тега по своему усмотрению, что позволяет пользователю более гибко настраивать работу блокчейна. +В новой версии максимальное количество тегов в запросе к Узлу блокчейна может быть увеличено до 15 включительно. Кроме этого, введено ограничение на размер тега, составляющее 512 символов. В конфигурационный файл `config.ini` добавлены параметры `tags-number` и `tag-max-length`, с помощью которых пользователь может задать количество и размер тега по своему усмотрению, что позволяет пользователю более гибко настраивать работу блокчейна. **Изменения в конфигурационном файле config.ini** -Параметры `tags-number` и `tag-max-length` приведены в следующей таблице. +Параметры `tags-number` и `tag-max-length` приведены в следующей таблице. + +| Имя | Тип | Значение по умолчанию | Комментарий | +| :--- | :--- | :--- | :--- | +| `tags-number` | std::size\_t | 5 | Это значение может быть увеличено до 15 включительно | +| `tag-max-length` | std::size\_t | 512 | Не рекомендуется устанавливать размер тега более 512 символов | -Имя | Тип | Значение по умолчанию | Комментарий -:------------ |:---------- |:---------- |:----------- -`tags-number` | std::size_t | 5 | Это значение может быть увеличено до 15 включительно -`tag-max-length` | std::size_t | 512 | Не рекомендуется устанавливать размер тега более 512 символов +В случае принимаемого значения параметра `tags-number` по умолчанию доработка имеет обратную совместимость с предыдущими версиями. -В случае принимаемого значения параметра `tags-number` по умолчанию доработка имеет обратную совместимость с предыдущими версиями. +## Устранение недостатка в работе приложения cli\_wallet с аккаунтом, имеющим несколько авторизаций -## Устранение недостатка в работе приложения cli_wallet с аккаунтом, имеющим несколько авторизаций В предыдущих версиях возникала сложность с подписанием аккаунтом транзакции, если этот аккаунт имел возможность авторизоваться ключами сторонних аккаунтов. Перечень имен сторонних аккаунтов содержался в поле `account_auths`. -Транзакции, создаваемые аккаунтом могли быть подписаны только ключами сторонних аккаунтов из поля `account_auths`. При попытке подписать транзакцию ключом основного аккаунта приложение `cli_wallet` выдавало сообщение об ошибке. +Транзакции, создаваемые аккаунтом могли быть подписаны только ключами сторонних аккаунтов из поля `account_auths`. При попытке подписать транзакцию ключом основного аккаунта приложение `cli_wallet` выдавало сообщение об ошибке. Для устранения этого недостатка в версии SF-0.18.4 доработан метод `annotated_signed_transaction()` приложения `cli_wallet` с сохранением перечня входных и выходных параметров этого метода. Доработка обеспечила возможность подписывать транзакцию как ключами аккаунтов с именами из поля `account_auths`, так и ключом основного аккаунта. - -## Устранение недостатка в отображении авторов в ленте публикаций -Недостаток в отображаемой информации в ленте публикаций проявлялся в случае, когда автор, на публикации которого у пользователя была подписка, перепубликовывал работу стороннего автора. В результате в ленте публикаций отображалась информация о стороннем авторе, на публикации которого у пользователя не было подписки. Из-за отсутствия сообщения о причине его появления у пользователя возникало сложности в восприятии отображаемой информации на ленте публикаций. -В версии 0.18.4 лента публикаций дополнена полем `"reblogged_by:"`, в котором отображается имя автора, перепубликовавшего работу стороннего автора. - +## Устранение недостатка в отображении авторов в ленте публикаций + +Недостаток в отображаемой информации в ленте публикаций проявлялся в случае, когда автор, на публикации которого у пользователя была подписка, перепубликовывал работу стороннего автора. В результате в ленте публикаций отображалась информация о стороннем авторе, на публикации которого у пользователя не было подписки. Из-за отсутствия сообщения о причине его появления у пользователя возникало сложности в восприятии отображаемой информации на ленте публикаций. +В версии 0.18.4 лента публикаций дополнена полем `"reblogged_by:"`, в котором отображается имя автора, перепубликовавшего работу стороннего автора. + ## Фильтрация запрашиваемой информации об операциях из истории аккаунта -В плагине `account_history` содержится информация о большом количестве операций, многие из которых напрямую не связаны с аккаунтом (например, голосование за посты этого аккаунта, а также наличие повторяющихся операций в виде "шума". Для получения информации об интересующей операции аккаунта необходимо было создавать несколько запросов на блокчейн, чтобы на стороне клиента из множества операций выбрать нужную и отказаться от остальных. -С целью ускорения поиска необходимой информации в версии 0.18.4 добавлен параметр, с помощью которого можно фильтровать операции по определенным признакам. +В плагине `account_history` содержится информация о большом количестве операций, многие из которых напрямую не связаны с аккаунтом \(например, голосование за посты этого аккаунта, а также наличие повторяющихся операций в виде "шума". Для получения информации об интересующей операции аккаунта необходимо было создавать несколько запросов на блокчейн, чтобы на стороне клиента из множества операций выбрать нужную и отказаться от остальных. +С целью ускорения поиска необходимой информации в версии 0.18.4 добавлен параметр, с помощью которого можно фильтровать операции по определенным признакам. + +**Изменения в API-методе get\_account\_history** +В метод добавлен произвольный параметр `query` для фильтрации операций. По умолчанию фильтрация отключена. Метод имеет следующий вид: -**Изменения в API-методе get_account_history** -В метод добавлен произвольный параметр `query` для фильтрации операций. По умолчанию фильтрация отключена. Метод имеет следующий вид: ```cpp get_account_history(account_name, [from, [limit, [query]]]) ``` -Параметры `from` и `limit` в методе являются произвольными и по умолчанию принимают значения «-1» «100» соответственно. Метод может быть вызван с одним заданным параметром (например, `get_account_history(account)`) для получения 100 последних операций аккаунта. -Параметр `query` является структурой (объектом) и содержит следующие поля: -`select_ops` — перечень операций, которые необходимо получить. Значение может содержать имена операций (в том числе оканчивающие на «_operation»), а также ключевые слова: + +Параметры `from` и `limit` в методе являются произвольными и по умолчанию принимают значения «-1» «100» соответственно. Метод может быть вызван с одним заданным параметром \(например, `get_account_history(account)`\) для получения 100 последних операций аккаунта. +Параметр `query` является структурой \(объектом\) и содержит следующие поля: +`select_ops` — перечень операций, которые необходимо получить. Значение может содержать имена операций \(в том числе оканчивающие на «\_operation»\), а также ключевые слова: `ALL` — все операции; `REAL` — только операции явно заданные; `VIRTUAL` — только виртуальные операции; `filter_ops` — перечень операций, которые следует исключить. Принимает те же значения, что и `select_ops`. Это поле является произвольным и по умолчанию принимает значение пусто; -`direction` — «направление» операции относительно аккаунта (например, операция `vote` определяет двух аккаунтов: того, кто голосует и того, за чей пост голосуют). Это поле является произвольным и принимает следующие значения: -`any` — отсутствие направления фильтрации (значение по умолчанию); -`sender` — характеризует аккаунта как отправителя (например, `creator` или `voter`); -`receiver`— характеризует аккаунта как получателя (например, `created` или `voted`); -`dual` — характеризует аккаунта как отправителя и получателя одновременно (например, `voting self post` или операция неоднозначно определяющая аккаунта). - -**Изменения в клиентском приложении cli_wallet** -Приложение `cli_wallet` дополнено методом `filter_account_history()`, который выполняет те же функции, что и метод `get_account_history()`. В отличие от последнего имеет входной параметр `query` для поддержки фильтрации. Вызывает API-метод `get_account_history()` непосредственно из тела. -Примеры вызова `filter_account_history()`: +`direction` — «направление» операции относительно аккаунта \(например, операция `vote` определяет двух аккаунтов: того, кто голосует и того, за чей пост голосуют\). Это поле является произвольным и принимает следующие значения: +`any` — отсутствие направления фильтрации \(значение по умолчанию\); +`sender` — характеризует аккаунта как отправителя \(например, `creator` или `voter`\); +`receiver`— характеризует аккаунта как получателя \(например, `created` или `voted`\); +`dual` — характеризует аккаунта как отправителя и получателя одновременно \(например, `voting self post` или операция неоднозначно определяющая аккаунта\). + +**Изменения в клиентском приложении cli\_wallet** +Приложение `cli_wallet` дополнено методом `filter_account_history()`, который выполняет те же функции, что и метод `get_account_history()`. В отличие от последнего имеет входной параметр `query` для поддержки фильтрации. Вызывает API-метод `get_account_history()` непосредственно из тела. +Примеры вызова `filter_account_history()`: + ```cpp get_account_history cyberfounder -1 100 filter_account_history cyberfounder -1 100 {"select_ops":["REAL","interest"], "filter_ops":["transfer"]} filter_account_history cyberfounder -1 100 {"direction":"receiver","filter_ops":["producer_reward"]} ``` -Изменения имеют обратную совместимость и сохраняют вызов и функциональные возможности метода `get_account_history()`. - -## Используемая терминология -**Автор транзакции** — пользователь, предлагаемый на голосование созданную им транзакцию на блокчейне. - -**Аккаунт** (англ. account) — хранимая в системе учетная запись пользователя для его опознавания (аутентификации) и предоставления доступа к его личным данным и настройкам. - -**Блог** (англ. web blog) — веб-сайт, основное содержимое которого — регулярно добавляемые записи, содержащие текст, изображения или мультимедиа. - -**Блокчейн** (англ. block chain — цепочка блоков) — строго структурированная база данных с определенными правилами построения цепочек транзакций и доступа к информации, которая исключает кражу данных, мошенничество, а также нарушение имущественных прав. - -**Голос** или **Golos** — криптовалюта, обеспечивающая перечисление средств между кошельками (счетами) пользователей, а также конвертацию или продажу на биржевом рынке. - -**Делегат** (англ. witness) — пользователь блокчейна, наделенный определенными полномочиями. Используя свое (арендованное) оборудование, обеспечивают функционирование Узлов (нод) сети, создают и подписывают новые блоки, обеспечивая безопасность сети. - -**Золотой** или **GBG** (англ. Golden Backed by Golos) — криптовалюта, обеспечивающая хеджирование активов пользователя, то есть поддержку активов определенными фондами (золотом, рублями и пр.). Блокчейн гарантирует выплату владельцу активов сумму денежных средств, эквивалентную стоимости этих активов. Единица Золотого оценивается в 1 мг золота. Этот курс является базовым для проведения операций с внешним экономическим миром. Общее количество такого вида криптовалюты в системе не должно превышать 5%. В случае несоблюдения этого условия, правила, по которым функционирует блокчейн, должны быть изменены. - -**Кошелек** или **блокчейн-кошелек** (англ. blockchain wallet) — веб-кошелек для хранения криптовалюты. - -**Криптовалюта** — разновидность цифровой валюты, создание и контроль над которой базируются на криптографических методах. Golos Core поддерживает операции над тремя видами криптовалюты: Голос, Сила Голоса и Золотой. -**Плагин** (англ. plugin) — программный компонент, выполненный в виде отдельного модуля и являющийся дополнением к основной программе. - -**Пост** (англ. to post — размещать, публиковать) — любая статья или запись на веб-странице, содержащая название, перечень ключевых слов и непосредственно текст. - -**Реблог** (сущ. от англ. reblog) — размещенный в блоге пользователя социальной сети пост, заимствованный из стороннего блога с целью поделиться впечатлениями с читателями блога этого пользователя. - -**Реблог поста** (глаг. действие) — копирование в блог поста, ранее размещенного в другом блоге. - -**Сила Голоса** или **Golos Power** — криптовалюта, обеспечивающая создание постов и комментариев, а также голосование за посты в системе блокчейн. Эффективность постов оценивается количеством Силы Голоса. - -**Токен** (англ. token) — внутренняя платежная единица, предназначенная для представления цифрового баланса в некотором активе (не является криптовалютой). - -**Узел** (англ. node) — отдельное (программное) устройство, подключаемое к сети блокчейн по схеме клиент-сервер. Узлы являются активными элементами и составляют основу технологии сети блокчейна. - -**Узел делегатский** (англ. witness node) — Узел, построенный с использованием конфигурационного файла config_witness.ini, содержащего минимальный набор включенных плагинов. - -**Узел API** (англ. API node) — Узел, построенный с использованием конфигурационного файла config.ini, содержащего полную конфигурацию со всем набором включенных плагинов. - -**bandwidth** — граница активности пользователя, показывающая стоимость количества выполняемых им операций за период времени. За каждую операцию (например, публикацию поста, голосование) в блокчейне взимается плата, что ограничивает активность пользователя. - -**SF** (англ. SoftFork) — программное обеспечение для блокчейна HardFork. - -**VESTS** — то же самое, что Сила Голоса. +Изменения имеют обратную совместимость и сохраняют вызов и функциональные возможности метода `get_account_history()`. -**** diff --git a/developers/howto/README.md b/developers/howto/README.md new file mode 100644 index 00000000..c69dfa42 --- /dev/null +++ b/developers/howto/README.md @@ -0,0 +1,10 @@ +# Руководства \(HOWTO\) + +* [Скрипт регистрации аккаунтов](registration-service.md) +* [Как использовать мультиподписи](multisig.md) +* [Как объединять операции в одну транзакцию](ops-merging.md) +* [Кэширование API](api-cache.md) +* [Пример запуска тестнета](testnet.md) + +И многие полезности в постах [@vik](https://golos.id/@vik), [@ropox](https://golos.id/@ropox), [@vvk](https://golos.id/@vvk) и других разработчиков в блогах на Голосе. + diff --git a/golosd/howto/api-cache.md b/developers/howto/api-cache.md similarity index 55% rename from golosd/howto/api-cache.md rename to developers/howto/api-cache.md index 64608d84..9f5bab50 100644 --- a/golosd/howto/api-cache.md +++ b/developers/howto/api-cache.md @@ -1,17 +1,10 @@ -# 🚀 \[Кэширование API golos\] Запуск множества многопоточных живых скриптов на одной ноде - решение для масштабируемости ботов голоса +# Кэширование API -Автор: [@vik](https://golos.io/@vik) - -**Суть решаемой проблемы: -**![](https://imgp.golos.io/0x0/https://s17.postimg.org/byltwz7rh/image.png) - -**Решение:** - -В конце поста будет приведен простой код для node.js который позволит оптимизировать работу множества скриптов на одной ноде. +Автор: [@vik](https://golos.id/@vik) ![](https://imgp.golos.io/0x0/https://s2.postimg.org/qf2uq63pz/image.png) -В последнее время моими [телеграм ботами для голосования](https://golos.io/ru--boty/@vik/vozobnovlenie-raboty-kuratorskikh-botov-dlya-telegram) пользуются все больше людей и естественно нагрузка возросла в 10-ки раз по сравнению даже с прошлым месяцем. Я поднял [дополнительные ноды](https://golos.io/ru--golos/@vik/etika-botovodstva-na-golose-i-ekonomiya-resursa-pablik-nod-robot-delegat-za-kotorogo-ne-nuzhno-golosovat), распределил нагрузки, добавил мощности серверам, но узкое место оказалось в самой пропускной способности нод. +В последнее время моими телеграм ботами для голосования пользуются все больше людей и естественно нагрузка возросла в 10-ки раз по сравнению даже с прошлым месяцем. Я поднял дополнительные ноды, распределил нагрузки, добавил мощности серверам, но узкое место оказалось в самой пропускной способности нод. Обратите внимание на скрин, там изредка мелькают строки белого цвета. Это череда новых блоков. Желтые же строки - это обращение к ноде. @@ -23,7 +16,7 @@ Решение я выбрал такое: -Вместо сотен отдельных сессий пользователей работает **только один ОТДЕЛЬНЫЙ скрипт, **который опрашивает блоки. И сохраняет данные блока в базу данных Redis, все это происходит за доли миллисекунд, так как redis при правильной настройке не просто база, а мощный кэширующий инструмент. +Вместо сотен отдельных сессий пользователей работает **только один ОТДЕЛЬНЫЙ скрипт,** который опрашивает блоки. И сохраняет данные блока в базу данных Redis, все это происходит за доли миллисекунд, так как redis при правильной настройке не просто база, а мощный кэширующий инструмент. Далее, каждый из пользователей бота обращается не к ноде, а уже к redis, чтобы получить данные блока с операциями блокчейна. Таким образом, нагрузка должна упасть в 10-ки, а то и больше раз. **Разработчикам и владельцам нод** @@ -39,62 +32,64 @@ ![](https://imgp.golos.io/0x0/https://s13.postimg.org/tii4r8vad/code.jpg) - require('events').EventEmitter.prototype._maxListeners = 100000 - const Promise = require("bluebird") - const _ = require('lodash') - const golos = require("golos-js") - const redis = require("redis") - const client = redis.createClient() - golos.config.set('websocket','ws://localhost:9090') - let trig = {existBlock:true} - const dynamicSnap = new Promise((resolve, reject) => - { - golos.api.getDynamicGlobalProperties((err, res) => - { - if (err) {console.log(err)} - else { - resolve(res) +```text +require('events').EventEmitter.prototype._maxListeners = 100000 +const Promise = require("bluebird") +const _ = require('lodash') +const golos = require("golos-js") +const redis = require("redis") +const client = redis.createClient() +golos.config.set('websocket','ws://localhost:9090') +let trig = {existBlock:true} +const dynamicSnap = new Promise((resolve, reject) => + { + golos.api.getDynamicGlobalProperties((err, res) => + { + if (err) {console.log(err)} + else { + resolve(res) + } + }) +}) +const FIRSTBLOCK = n => + n.head_block_number +const SENDBLOCK = currentblock => + { + golos.api.getBlock(currentblock, (err, result) => + { + if (err) { + console.log(err) + } else if (result === null){ + trig.existBlock = false + }else { + let JSONblock = JSON.stringify(result) + client.hmset("GolosLastBlock", "data",JSONblock); + console.log(JSONblock) + trig.existBlock = true } - }) }) - const FIRSTBLOCK = n => - n.head_block_number - const SENDBLOCK = currentblock => - { - golos.api.getBlock(currentblock, (err, result) => - { - if (err) { - console.log(err) - } else if (result === null){ - trig.existBlock = false - }else { - let JSONblock = JSON.stringify(result) - client.hmset("GolosLastBlock", "data",JSONblock); - console.log(JSONblock) - trig.existBlock = true - } - }) - } - const NEXTBLOCKS = firstblock => - { - let currentblock = firstblock - setInterval(() => - { - if(trig.existBlock){ - currentblock++ - }else{ - console.warn(`Проблема блока ${currentblock}`)} - SENDBLOCK(currentblock) - }, 3000) - } - dynamicSnap - .then(FIRSTBLOCK) - .then(NEXTBLOCKS) - .catch(e => console.log(e)); +} +const NEXTBLOCKS = firstblock => + { + let currentblock = firstblock + setInterval(() => + { +if(trig.existBlock){ +currentblock++ +}else{ +console.warn(`Проблема блока ${currentblock}`)} +SENDBLOCK(currentblock) +}, 3000) +} +dynamicSnap + .then(FIRSTBLOCK) + .then(NEXTBLOCKS) + .catch(e => console.log(e)); +``` Далее вам достаточно брать данные блока из базы redis -``` +```text client.hgetall("GolosLastBlock", function(err, LB) { let LastBlockRedis = JSON.parse(LB.data) filterOperations(LastBlockRedis) @@ -103,9 +98,5 @@ let LastBlockRedis = JSON.parse(LB.data) Где предполагается, что функция filterOperations обрабатывается вашим скриптом. -> По материалам [статьи](https://golos.io/ru--golos/@vik/zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa). -> -> Автор [@vik](https://golos.io/@vik) - - +По материалам [статьи](https://golos.id/ru--golos/@vik/zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa) diff --git a/golosd/howto/multisig.md b/developers/howto/multisig.md similarity index 67% rename from golosd/howto/multisig.md rename to developers/howto/multisig.md index ff58b8d4..58a84696 100644 --- a/golosd/howto/multisig.md +++ b/developers/howto/multisig.md @@ -1,12 +1,10 @@ -#### Сложные мультисиги с распределением уровня доступа + простой смартконтракт на голосе. Без хардфорка, штатными средствами! +# Как использовать мультиподписи -Автор [@vik](https://golos.io/@vik) +Автор [@vik](https://golos.id/@vik) Ранее я уже добавлял примитивную форму для создания мультипостинг-аккаунта с равным весом, оказалось ее активно используют инициаторы различных программ совместного курирования. Считаю необходимым провести ликбез и показать как можно использовать кошельки с мультиподписью и распределением веса. -Для удобства я создал отдельный сервис - -#### [GOLOS.CF/MULTISIG](https://golos.cf/multisig) +Для удобства я создал отдельный сервис [GOLOS.CF/MULTISIG](https://golos.cf/multisig) **Опытные пользователи могут использовать сразу, все остальным рекомендую внимательно читать пост :\)** @@ -18,7 +16,7 @@ Мультиподпись на голосе работает очень удобным и гибким образом, как известно у каждого пользователя есть свой минимальный набор ключей, я буду использовать два основных ключа - активный и постинг. -Постинг ключ - Безопасно. Используйте приватный **постинг **ключ для операций связанных с голосованием, размещением постов, фолловингом и реблогами. +Постинг ключ - Безопасно. Используйте приватный **постинг** ключ для операций связанных с голосованием, размещением постов, фолловингом и реблогами. Активный ключ - Опасно. Используйте приватный активный ключ для транзакций связанных с переводами токенов, редактированием аккаунта, настройками мультисига, с понижением и переадресацией силы голоса и других операций связанных с настройкой кошелька. @@ -26,35 +24,33 @@ Перейдем к практике! -#### 🔑🔑🔑 Создание мультисиг-аккаунта для своего DAO +## 🔑 Создание мультисиг-аккаунта для своего DAO > DAO - децентрализованная автономная организация -Придумаем собственное DAO и некое подобие смартконтракта, пусть это будет аккаунт-кошелек [@cryptobank](https://golos.io/@cryptobank) +Придумаем собственное DAO и некое подобие смартконтракта, пусть это будет аккаунт-кошелек @cryptobank Аккаунт с наибольшим, но не решающим влиянием: -[@vik](https://golos.io/@vik) \(вес 5\) +@vik \(вес 5\) Аккаунты представители со средним влиянием: -[@vox](https://golos.io/@vox)[@robot](https://golos.io/@robot)[@dpos](https://golos.io/@dpos)[@ceo](https://golos.io/@ceo) - вес у каждого 2 +@vox @robot @dpos @ceo - вес у каждого 2 Также мы установим минимально-необходимый вес для принятия блокчейном транзакции - 10 -Эти условия означают, что для того, чтобы отправить средства с аккаунта [@cryptobank](https://golos.io/@cryptobank), нужно чтобы транзакцию подписали несколько участников, их суммарный вес должен достигать 10. +Эти условия означают, что для того, чтобы отправить средства с аккаунта @cryptobank, нужно чтобы транзакцию подписали несколько участников, их суммарный вес должен достигать 10. -[@vox](https://golos.io/@vox) [@robot](https://golos.io/@robot)[@dpos](https://golos.io/@dpos)[@ceo](https://golos.io/@ceo) - суммарный вес 8 +@vox @robot @dpos @ceo - суммарный вес 8 -Они не смогут потратить средства [@cryptobank](https://golos.io/@cryptobank) пока транзакцию не подпишет [@vik](https://golos.io/@vik) и не сделает сумму веса не менее 10. +Они не смогут потратить средства @cryptobank пока транзакцию не подпишет @vik и не сделает сумму веса не менее 10. -В то же время если [@vik](https://golos.io/@vik)и [@robot](https://golos.io/@robot) захотят потратить средства [@cryptobank](https://golos.io/@cryptobank)- они не смогут это сделать, так как их вес будет 7. Но если присоединятся [@dpos](https://golos.io/@dpos) и [@vox](https://golos.io/@vox) - транзакция будет осуществлена \(вес 5+2+2+2 = 11\) и подпись[@ceo](https://golos.io/@ceo)не понадобилась, хватило веса и без него. +В то же время если @vik и @robot захотят потратить средства @cryptobank - они не смогут это сделать, так как их вес будет 7. Но если присоединятся @dpos и @vox - транзакция будет осуществлена \(вес 5+2+2+2 = 11\) и подпись @ceo не понадобилась, хватило веса и без него. Говоря о смартконтракте, я подразумевал использование суперкитов голоса в качестве постинг мультисига с большим количеством участников. Например вес каждого участника 1. Всего участников 20. Минимальный вес для подписи операции с простановкой 100% апвота - 15. Таким образом если 15 человек из 20 согласны - суперкит голосует за некий пост. И это абсолютно безопасно - ключи остаются при ките. -#### Создание мультисига - -#### [golos.cf/multisig/\#step4](https://golos.cf/multisig/#step4) +## Создание мультисига [golos.cf/multisig/\#step4](https://golos.cf/multisig/#step4) ![](https://imgp.golos.io/0x0/http://telegra.ph//file/a2fb302ce6b9022e3d669.png) @@ -64,23 +60,19 @@ Опция уровня доступа позволяет выбирать между постинг/активной авторизацией. -На скриншоте я добавил аккаунту [@cryptobank](https://golos.io/@cryptobank) минимальный вес 10 и добавил в мультисиг логины с весом соблюдая синтаксис для моей формы: +На скриншоте я добавил аккаунту @cryptobank минимальный вес 10 и добавил в мультисиг логины с весом соблюдая синтаксис для моей формы: `vik=5/robot=2/dpos=2/vox=2` Уровень доступа я выбрал - активный, поскольку это интереснее и в случае ошибок "накажет рублем" :\) -Создание мультисига успешно, проверяем в golosd - -![](https://imgp.golos.io/0x0/http://telegra.ph//file/07883bb000bcf62a587a7.png) +## 📓 Создание мультиподписной транзакции -#### 📓 Создание мультиподписной транзакции +Аккаунт мультисиг уже есть - @cryptobank -Аккаунт мультисиг уже есть - [@cryptobank](https://golos.io/@cryptobank) +Теперь смоделируем ситуацию. Например @vik как участник мультисига и президент карманного DAO хочет распределить бюджет и перевести с бомжебанка монеты аккаунтам @registrator и @upvoter -Теперь смоделируем ситуацию. Например [@vik](https://golos.io/@vik) как участник мультисига и президент карманного DAO хочет распределить бюджет и перевести с бомжебанка монеты аккаунтам [@registrator](https://golos.io/@registrator) и [@upvoter](https://golos.io/@upvoter) - -Для этого [@vik](https://golos.io/@vik) создает транзакцию, подписывает ее сам и передает на подпись другим. +Для этого @vik создает транзакцию, подписывает ее сам и передает на подпись другим. ![](https://imgp.golos.io/0x0/http://telegra.ph//file/ffbbcd4b4021f0a4f2236.png) @@ -88,19 +80,19 @@ Формат ввода операций был такой: -``` +```text ["transfer",{"from":"cryptobank","to":"registrator","amount":"0.002 GBG","memo":"Тест мультисига https://golos.cf/multisig/#step1"}], ["transfer",{"from":"cryptobank","to":"upvoter","amount":"0.005 GBG","memo":"Тест мультисига https://golos.cf/multisig/#step1"}] ``` -Обратите внимание, что в поле логина я вожу логин не [@vik](https://golos.io/@vik), а [@cryptobank](https://golos.io/@cryptobank) +Обратите внимание, что в поле логина я вожу логин не @vik, а @cryptobank И саму транзакцию формирую так, будто ее отправляет криптобанк, а не я. Из своего я использую только ключ, он формирует подпись, которая будет добавлена в транзакцию. В правой колонке у нас появилась транзакция с операциями и с важным атрибутом signatures \(подписи\) ![](https://imgp.golos.io/0x0/http://telegra.ph//file/2c32e01307587c87998b3.gif) -Пока что там только одна подпись от аккаунта [@vik](https://golos.io/@vik) +Пока что там только одна подпись от аккаунта @vik Обратите также внимание на срок действия транзакции - участники должны успеть подписать ее за час! \(можно настроить иное значение, меньшее\) @@ -110,25 +102,25 @@ _\(это абсолютно безопасно - данные в сырой транзакции не являются приватными, без участников мультисига с полным весом ее нельзя отправить, а уж тем более изменить адресатов, суммы и т.д.\)_ -#### 📓 Подпись ранее созданной транзакции участниками мультисига +## 📓 Подпись ранее созданной транзакции участниками мультисига -[@vik](https://golos.io/@vik) передает транзакцию [@vox](https://golos.io/@vox) +@vik передает транзакцию @vox Тот \(как и остальные кроме автора транзакции\) использует уже другую форму [golos.cf/multisig/\#step2](https://golos.cf/multisig/#step2) **🖋 Подписать транзакцию как участник мультисига** -В эту форму нужно ввести ключ [@vox](https://golos.io/@vox), логин [@cryptobank](https://golos.io/@cryptobank) -и полученную от [@vik](https://golos.io/@vik) транзакцию. +В эту форму нужно ввести ключ @vox, логин @cryptobank +и полученную от @vik транзакцию. На кнопку подписать для удобства повешена сразу и функция отправки в блокчейн. Однако если веса не хватает, вы получите вот такую ошибку об авторити связанную с отправкой транзакции, с тем, что не хватает веса подписей. ![](https://imgp.golos.io/0x0/http://telegra.ph//file/201d3ce0694425cf7686e.png) -А справа появится эта же транзакция, но с дополнительной подписью в атрибуте signatures , подписью от [@vox](https://golos.io/@vox) в нашем случае. +А справа появится эта же транзакция, но с дополнительной подписью в атрибуте signatures , подписью от @vox в нашем случае. -[@vox](https://golos.io/@vox) копирует дополненую транзакцию и отправляет ее полный текст следующему в списке, [@robot](https://golos.io/@robot) или [@dpos](https://golos.io/@dpos). +@vox копирует дополненую транзакцию и отправляет ее полный текст следующему в списке, @robot или @dpos. Те в свою очередь проделывают тоже самое, подписывают и передают дальше транзакцию со своими подписями. ![](https://imgp.golos.io/0x0/http://telegra.ph//file/8ebcfecdec650222854fb.png) @@ -139,15 +131,9 @@ _\(Следует понимать, что эти подписи динамич ![](https://imgp.golos.io/0x0/http://telegra.ph//file/b1b517f53941bf26a07b2.png) -В форме показывается кликабельный вывод с ID транзакции - -![](https://imgp.golos.io/0x0/http://telegra.ph//file/0a6df8758c9f7d34b50aa.png) - ---- - **Важно замечание** -В примере выше у [@cryptobank](https://golos.io/@cryptobank) есть возможность самому потратить средства без оглядки на участников мультисига. Чтобы исключить такую возможность, для мультисига нужно создавать отдельный аккаунт и уже на этапе создания назначать ему минимальный вес больший его собственного веса, тогда он не сможет самостоятельно использовать свой активный ключ! +В примере выше у @cryptobank есть возможность самому потратить средства без оглядки на участников мультисига. Чтобы исключить такую возможность, для мультисига нужно создавать отдельный аккаунт и уже на этапе создания назначать ему минимальный вес больший его собственного веса, тогда он не сможет самостоятельно использовать свой активный ключ! **Можно также добавить в существующий аккаунт мульти авторизацию для owner ключа, поскольку в неумелых руках это может "убить" аккаунт, такую форму я не публикую.** @@ -161,16 +147,10 @@ _\(Следует понимать, что эти подписи динамич Простые примеры использования мультисига: -* Для голосования, определения консенсуса. - Например, как сервис для делегатов, голосующих за/против ХФ или другие нововведения. - -* Конкурс с призом. Пусть будет конкурс красоты с выбором самой красивой свинки пепы :\) - 10 конкурсанток, формируется для каждой транзакция на перевод призового фонда. Мультисигу переводится призовой фонд \(на балансе должен быть только он и переводиться полностью\). Добавляется 100 членов жюри в мультисиг с весом 1 \(минимальный вес принятия 51\) Членам жюри доставляют на подпись 10 транзакций, можно оформить в GUI в виде 10 карточек с фото куртизанок. Чью карточку-транзакцию в течении часа первой подпишут 51 член жюри - та конкурсантка и получит призовой фонд. - +* Для голосования, определения консенсуса. Например, как сервис для делегатов, голосующих за/против ХФ или другие нововведения. +* Конкурс с призом. Пусть будет конкурс красоты с выбором самой красивой свинки пепы :\) 10 конкурсанток, формируется для каждой транзакция на перевод призового фонда. Мультисигу переводится призовой фонд \(на балансе должен быть только он и переводиться полностью\). Добавляется 100 членов жюри в мультисиг с весом 1 \(минимальный вес принятия 51\) Членам жюри доставляют на подпись 10 транзакций, можно оформить в GUI в виде 10 карточек с фото куртизанок. Чью карточку-транзакцию в течении часа первой подпишут 51 член жюри - та конкурсантка и получит призовой фонд. * Или так, публикация клятвы, что если 75 пользователей подпишуться под транзакцией, автор разместит клятву, что съест свое лицо. Выставлен минимальный вес для постинга 75 И 100 пользователей наделены весом 1 \(или другим, пропорционально стеку, репутации и т.д.\) Если минимум 75 пользователь подписал транзакцию - отправляется пост или custom\_json с какой-то клятвой манифестом :\) +* Или пример сложнее, с параметризацией. Формируется транзакция в которую пакуется update witness для каждого делегата с параметром: плата за создание аккаунта, 1 GOLOS Дополнительно формируются еще несколько с платой 2, 3 и т.д. Какой вариант соберет больше всего подписей - столько массово, одномоментно и объявят делегаты. -* Или пример сложнее, с параметризацией. Формируется транзакция в которую пакуется update witness для каждого делегата с параметром: плата за создание аккаунта, 1 GOLOS Дополнительно формируются еще несколько с платой 2, 3 и т.д. - Какой вариант соберет больше всего подписей - столько массово, одномоментно и объявят делегаты. - -[Источник](https://golos.io/ru--golos/@vik/multisigi-na-golose-12-09) +По материалам [статьи](https://golos.id/@vik/multisigi-na-golose-12-09) diff --git a/golosd/howto/ops-merging.md b/developers/howto/ops-merging.md similarity index 74% rename from golosd/howto/ops-merging.md rename to developers/howto/ops-merging.md index 9f215227..48c0c2c6 100644 --- a/golosd/howto/ops-merging.md +++ b/developers/howto/ops-merging.md @@ -1,25 +1,19 @@ -### 🎓 Экономим ресурс аккаунта и сервера совмещая 100 операций в ОДНОЙ транзакции. +# Как объединять операции в одну транзакцию -Автор: [@vik](https://golos.io/@vik) - ---- +Автор: [@vik](https://golos.id/@vik) Операции голосования своими 100+ аккаунтами, упакованные в ОДНУ транзакцию: -#### [http://golosd.com/tx/522aa6fe847ea5b7fab6901d17f9f28c7a0f80c3](http://golosd.com/tx/522aa6fe847ea5b7fab6901d17f9f28c7a0f80c3) - -![](https://images.golos.io/DQmcfUzZmhQXGwsZ1aJxJvAp8iusvLEE2zMUVGnT5N4XhVF/image.png "боты голоса") - -* **Экономит время \(100+ апвотов одновременно\)** -* **Экономит bandwidth \(Новореги смогут совершать в**`X`**раз больше транзакций?\)** -* **Экономит ресурсы среды в которой выполняется скрипт \(браузер, сервер, приложение\)** +* **Экономит время \(100+ операций одновременно\)** +* **Экономит bandwidth \(новореги смогут совершать в**`X`**раз больше транзакций\)** +* **Экономит ресурсы среды скрипта \(браузер, сервер, приложение\)** Для начала выбираем 1 свой основной аккаунт-ботовод и прописываем его логин своим ботам в постинг-авторити. Это можно сделать массово с помощью скрипта: [https://github.com/vikxx/bots/blob/master/sample/setBotMaster.js](https://github.com/vikxx/bots/blob/master/sample/setBotMaster.js) Нужно заполнить массив -``` +```text const GolosBots = [ ["логин бота1",["posting","5**************ACTIVE WIF****"]], ["логин бота 3",["posting","5*****************"]], @@ -48,7 +42,7 @@ const GolosBots = [ Прописывать ключи всем аккаунтам не нужно, достаточно перечислить логины: -``` +```text const GolosBots = [ "vikx", "vikxx", @@ -59,7 +53,7 @@ const GolosBots = [ И для каждого логина сделаем свою операцию, записав их все в одну переменную **votes** -``` +```text for(let botname of GolosBots){ votes.push(["vote", @@ -75,7 +69,7 @@ votes.push(["vote", Затем сформируем одну транзакцию, добавим в нее все операции votes и подпишем все операции постинг ключем аккаунта-ботовода -``` +```text const unsignedTX = { 'expiration': expire, 'extensions': [], @@ -96,8 +90,5 @@ golos.api.broadcastTransactionSynchronous(signedTX) Скрипт полностью здесь: [https://github.com/vikxx/bots/blob/master/sample/botVotes.js](https://github.com/vikxx/bots/blob/master/sample/botVotes.js) -В итоге получаем способ совершать массовые операции экономя ресурсы как аккаунтов, так и сервера. -[http://golosd.com/tx/522aa6fe847ea5b7fab6901d17f9f28c7a0f80c3](http://golosd.com/tx/522aa6fe847ea5b7fab6901d17f9f28c7a0f80c3) - -[Источник](https://golos.io/ru--golos/@vik/ekonomim-resurs-akkaunta-i-servera-sovmeshaya-100-operacii-v-odnoi-tranzakcii) +По материалам [статьи](https://golos.id/ru--golos/@vik/ekonomim-resurs-akkaunta-i-servera-sovmeshaya-100-operacii-v-odnoi-tranzakcii) diff --git a/golosd/howto/vik-registration-service.md b/developers/howto/registration-service.md similarity index 81% rename from golosd/howto/vik-registration-service.md rename to developers/howto/registration-service.md index b313af8c..735406f4 100644 --- a/golosd/howto/vik-registration-service.md +++ b/developers/howto/registration-service.md @@ -1,16 +1,10 @@ -# 📢 Мгновенная регистрация аккаунтов на GOLOS и STEEM. Без верификации и ограничений! +# Скрипт регистрации аккаунтов -Автор: [@vik](https://golos.io/@vik) +Автор: [@vik](https://golos.id/@vik) Этот простой скрипт поможет вам зарегистрировать любое количество новых аккаунтов на голосе. -![](https://imgp.golos.io/0x0/https://i.imgur.com/BxJ5UNF.jpg) - -**Браузерная версия** - -Голос [golos.cf/reg.html](https://golos.cf/reg.html) - -Steemit [golos.cf/steem](https://golos.cf/steem) +**Браузерная версия** [golos.cf/reg/](https://golos.cf/reg/) ![](https://imgp.golos.io/0x0/https://i.imgur.com/ZV6OXXu.jpg) @@ -26,30 +20,26 @@ Steemit [golos.cf/steem](https://golos.cf/steem) 💡 Аккаунт регистратора будет так же установлен в качестве RECOVERY. В случае если вы потеряете доступ к новому аккаунту - вы сможете восстановить его только при помощи своего аккаунта регистратора. -**📢 Рекомендуется скопировать исходный код страницы и использовать ее локально! Не вводите активный ключ на непроверенных сайтах - у вас могут украсть ваши GOLOS/GBG. Если вы нашли эту или похожую форму на другом сайте - обратитесь в чат **[**@chain\_cf**](https://t.me/chain_cf)** и спросите совета у более опытных пользователей!** - ---- +**📢 Рекомендуется скопировать исходный код страницы и использовать ее локально! Не вводите активный ключ на непроверенных сайтах - у вас могут украсть ваши GOLOS/GBG. Если вы нашли эту или похожую форму на другом сайте - обратитесь в чат** [**@chain\_cf**](https://t.me/chain_cf) **и спросите совета у более опытных пользователей!** **Node JS** * Поставьте nodeJS -* Установите библиотеку golos-js - `npm install golos-js` - +* Установите библиотеку golos-js `npm install golos-js` * Скачайте файл accountregistartor.js [https://github.com/vikxx/robot/blob/master/accountregistartor.js](https://github.com/vikxx/robot/blob/master/accountregistartor.js) * Заполните необходимые поля и запустите `node accountregistartor.js` -```js +```javascript // Придумайте логин и пароль для нового аккаунта const NAME = "nickname123" const PASS = "MyStrongPass1234567890" const golos = require('golos-js') -golos.config.set('websocket', "wss://api.golos.cf") +golos.config.set('websocket', "wss://api.golos.blckchnd.com/ws") // Данные создателя аккаунта // Активный ключ создателя (вашего существующего аккаунта) @@ -99,9 +89,5 @@ jsonMetadata, }); ``` -> По материалам [статьи](https://golos.io/ru--golos/@vik/mgnovennaya-registraciya-akkauntov-na-golos-i-steem-bez-verifikacii-i-ogranichenii) -> -> Автор [@vik](https://golos.io/@vik) - - +По материалам[ статьи](https://golos.id/ru--golos/@vik/mgnovennaya-registraciya-akkauntov-na-golos-i-steem-bez-verifikacii-i-ogranichenii) diff --git a/developers/howto/testnet.md b/developers/howto/testnet.md new file mode 100644 index 00000000..9d2eda60 --- /dev/null +++ b/developers/howto/testnet.md @@ -0,0 +1,288 @@ +# Пример запуска тестнета + +Автор: [@ropox](https://golos.id/@ropox) + +Порой для писателей скриптов, ботов для голоса требуется отладить работу программ в тишине и спокойствии и в контролируемой среде. Не хочется, что бы бот к примеру перевел внезапно 10000 голосов неизвестно кому из-за глупой ошибки. Как это случилось однажды с доброботом. Опять же для регрессионных тестов, нужна возможность повторения сценариев с одинаковыми исходными данными, чтобы получить повторяемые, ожидаемые результаты. Ну и конечно тестирование ХФ, новой версии сети голоса. У нас сейчас актуальная версия сети 0.16.4, а новая версия будет 0.17.0. Если кто-то захочет протестировать новую версию, подключившись к реальной сети, то возможно нода с “неправильной” версией будет “саботировать” сеть. + +Вот для этого и запускается testnet. С тестовыми пользователями уже имеющими на балансе средства, с измененными настройками, позволяющими ускорить тестирование. + +К примеру можно установить уменьшение силы голоса не раз в неделю как в настоящей сети, а раз в 15 минут. Иначе бы пришлось ждать результатов теста неделями, а в тестнете всего 15 минут. Окно авторских вознаграждений можно сократить с недели, до получаса. Выгоды очевидны. + +Тестнет не связан с рабочей сетью и не мешает работе действующей сети. Так же можно тестировать свой секретный проект так, что бы до поры до времени никто про него не узнал. + +## Сборка образ докера + +В официальном репозитории golos уже есть готовые файлы для docker, и предпочтительно использовать их, чтобы не городить свои скрипты для компиляции, бороться с зависимостями. Все для вас сделает docker. Как работать с докером я расписывать сильно не буду. Инструкций полно в интернете. + +### Подготовка исходников + +Для начала скачаем исходники golos. Для этого воспользуемся git-ом. + +```text +$ git clone https://github.com/GolosChain/golos.git + +Клонирование в «golos»… +remote: Counting objects: 22425, done. +remote: Compressing objects: 100% (150/150), done. +remote: Total 22425 (delta 132), reused 177 (delta 76), pack-reused 22152 +Получение объектов: 100% (22425/22425), 13.47 MiB | 4.58 MiB/s, готово. +Определение изменений: 100% (15314/15314), готово. +``` + +У нас создастся папка golos с исходниками. Перейдем в нее и последующие комманды будет запускать в ней. + +Нам нужно будет переключить на нужную нам ветку. В настоящий момент меня интересует версия 0.17.0. + +![](https://imgp.golos.io/0x0/https://s3.postimg.org/83dc9q33n/047.png) + +Как видно на скриншоте, есть branch под названием **golos-v0.17.0**. Вот на нее нам и надо переключиться. Для этого в корне папки с исходниками выполним следующую команду + +```text +$ git checkout golos-v0.17.0 +Ветка golos-v0.17.0 отслеживает внешнюю ветку golos-v0.17.0 из origin. +Переключено на новую ветку «golos-v0.17.0» +``` + +И теперь нам надо обновить локальные файлы до версий в репозитории на гитхабе + +```text +$ git submodule update --init --recursive +Подмодуль «libraries/chainbase» (https://github.com/GolosChain/chainbase.git) зарегистрирован по пути «libraries/chainbase» +Подмодуль «libraries/fc» (https://github.com/GolosChain/fc.git) зарегистрирован по пути «libraries/fc» +Подмодуль «libraries/libcds» (https://github.com/khizmax/libcds.git) зарегистрирован по пути «libraries/libcds» +Клонирование в «/hom... +``` + +Теперь можно поменять нужные нам для теста параметры. К примеру я хочу тестировать скрипт, который должен запускаться после понижения силы голоса. Чтобы не ждать неделями, я сокращу интервал вывода СГ до 10 минут. Для этого открываю файл с настройками сети в редакторе. + +```text +$ nano libraries/protocol/include/steemit/protocol/config.hpp +``` + +И ищу переменные со словам withdraw и почти сразу нахожу нужные мне. +![](https://imgp.golos.io/0x0/https://s1.postimg.org/4vryqapwv/048.png) + +Меня интересует конкретно вот эта строка + +```text +#define STEEMIT_VESTING_WITHDRAW_INTERVAL_SECONDS (60*60*24*7) // 1 week per interval +``` + +Я исправляю, чтобы интервал был 10 минут и сохраняю файл + +```text +#define STEEMIT_VESTING_WITHDRAW_INTERVAL_SECONDS (60*10) // 1 week per interval +``` + +### Сборка образа + +В папке docker лежит файл для докера с инструкциями по сборке образа. + +```text +$ ls docker/* +docker/Dockerfile-testnet +``` + +Все, что нам требуется, это запустить сборку + +```text +$ docker build . -f docker/Dockerfile-testnet -t testnet-17 +``` + +Спустя какое то время мы имеем готовый образ докера + +![](https://imgp.golos.io/0x0/https://s4.postimg.org/7rt17rs0t/049.png) + +## Запуск + +Для начального запуска воспользуемся командой run докера + +```text +$ docker run -it -p 127.0.0.1:9090:8090 -d --name testnet -t testnet-17 +``` + +Собственно все понятно. -it включает интерактивность. “-p 127.0.0.1:9090:8090” включает переадресацию порта 8090 изнутри контейнера наружу, на порт 9090. Это дает возможность подключаться скриптами к тестнету используя URL вида ws://localhost:9090. Опция -d запускает контейнер отключенным от консоли в фоне. --name testnet задет простое имя контейнеру. -t testnet-17 задает имя образа, который будет использоваться для создания контейнера. + +Если все нормально, после запуска контейнера докер распечатает ID контейнера и вернет управление в консоль. + +Как я писал выше, в тестнете уже созданы пара тестовых пользователей. Самый важный cyberfounder. Естественно, чтобы можно было этим аккаунтом пользоваться, нужны ключи. Приватный и публичный. При запуске, golos распечатывает пару ключей в самом начале. Посмотреть их можно распечатав лог голоса. + +```text +$ docker logs testnet +``` + +![](https://imgp.golos.io/0x0/https://s18.postimg.org/uo28fw5bd/050.png) + +```text +initminer public key: GLS58g5rWYS3XFTuGDSxLVwiBiPLoAyCZgn6aB9Ueh8Hj5qwQA3r6 +initminer private key: 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS +chain id: 5876894a41e6361bde2e73278f07340f2eb8b41c2facd29099de9deef6cdb679 +blockchain version: 0.17.0 +``` + +## Конфигурационный файл + +Чтобы сеть заработала, нужен хотя бы один делегат, подписывающий блоки. Этим и будет заниматься аккаунт cyberfounder. Чтобы это заработало, нужно отредактировать конфигурационный файл. + +Сначала зайдем в образ + +```text +$ docker exec -it testnet bash +``` + +Конфигурационный файл config.ini лежит в папке /etc/golosd. + +```text +vi /etc/golosd/config.ini +``` + +Изменим следующие параметры + +```text +witness = "cyberfounder" +private-key = 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS +enable-stale-production = true +required-participation = 0 +``` + +После чего перезапускаем контейнер + +```text +$ docker stop testnet +$ docker start testnet +``` + +И видим, что сеть заработала и cyberfounder начал генерировать блоки + +```text +$ docker logs testnet +``` + +![](https://imgp.golos.io/0x0/https://s3.postimg.org/kirac52ub/051.png) + +Дождемся 17-го хардфорка, после чего можно пользоваться тестнетом + +```text +1551001ms th_a database.cpp:4890 apply_hardfork ] HARDFORK 17 at block 36 +1551002ms th_a witness.cpp:205 block_production_loo ] Generated block #36 with timestamp 2017-07-29T15:25:51 at time 2017-07-29T15:25:51 by cyberfounder +``` + +Запускаем cli\_wallet, задаем пароль, и импортируем приватный ключ cyberfounder аккаунта + +```text +$ docker exec -it testnet cli_wallet + +Please use the set_password method to initialize a new wallet before continuing +new >>> set_password 123 +set_password 123 +null +locked >>> unlock 123 +unlock 123 +null +unlocked >>> import_key 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS +import_key 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS +2152613ms th_a wallet.cpp:534 save_wallet_file ] saving wallet to file wallet.json +true +unlocked >>> +``` + +На аккаунте cyberfounder есть уже некая сумма голосов + +```text +unlocked >>> list_account_balances cyberfounder + +[ + "43306208.000 GOLOS" +] +``` + +Можно создать нового пользователя и перевести ему GOLOS + +```text +unlocked >>> create_account cyberfounder ropox "{}" true +unlocked >>> transfer cyberfounder ropox "200000.000 GOLOS" "для тестов" true +{ + "ref_block_num": 338, + "ref_block_prefix": 853465515, + "expiration": "2017-07-29T15:41:27", + "operations": [[ + "transfer",{ + "from": "cyberfounder", + "to": "ropox", + "amount": "200000.000 GOLOS", + "memo": "для тестов" + } + ] + ], + "extensions": [], + "signatures": [ + "20491f45c3f3f8d67f3a5c62f934c7c22312ddf392edde2f78a9962634a0ed7b4e4d2f6428282e0d0837893013c04e9e5e0057974c43a490b4abb4416091d5a18b" + ], + "transaction_id": "7d155661801e3b5a450d5c1f97378ee5a94a54b6", + "block_num": 339, + "transaction_num": 0 +} +``` + +Ну и вишенка на торт, создаем свой, персональный токен + +```text +unlocked >>> create_asset cyberfounder ROPOX 3 {"description": "Золото царя Гороха", "core_exchange_rate":{"base":"1.000 ROPOX","quote":"1.000 GOLOS"}} null true +``` + +```text +{ + "ref_block_num": 380, + "ref_block_prefix": 3346277100, + "expiration": "2017-07-29T15:43:33", + "operations": [[ + "asset_create",{ + "issuer": "cyberfounder", + "asset_name": "ROPOX", + "precision": 3, + "common_options": { + "max_supply": "1000000000000000", + "market_fee_percent": 0, + "max_market_fee": "1000000000000000", + "issuer_permissions": 79, + "flags": 0, + "core_exchange_rate": { + "base": "1.000 ROPOX", + "quote": "1.000 GOLOS" + }, + "whitelist_authorities": [], + "blacklist_authorities": [], + "whitelist_markets": [], + "blacklist_markets": [], + "description": "Золото царя Гороха", + "extensions": [] + }, + "is_prediction_market": false, + "extensions": [] + } + ] + ], + "extensions": [], + "signatures": [ + "20225a9ce260f8434f3e83cf8e48c4e16557f38e5540fa9a9a53126c685b70f16b3619a95b50c7f7a611e9c26261fd669c4ad8496cdc45d95ea9d3ef12c5cc5e33" + ] +} +``` + +Инстанциируем немного монет и переводим их тестовому пользователю + +```text +unlocked >>> issue_asset cyberfounder "1000.000 ROPOX" "Акции" true +unlocked >>> transfer cyberfounder ropox "20.000 ROPOX" "Подарок" true +unlocked >>> list_account_balances ropox +[ + "0.000 GBG", + "200000.000 GOLOS", + "20.000 ROPOX" +] +``` + +Удачных вам экспериментов! + +По материалам [статьи](https://golos.id/ru--golos/@ropox/zapusk-testnet-golos) + diff --git a/dobavlenie-polzovatelei-v-ignor-kak-eto-rabotaet.md b/dobavlenie-polzovatelei-v-ignor-kak-eto-rabotaet.md deleted file mode 100644 index 4a11bfab..00000000 --- a/dobavlenie-polzovatelei-v-ignor-kak-eto-rabotaet.md +++ /dev/null @@ -1,32 +0,0 @@ -На сайте [golos.io](https://golos.io) есть возможность добавить в игнор тех пользователей, с которыми вам неприятно общаться и посты которых вы не хотели бы видеть в ленте новостей. В этой небольшой статье подробно рассмотрим как это сделать и как эта фишка работает. Немного забегая вперёд, скажу, что полный игнор \(чтобы не видеть пользователя и его комментарии вообще\) на текущий момент \(конец марта 2018 года\) не работает. - -Добавить любого пользователя в игнор можно тремя разными способами, которые отличаются лишь местом на сайте: на главной страничке пользователя, в ответах к своим \(и чужим\) постам или комментам, в общих комментариях к любому посту. - -#### Добавление в игнор на главной страничке \(профиле\) пользователя. - -Если зайти на главную страничку \(профиль\) любого пользователя платформы golos.io, то в правом углу от его ника \(имени\) есть две довольно крупные кнопки: **Подписаться** и **Заблокировать**. Скриншот ниже: - -![](https://images.golos.io/DQmSvP9qVv9WTgpry243Avb5assF9hBHNPXPw72BQcsPN6v/1ign.png) - -Кнопка **Заблокировать** как раз и служит для добавление в игнор тех, с кем вам не хотелось бы общаться. Снятие игнора происходит абсолютно также: достаточно нажать на кнопку **Разблокировать** в профиле пользователя. - -#### Добавление в игнор в ответах к своим постам или комментам. - -Также, можно быстро добавить пользователя в игнор если зайти в ответы на свои \(и даже чужие\) посты или комментарии. Если кликнуть левой кнопкой мыши по нику пользователя или маленькой стрелочке справа от ника, то появится небольшое всплывающее окно. В этом окошке можно добавить пользователя в игнор даже не заходя на его личную страничку. Скриншот с примером: - -![](https://images.golos.io/DQmZNbjjcEvRpmNebsJU2Cq2EnwC7AUhDRxb1hDvX7o8yrr/2otv.png) - -#### Добавление в игнор в общих комментариях к посту. - -Этот способ ничем не отличается от предыдущего, разница лишь в том, что быстро добавить в игнор можно просматривая комменты пользователей к любому посту. Также нажимаем на ник пользователя или маленькую стрелочку справа от ника и в появившемся окошке жмём на кнопку **Заблокировать**. Скриншот с примером: - -![](https://images.golos.io/DQmaEBzvE7BcdLoQopZTvvvqZLfTYmUwCpoTysrq3nEUV4A/3comment.png) - -#### Как работает функция блокировки \(игнора\). - -А теперь поговорим о том, как реализована функция \(блокировки\) игнора на текущий момент \(конец марта 2018 года\). На самом деле, блокировка \(игнорирование\) даёт возможность **не видеть постов игнорируемого в ленте новостей** и комментариев игнорируемого **только в своих личных постах**. Во всех остальных блогах и постах вы всё равно будете видеть игнорируемого и его \(её\) комменты. И в тоже время, игнорируемый пользователь будет видеть все ваши посты и комменты, сможет отвечать на них и т.д. - -То есть, полный игнор назойливых пользователей и хейтеров, от которых вы хотели бы избавиться, на текущий момент просто невозможен. Вероятно, в будущем эта функция усовершенствуется, но пока функция игнора работает так, как описано чуть выше. - -Ещё один момент: если пользователь которого вы заблокировали был у вас в друзьях \(вы были подписаны на него\), то при блокировке у вас автоматически снимается подписка на него. - diff --git a/dokumenti.md b/dokumenti.md deleted file mode 100644 index 9de3cd84..00000000 --- a/dokumenti.md +++ /dev/null @@ -1,15 +0,0 @@ -# 📘 Документы - -> Тексты основополагающих документов - -* [Белая бумага Голоса](1-introduction/golos_whitepaper.md) -* [Белая бумага Голос•Фонда](1-introduction/belaya-bumaga-golosfonda.md) -* [Белая бумага по DPOS](4-documentation/belaya-bumaga-po-dpos.md) -* [White Paper Steem на Русском](1-introduction/steem_whitepaper.md) -* [Blue Paper Steem на русском](4-documentation/blue-paper-steem-na-russkom.md) -* [Дорожная карта](5-development/roadmap.md) - - - - - diff --git a/_images/golos_logo.png b/golos_logo.png similarity index 100% rename from _images/golos_logo.png rename to golos_logo.png diff --git a/golosd/HardFork/HF20_ReleaseNotice-rus.md b/golosd/HardFork/HF20_ReleaseNotice-rus.md deleted file mode 100644 index db43136e..00000000 --- a/golosd/HardFork/HF20_ReleaseNotice-rus.md +++ /dev/null @@ -1,24 +0,0 @@ -# GOLOS·CORE -# Очередная версия HardFork 0.20.0 - -***Golos·Core объявляет о выпуске очередной версии HardFork 0.20.0, в которой устранена ошибка в программном коде, вызвавшая останов функционирования блокчейна Голос в ночь на 18.01.2019 г.*** - -**Важное:** -***Несмотря на то, что версия HF 0.20.0 не требует переиндексации от всех предыдущих версий, рекомендуется выполнить процедуру replay узлов блокчейна с версии HF 0.19.0.*** - -В ночь на 18.01.2019 г. произошло падение системы блокчейна Голос. Командой Голос Кор при поддержке делегатов блокчейна в кратчайший срок удалось выявить и устранить причину возникновения сбоя в системе, а также воссстановить функционирование блокчейна. Ниже приводятся изменения, оперативно внесенные в программный код блокчейна версии HardFork 0.20.0. - -**** -## Внесено изменение в программный код вычисления процента отчислений делегатору при голосовании за пост (задача [№1074](https://github.com/GolosChain/golos/issues/1074)) - -Делегаторам, для которых операция вычисления процента выплаты от кураторских вознаграждений завершилась с ошибкой, выплата в полном объеме будет зачислена на баланс куратора. Данное решение было согласовано с пострадавшими кураторами и делегаторами. - -Делегаторы, для которых операция вычисления процента выплаты от кураторских вознаграждений завершилась успешно, получат вознаграждение в соответствии с вычисленным процентом - -## Внесен запрет на изменение процента выплаты от кураторских вознаграждений после начала голосования (задача [№1075](https://github.com/GolosChain/golos/issues/1075)) - -Автор поста может многократно изменять процент выплаты от кураторских вознаграждений. Автору поста будет отказано в изменении значения процента после того, как первый куратор проголосует за данный пост. - -**Команда Голос Кор выражает благодарность делегатам, принимавшим участие в поиске и анализе причины возникновения неполадки в системе Голос, а также тем, кто оперативно подключился к обновлению системы на узлах для быстрого восстановления работы блокчейна.** - -**** diff --git a/golosd/HardFork/New_HardFork-HF18.md b/golosd/HardFork/New_HardFork-HF18.md deleted file mode 100644 index fc4e50ac..00000000 --- a/golosd/HardFork/New_HardFork-HF18.md +++ /dev/null @@ -1,507 +0,0 @@ -## Новости GOLOS•CORE - -***Golos·Core подготовил к выпуску новую версию блокчейна HardFork (HF•18) с обновленным API*** - -## Общее -В версии HF•18 реализованы новые функциональные и технические возможности, предоставляющие пользователям более удобное взаимодействие с системой, повышенную защиту от злоупотребления голосованием, а также повышающие быстродействие системы за счет более оптимального перераспределения методов между плагинами API. Обновления поддержаны большинством голосов делегатов. - -**Рекомендация пользователям** -Новые функциональные и технические возможности вносят изменения в правила экономической модели блокчейна. Поскольку измененные правила в обновленном блокчейне отменяют действия старых правил, всем пользователям системы следует обновить кодовую базу на своих серверах блокчейн до новой версии HF•18. - -## На этой странице: -* [Новые функциональные возможности в HF•18](#перечень-новых-функциональных-возможностей-в-hf18) -* [Новые технические возможности в HF•18](#перечень-новых-технических-возможностей-в-hf18) -* [Измененные и новые плагины API в HF•18](#измененные-и-новые-плагины-в-hf18): - * [private_message](#изменения-в-плагине-privatemessage) - * [witness_api](#новый-плагин-witnessapi) - * [account_history](#изменения-в-плагине-accounthistory) - * [operation_history](#новый-плагин-operationhistory) - * [social_network](#изменения-в-плагине-socialnetwork) - * [tags](#новый-плагин-tags) - * [follow](#изменения-в-плагине-follow) - * [database_api](#изменения-в-плагине-databaseapi) - *** - -## Перечень новых функциональных возможностей в HF•18 -* Блокирование различного вида злоупотреблений делегированием Силы Голоса. -* Обеспечение более гибкой ценовой политики на бирже за счет удаления старых данных и использования актуальных в определении курса и соотношения крипто-валют. -* Возможность пользователям вносить изменения в профиль с использованием ключа posting. -* Возможность пользователям предлагать транзакцию на подписание, состоящей из нескольких операций. -* Возможность пользователям вносить изменения в посты и комментарии независимо от срока их публикации и придавать им актуальность. - -## Перечень новых технических возможностей в HF•18 -* Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными. -* Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования. -* Применение фильтрации тегов для настройки ленты в более удобной для пользователя форме. -* Возможность постраничного вывода личных сообщений на экран пользователя. - -## Измененные и новые плагины в HF•18 - -### Изменения в плагине private_message -В данный плагин добавлена возможность постраничного вывода списка личных сообщений. Изменены следующие методы (шрифтом bold выделены добавленные аргументы): - -* get_inbox(string to, time_point newest **, uint limit, uint offset**) -* get_outbox(string from, time_point newest **, uint limit, uint offset**) - -Метод `get_inbox` возвращает список входящих сообщений начиная с даты, заданной в newest. -Метод `get_outbox` возвращает список исходящих сообщений начиная с даты, заданной в newest. -`limit` — ограничивает количество сообщений (максимально допустимое значение — 100). -`offset` — номер сообщения, с которого выполняется операция (начиная с №). - - -### Новый плагин witness_api -Плагин `witness_api` образован перемещением части методов с часто используемыми полями из плагина `database_api`. В него вошли следующие методы: -* get_current_median_history_price -* get_feed_history -* get_miner_queue -* get_witness_schedule -* get_witnesses -* get_witness_by_account -* get_witnesses_by_vote -* get_witness_count -* lookup_witness_accounts -* get_active_witnesses // <- из выдаваемого результата удалены пустые строки - -Все методы перемещены `в witness_api` без изменений во входных параметрах и выдаваемых результатах. Исключение составляет метод `get_active_witnesses`, у которого из выдаваемого результата удалены пустые строки. - -### Изменения в плагине account_history -Плагин `account_history` дополнен следующим методом: -* get_account_history - -Метод перемещен из `database_api` без изменений во входных параметрах и выдаваемых результатах. - -### Новый плагин operation_history -Плагин `operation_history` образован перемещением методов из плагина `database_api`. Создание данного плагина позволяет отделить индексирование операций в блокчейне от истории пользователей. Пользователь может запрашивать и получать информацию об операциях в транзакциях (блоках) без ведения истории по аккаунтам. Это обеспечивает снижение нагрузки на сервер и на потребляемую память. - -Плагин `operation_history` дополнен следующими методами: -* get_ops_in_block -* get_transaction - -Методы перемещены из `database_api` без изменений во входных параметрах и выдаваемых результатах. - -### Изменения в плагине social_network -Часть методов из плагина `social_network` была перемещена во вновь созданный плагин `tags`. Перенос методов осуществлен для того, чтобы создание дополнительных индексов и поиск информации по ним проводились в отдельном плагине. В плагине `social_network` оставлены методы, обеспечивающие обращение к корневым элементам, а методы, обрабатывающие теги, перемещены в новый плагин `tags`. - -Введен опциональный параметр `vote_limit` для задания максимального количества проголосовавших в ответе пользователю. По умолчанию его значение принимается равным 10000. Например, количество комментариев к посту может достигать 1000 и более, что затрудняет их просмотр и поиск интересующей информации. Пользователь может с использованием тэга сформировать запрос на получение комментариев, выбранных (отсортированных) в соответствии с указанными в тэге признаками. Параметр `vote_limit` позволяет уменьшить размер отправляемого от сервера ответа. При этом в ответе добавляется дополнительное поле `active_votes_count`, информирующее об общем количестве проголосовавших (без необходимости получать полный список). - -Изменена результирующая структура: -```javascript -struct discussion { - "active_votes_count": uint, // <— Добавлено. Общее количество голосов для vote_limit - ... -} -``` -Изменения внесены в методы, возвращающие структуру `discussion` и массив `discussion`. В этот перечень вошли следующие методы: -* get_replies_by_last_update(string start_parent_author, string start_permlink, uint limit `[, uint vote_limit]`) -* get_content(string account, string permlink `[, uint vote_limit]`) -* get_content_replies(string author, string permlink `[, uint vote_limit]`) -* get_all_content_replies(string author, string permlink `[, uint vote_limit]`) -* get_content(string author, string permlink `[, uint32_t limit]`) -* get_active_votes(string account, string permlink `[, uint vote_limit]`) -* get_account_votes(string account `[, uint from, uint vote_limit]`) - -Фоном выделены параметры, которыми были дополнены методы. - -Следующие методы, дублирующие функции плагина `tag`, были удалены из плагина `social_network`: -* get_trending_categories -* get_active_categories -* get_recent_categories -* get_best_categories - -### Новый плагин tags -В плагин `tags` перемещены методы, выполняющие операции с тэгами (например, получение наиболее популярных тэгов; получение списка языков; получение тэгов, используемых автором). Это позволяет сэкономить размер файла разделяемой памяти тем пользователям, которые не используют данную функциональность. - -Методы, которые перемещены из `social_network` без изменений: -* get_trending_tags(string start, uint limit) -* get_languages() -* get_tags_used_by_author(string) -* get_discussions_by_payout(query) -* get_discussions_by_trending(query) -* get_discussions_by_created(query) -* get_discussions_by_active(query) -* get_discussions_by_cashout(query) -* get_discussions_by_votes(query) -* get_discussions_by_children(query) -* get_discussions_by_hot(query) -* get_discussions_by_feed(query) -* get_discussions_by_blog(query) -* get_discussions_by_comments(query) -* get_discussions_by_promoted(query) - - -В метод `get_discussions_by_author_before_date` добавлен новый параметр `vote_limit` (шрифтом bold выделен добавленный параметр): - -* get_discussions_by_author_before_date(string author, string start_permlink, datetime before_date, uint limit **[, uint vote_limit]**) -```javascript -struct discussion_query { - limit: uint, - select_tags: [string], - filter_tags: [string] - select_languages: [string], - filter_languages : [string], - truncate_body: uint, - vote_limit: uint, // <— Новый параметр, по умолчанию принимает значение 10000 - select_authors : [string], - start_author: string, - start_permlink: string, - parent_author: string, - parent_permlink: string -} -``` -Изменена результирующая структура метода: -```javascript -struct discussion { - “reputation”: uint, // <- Поле отсутствует, если выключен плагин follow - "active_votes_count": uint, // <- Добавлено. Общее количество голосов для vote_limit - ... -} -``` - -### Изменения в плагине follow -В плагине `follow` изменена структура метода `get_account_reputations` в соответствии со следующим представлением: - -* get_account_reputations(array accounts) - * Результат array - -### Изменения в плагине database_api -Плагин `database_api` дополнен новыми методами для выполнения новых операций. - -Новые методы: -* [get_proposed_transaction](#новый-метод-getproposedtransaction) -* [get_database_info](#новый-метод-getdatabaseinfo) -* [get_vesting_delegations](#новый-метод-getvestingdelegations) -* [get_expiring_vesting_delegations](#новый-метод-getexpiringvestingdelegations) - -Новые операции: -* [изменение или возврат делегирования Силы Голоса](#новая-операция-изменение-или-возврат-делегирования-силы-голоса) -* [создание аккаунта с делегированием Силы Голоса](#новая-операция-создание-аккаунта-с-делегированием-силы-голоса) -* [изменение json_metadata аккаунта](#новая-операция-изменение-jsonmetadata--аккаунта) -* [предложение на транзакцию](#новая-операция-предложение-на-транзакцию) -* [обновление предложенной транзакции](#новая-операция-обновление-предложенной-транзакции) -* [удаление предложенной транзакции](#новая-операция-удаление-предложенной-транзакции) -* [изменение параметров блокчейна](#новая-операция-изменение-параметров-блокчейна) - -#### Неизменяемая часть database_api -Часть методов из `database_api` перемещена в плагины `witness_api`, `account_history`, `operationt_history` и `follow`. Сохраненными в `database_api` без изменений остались следующие методы: -* get_block_header -* get_block -* set_block_applied_callback -* get_config -* get_dynamic_global_properties -* get_chain_properties -* get_hardfork_version -* get_next_scheduled_hardfork -* get_account_count -* get_owner_history -* get_recovery_request -* get_escrow -* get_withdraw_routes -* get_account_bandwidth -* get_savings_withdraw_from -* get_savings_withdraw_to -* get_conversion_requests -* get_transaction_hex -* get_required_signatures -* get_potential_signatures -* verify_authority -* verify_account_authority -* lookup_account_names -* lookup_accounts - - -### Изменения в методах database_api -Поля `average_bandwidth` и `average_market_bandwidth` были удалены из плагина `database_api` как неиспользуемые. Заменяемые их в выполнении операций поля `new_average_bandwidth`, `new_average_market_bandwidth` были переименованы в первоначальные их имена `average_bandwidth` и `average_market_bandwidth` соответственно. - - -Поле `lifetime_bandwidth` было удалено и заменено на вновь созданное одноименное поле `lifetime_bandwidth`, зависящее от новых значений, а также поле `lifetime_market_bandwidth` для использования в маркетинговых операциях. - - -Из описания типа `bandwidth_type`, используемого в вызове метода `get_account_bandwidth`, удалены поля `old_forum` и `old_market`. - - -В поле `lifetime_bandwidth` хранится суммарное значение `bandwidth`, используемое аккаунтом за все время его работы. В поле `average_bandwidth` хранится среднее значение `bandwidth`, по которому определяется порог чрезмерной активности аккаунта. - -#### Внесены изменения в выдаваемый результат следующего метода: -* get_accounts -```javascript -struct account { - reputation, // <- Поле отсутствует, если выключен плагин follow - transfer_history, // <- Удалено - market_history, // <- Удалено - post_history, // <- Удалено - vote_history, // <- Удалено - other_history, // <- Удалено - tags_usage, // <- Удалено - guest_bloggers, // <- Удалено - blog_category, // <- Удалено - ... -} -``` -Удаление полей из структуры account обусловлено тем, что ранее эти поля никогда не использовались. - - -#### Новый метод get_proposed_transaction -Этот метод обрабатывает запрос на выдачу списка предложенных для подписания транзакций, поступивший от какого-либо аккаунта. Метод возвращает массив транзакций, в который входят транзакции, созданные непосредственно данным аккаунтом, а также транзакции, которые ему необходимо подписать. -* get_proposed_transaction(account: string) -```javascript -struct proposal_object { - author: string, - title: string, - memo: string, - expiration_time: datetime, - review_period_time: datetime, // может отсутствовать - proposed_operations: [ operation ], - required_active_approvals: [ string ], - available_active_approvals: [ string ], - required_owner_approvals: [ string ], - available_owner_approvals: [ string ], - required_posting_approvals: [ string ], - available_posting_approvals: [ string ], - available_key_approvals: [ string ] -}; -``` - - -#### Новый метод get_database_info -Этот метод возвращает информацию о текущем статусе разделяемой памяти, в том числе: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти (название индекса, количество записей). -* get_database_info() -``` -struct database_info { - total_size: uint, - free_size: uint, - reserved_size: uint, - used_size: uint - - index_list: [ - { - name: string, - record_count: uint - }, - ] -}; -``` - - -#### Новый метод get_vesting_delegations -Этот метод возвращает массив значений с описанием операции делегирования (далее — блок делегирования) аккаунта (делегированный другим аккаунтам или же полученный от других аккаунтов). -* get_vesting_delegations -``` -get_vesting_delegations( - string account, - string from, uint32_t limit = 100, - delegations type = delegated -) -``` -`account` — аккаунт, по запросу от которого выдается блок делегирования. Отправитель*/получатель определяется аргументом `type`. -`from` — начальный аккаунт, парный в операции делегирования. Получатель/отправитель - задается аргументом `type` (для пагинации). -`limit` — количество возвращаемых элементов (для пагинации). По умолчанию принимается равным 100. Максимальное значение равно 1000. -`type` — тип запрашиваемого блока делегирования: "delegated" (делегированный), "received" (полученный). По умолчанию принимает значение "delegated". - -Пример возвращаемого блока делегирования: `массив vesting_delegation_api_object [{id: 0, delegator: "zzz", delegatee: "zxcat", vesting_shares: "90.000000 GESTS", min_delegation_time: "2018-04-25T21:48:15"}]`. - - -#### Новый метод get_expiring_vesting_delegations -Этот метод используется для получения списка возвращаемых (отозванных и «замороженных») делегированных средств аккаунта. Метод возвращает результат в виде массива значений с описанием операции возврата делегированных средств (далее — блок отозванного делегирования) - -* get_expiring_vesting_delegations -``` -get_expiring_vesting_delegations( - string account, - time_point_sec from, - uint32_t limit = 100) -``` -`account` — аккаунт, возвращающий делегированные средства. -`from` — начальное время возврата делегированных средств (для пагинации). -`limit` — количество возвращаемых элементов (для пагинации). По умолчанию принимается равным 100. Максимальное значение равно 1000. - -Пример возвращаемого модулем блока отозванного делегирования: -`массив vesting_delegation_expiration_api_object, [{id: 0, delegator: "zxcat", vesting_shares: "123.000000 GESTS", expiration: "2018-05-25T11:18:45"}]`. - - -#### Новая операция: изменение или возврат делегирования Силы Голоса -Эта операция позволяет изменять количество делегированного, а также осуществлять возврат делегированного в полном объеме. Для выполнения этих операций необходима подпись ключом `active`. Операции выполняются с использованием следующей процедуры: -```javascript -delegate_vesting_shares -{ - delegator: string, // делегирующий аккаунт - delegatee: string, // аккаунт-получатель - vesting_shares: asset // новое количество делегируемой Силы Голоса -} -``` -Для выполнения этой опирации требуется подпись ключом `active`. - -Для изменения количества делегирования Силы Голоса в поле `vesting_shares` следует задать новое значение. Для полного возврата делегированной части Силы Голоса в поле `vesting_shares` следует задать значение вида “0.000000 GESTS”. При изменении значения в сторону уменьшения делегированная Сила Голоса сразу снимется с аккаунта-получателя и переходит в «замороженное» состояние сроком на семь дней (в случае создания аккаунта с делегированием этот период определяется параметром `create_account_delegation_time`). - -Минимальное количество Силы Голоса, необходимое для делегирования, определяется по результатам голосования делегатов. - - - -#### Новая операция: создание аккаунта с делегированием Силы Голоса -Операция выполняется с использованием следующей процедуры: -```javascript -account_create_with_delegation -{ - fee: asset, // комиссия, в GOLOS - delegation: asset, // делегируемая доля, в GESTS - creator: string, - new_account_name: string, - owner: authority, - active: authority, - posting, authority, - memo_key: string, - json_metadata: string, - extensions: extensions_type // Не используется, исходное значение — пусто -} -``` -Для выполнения этой опирации требуется подпись ключом `active`. - - -Для создания аккаунта с делегированием необходимо, чтобы выполнялись следующие два условия: -``` - 1. fee ≥ create_account_min_golos_fee - 2. (delegation) ≥ (create_account_min_delegation) -``` -где -`fee` — размер комиссионных отчислений; -`create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием; -`delegation` — делегированная часть Силы Голоса; -`create_account_min_delegation` — минимальное количество Силы Голоса, необходимое для создания аккаунта с делегированием. - - -При создании аккаунта с делегированием бо́льшую часть комиссии можно оплатить с «заморозкой» на период, определяемый параметром `create_account_delegation_time`. Делегированная Сила Голоса может быть отозвана в любой момент (например, в случае злоупотребления полученной делегированной частью новым аккаунтом). При этом делегированная Сила Голоса будет снята с нового аккаунта сразу, а на делегирующий аккаунт будет возвращена по истечении срока «заморозки». Время «заморозки» является параметром, определяемым по результатам голосования. Его значение выбирается по медиане из списка всех значений, полученных от делегатов с помощью операции `chain_properties_update_operation`. - - -#### Новая операция: изменение json_metadata аккаунта -Пользователю предоставляется возможность изменять метаданные своего профиля без использования ключа `active`. Поля профиля хранятся в `json_metadata`. Для изменения любого поля профиля требовалась подпись только ключом `active`, что не всегда было приемлемым. - -Было принято решение разделить поля на две группы. В состав первой группы вошли поля с наиболее значимыми данными профиля (ключи: `posting`, `active`, `owner` и `memo`), а в другую — с менее значимыми, но часто используемыми (аватар, пол, местонахождение и пр.). Процедура изменения полей первой группы сохранена и требует подписи только ключом `active`. В версии HF•18 вносить изменения в поля второй группы стало возможным с использованием ключа `posting` для подписи. - -Операция выполняется с использованием следующей процедуры: -```javascript -account_metadata -{ - account: string, // изменяемый аккаунт - json_metadata: string // новое значение json_metadata -} -``` -Для выполнения этой опирации требуется подпись ключом `posting`. - - -#### Новая операция: предложение на транзакцию -Пользователю предоставляется возможность предлагать транзакцию на блокчейне с несколькими отдельными операциями, требующих одобрения от пользователей на их выполнение. - -Операция выполняется с использованием следующей процедуры: -```javascript -proposal_create_operation -{ - author: string, // автор предлагаемой транзакции - title: string, // заголовок предложенной транзакции. - memo: string, // примечание - proposed_operations: [ operation ], // список операций в предлагаемой транзакции - expiration_time: datetime, // максимальное время, отведенное на транзакцию - review_period_time: datetime, // время на принятие решения участников транзакции. Опциональный параметр - extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто -} -``` -Для выполнения этой опирации требуется подпись ключом `active`. - - -Создаваемая транзакция должна быть уникальной по сочетанию полей author-title. По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления. - -В поле `proposed_operations` задается список операций для выполнения их в транзакции (например, `{["delete_comment_operation":{"autor":"jim", "permlink":"hello"}}]`). На каждую операцию из этого списка должна быть получена подпись автора, которому она предназначена. Право проставления подписи на выполнение любой операции из списка имеет также каждый из участников транзакции. Например, операция публикации поста назначается одному автору, а операция перечисления вознаграждения за нее — другому. В случае несогласия другого автора с выполнением второй операции он может удалить подпись на выполнение первой операции предложенной транзакции. - -В поле `review_period_time` проставляется время, отводимое на принятие решений участников транзакции. Этот период должен быть меньше максимального времени из поля `expiration_time`, которое отводится на транзакцию. По истечении этого периода подписи в транзакции могут быть только удаляться. - -Если параметр `review_period_time` не задан, то транзакция будет сразу выполняться после сбора всех необходимых подписей. - - -#### Новая операция: обновление предложенной транзакции -Автору, а также участникам транзакции, предоставляется возможность менять свое решение и обновлять подписи до истечения времени, отводимого на транзакцию. - -Если транзакция не получает одобрения на выполнение какой-либо из операций, эта транзакция не отменяется и ее актуальность будет сохраняться до отведенного на ее выполнение времени. После получения всех необходимых подписей транзакция сразу будет выполняться и все последующие обновления будут считаться недействительными. - -Операция выполняется с использованием следующей процедуры: -```javascript -proposal_update_operation -{ - author: string, // автор предложенной транзакции - title: string, // заголовок предложенной транзакции. - active_approvals_to_add: [string], // список аккаунтов для подписи. Транзакция должна быть - // подписана ключом active - active_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной - // транзакции. Транзакция должна быть подписана ключом active - owner_approvals_to_add: [string], // список аккаунтов для подписи на операции в предложенной - // транзакции. Транзакция должна быть подписана ключом owner - owner_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной - //транзакции. Транзакция должна быть подписана ключом owner - posting_approvals_to_add: [string], // список аккаунтов для подписи на операции в предложенной - // транзакции. Транзакция должна быть подписана ключом posting - posting_approvals_to_remove: [string], // список аккаунтов для удаления подписи из предложенной - // транзакцию. Транзакция должна быть подписана ключом posting - key_approvals_to_add: [string], // список ключей public для проставления подписей в предложенной - // транзакции - key_approvals_to_remove: [string], // список ключей public для удаления подписей из предложенной - // транзакции - extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто -} -``` -Подпись зависит от списка операций, предлагаемых на подписание. - - -По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления. -Поля, в которые записывается псевдоним для подписи транзакции, выбираются в зависимости от типа операций в предложенной транзакции. - - -#### Новая операция: удаление предложенной транзакции -В случае отказа кого-либо из участников транзакции в выполнении операции он может сформировать запрос на удаление предложенной транзакции. Идентификация транзакции осуществляется по паре author-title. - -Операция выполняется с использованием следующей процедуры: -```javascript -proposal_delete_operation -{ - author: string, // автор предложенной транзакции - title: string, // заголовок предложенной транзакции - requester: string, // псевдоним запросившего удаление транзакции или автор предложенной транзакции - extensions: extensions_type // расширение, по аналогии с другими операциями. Исходное значение — пусто -} -``` -Для выполнения этой опирации требуется подпись ключом `active`. - -Удалить предложенную транзакцию может как ее автор, так и любой участник, от которого требуется подпись. Если хотя бы один из участников запрашивает удаление транзакции, то, независимо от подписей остальных участников, данная транзакция будет удалена. - - -#### Новая операция: изменение параметров блокчейна -Предыдущие версии блокчейна обеспечивают поддержку операции `witness_update`, которая позволяет делегатам Голоса изменять по результатам голосования значения следующих параметров: -* `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; -* `maximum_block_size` — максимальный размер блока блокчейна; -* `sbd_interest_rate` — процент, начисляемый на SBD. - -Ввиду того, что `witness_update` не позволяет расширить перечень параметров, значения которых определяются голосованием, в версии HF•18 реализована новая операция `chain_properties_update`, которая поддерживает более расширенный перечень таких параметров и позволяет наращивать его в будущем. В версии HF•18 операция `chain_properties_update` поддерживает следующий перечень параметров, значения которых определяются голосованием: -* `account_creation_fee` — размер комиссионных отчислений, требуемых на создание аккаунта без делегирования; -* `maximum_block_size` — максимальный размер блока блокчейна; -* `sbd_interest_rate` — процент, начисляемый на SBD; -* `create_account_min_golos_fee` — минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием (по умолчанию принимает значение "1.000 GOLOS", см. операцию [account_create_with_delegation](#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)); -* `create_account_min_delegation` — устанавливает минимально возможное количество Силы Голоса при создании аккаунта с делегированием (по умолчанию принимает значение "5.000 GOLOS", см. операцию [account_create_with_delegation](#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)); -* `create_account_delegation_time` — устанавливает минимально возможное время (в секундах) «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием (по умолчанию принимает значение за период в 30 дней, см. операцию [account_create_with_delegation](#новая-операция-создание-аккаунта-с-делегированием-силы-голоса)); -* `min_delegation` — устанавливает минимально возможное количество Силы Голоса для делегирования на аккаунт (по умолчанию принимает значение "10.000 GOLOS", см. операцию [delegate_vesting_shares](#новая-операция-изменение-или-возврат-делегирования-силы-голоса)). - -Операция выполняется с использованием следующей процедуры: -```javascript -chain_properties_update_operation -{ - owner: string, // автор изменения - props: { - account_creation_fee: asset, - maximum_block_size: uint, - sbd_interest_rate: uint, - create_account_min_golos_fee: uint, - create_account_min_delegation: uint, - create_account_delegation_time: uint, - min_delegation: uint - } -} -``` -Для выполнения этой опирации требуется подпись ключом `active`. - -*** - diff --git a/golosd/HardFork/RC2-HF18.md b/golosd/HardFork/RC2-HF18.md deleted file mode 100644 index 47a63af4..00000000 --- a/golosd/HardFork/RC2-HF18.md +++ /dev/null @@ -1,54 +0,0 @@ -# GOLOS·CORE - -> В процессе эксплуатации релиз-кандидата HardFork HF·18 были выявлены и устранены недостатки и ошибки в программном коде продукта. - -> **На этой странице:** -> Выявленные и устраненные недостатки и ошибки в работе релиз-кандидата HardFork HF•18 - - - -*** - -### Устраненная ошибка в логике обновления тегов -После снятия ограничений на редактирование постов и комментариев появилась возможность манипулирования популярностью тегов. Недостаток проявлялся в том, что теги тех постов, по которым уже были завершены выплаты, можно было далее продвигать по популярности. - -Устранение ошибки в логике работы программы в части обновления тегов обеспечило устранение данного недостатка. - -### Устраненная ошибка в выдаваемом результате метода get_discussions_by_promoted -Метод `get_discussions_by_promoted` выдавал результат с пустым полем, в котором должен был список спонсируемых постов. - -Устранение ошибки в проверке условия включения поста в список спонсируемых обеспечило выдачу правильного результата метода `get_discussions_by_promoted`. - -### Устраненный недостаток в операции делегирования, причиной которого являлся устаревший метод old_update_account_bandwidth -В операции делегирования часть функций выполнял метод `old_update_account_bandwidth`. Недостаток в работе этого метода заключался в том, что он не учитывал делегированную Силу Голоса и во многом дублировал логику работы метода `update_account_bandwith`, создавая при этом дополнительную нагрузку на серверы. В отличие от `update_account_bandwith`, который проверяет значение `bandwidth` пользователя только во время подписания транзакции, метод `old_update_account_bandwidth` выполнял такую проверку для каждой транзакции уже подписанных блоков. - -Для устранения этого недостатка был удален устаревший метод `old_update_account_bandwidth` и внесены изменения в методы, возвращающие поле `account`. В их результатах поля вида `new_XXX_bandwidth` преобразованы в поля вида `XXX_bandwidth`. Также их результаты дополнены полем `lifetime_market_bandwidth`. Кроме этого `метод get_account_bandwidth` прекратил возвращать результат, если параметр `bandwidthType` принимает одно из двух значений — “old_market” или “old_forum”. - -### Устраненная причина замедления в работе системы, вызванная загруженностью серверов -Отсутствие ограничения на количество вложенных proposal транзакций позволяло создавать усложненную их структуру, содержащую избыточное количество вложений. Это вызывало избыточную нагрузку на работу серверов, блокированию их доступа и, следовательно, к замедлению работы системы. - -Для устранения этого недостатка добавлено ограничение на количество вложенностей в транзакциях, которое должно быть не более двух. - -### Добавленный в cli_wallet метод update_chain_properties -Для упрощения процесса голосования в `cli_wallet` добавлен метод `update_chain_properties`, избавивший делегатов от необходимости менять ключ подписи блоков при выставлении параметров, определяемых голосованием. - -### Ограничение в использовании метода witness_update_operation -В версии HF·18 обновление параметров, определяемых голосованием, выполняется методом `chain_properties_update_operation`. Метод `witness_update_operation` в версии HF·18 прекращает выполнять данную операцию и будет использоваться только для изменения URL и ключей делегатов. - -Ограничение вызвано тем, что метод `chain_properties_update_operation` не позволяет в перспективе расширять список определяемых голосованием параметров. - -### Измененное значение мультипликатора, задаваемое по умолчанию -Значение по умолчанию для мультипликатора `GOLOS_CREATE_ACCOUNT_WITH_GOLOS_MODIFIER` уменьшено с 30 до 1. Это значение может также устанавливаться голосованием через `chain_properties_update_operation`. В случае отсутствия голосования его значение принимается за единицу. - -Это изменение введено для того, чтобы избежать скачкообразного изменения стоимости создания аккаунта с выпуском версии HF·18. - -**Примечание:** -Решением делегатов эта правка была отменена. Вместо мультипликаторов используются абсолютные значения параметров, определяемые в ходе голосования делегатов. - - -### Добавленный экспериментальный модуль Mongo -В основную ветвь разработки добавлен экспериментальный модуль `Mongo` с целью ускорения его разработки. На настоящем этапе разработки модуль не обеспечивает загрузку всех данных из блокчейна в `Mongo`. - -*** - - diff --git a/golosd/SoftFork/SF-0.18.4-Release_Notice.md b/golosd/SoftFork/SF-0.18.4-Release_Notice.md deleted file mode 100644 index 4c201212..00000000 --- a/golosd/SoftFork/SF-0.18.4-Release_Notice.md +++ /dev/null @@ -1,1060 +0,0 @@ -# GOLOS·CORE -# The new version SoftFork 0.18.4 - -***Golos•Core has announced the new SoftFork version 0.18.4 has been released. -This page provides a detailed outline of some fixes and improvements in this version. These updates are approved by a majority of witnesses.*** - - -**Reindexing:** -***SF 0.18.4 requires reindexing from all previous versions.*** - - -### In this article - -**** - -## Additional information in the notifications about signed blocks -In previous versions of SoftFork, a user could subscribe to receive up-to-date information as a notification about new signed blocks appeared in blockchain. The information in the notification was not complete enough and contained nothing about virtual operations in this block. The new SF-0.18.4 version provides a user with the ability to receive notifications about events (virtual operations) related to created block. - -### Getting information from notifications about virtual operations in signed blocks - -In previous SoftFork versions, a user could subscribe to receive up-to-date information in the form of notifications about new signed blocks appeared in the blockchain. It was done by calling the `set_block_applied_callback()` method. The fact is that the method returned data only about new signed operations in the block without any information about virtual operations of this block. - -In version SF-0.18.4, a configurable parameter `type` is added to the `set_block_applied_callback()` method, which can take four values. Depending on a set value of this parameter, the user can receive the following information about a block: - * signed block; - * block header; - * virtual operations only; - * both a signed block and virtual operations. - -This impovement allows the user to receive not only full information about a signed block, but also a separate content at its discretion including the virtual operations. - - -The following table shows correspondence between a set parameter value and a type of information received. - -Parameter value | Alternative parameter value | Notification data type -:----------------------- |:--------------------------- |:------------------ -«block» | 0 | A signed block (the `signed_block` field) -«header» | 1 | a block header (the `block_header` field) -«virtual_ops» | 2 | Only virtual operations (the `virtual_operations` field) -«full» | 3 | Both a signed block and virtual operations (the `signed_block` field extended with `virtual_operations`) - -Any other specified value will be treated by the `set_block_applied_callback()` method as a «block». - -The `set_block_applied_callback()` method has been fixed while maintaining backwards compatibility with previous SF versions. This method has a parameter that was not previously used. Its field previously always contained a value of 0. In the new version, this field is assigned to the returned result type. If the field is set to 0, the returned result will match the result of previous versions. Adding three new values to this parameter extends the API capability. - - -This method has the following form: -```cpp -void set_block_applied_callback( - block_applied_callback_result_type type -) -``` -Parameter: -`type` — a returned result type. - -### Getting notification about transactions on the node that are not in a block -A new operation has been implemented in the new version, this is a notification of a user about the blocks. This operation was developed earlier, but was blocked and never used. - -If a transaction was on a node, but was not approved for execution (not placed in a block), the user could not get information about that transaction by simple calling the `set_block_applied_callback()` method. This problem existed in previous versions and it is no longer in the new version. - -The new operation will send a message to the user about each incoming transaction before it will be apllied. To subscribe to this type of notification, the user has to call the API method `set_pending_transaction_callback()`. The method has no parameters. - -### Getting information about rewarding a person who signed a block -A new virtual (not explicitly specified) operation `producer_reward_operation()` has been implemented in the new version. The virtual operation can be emitted on each of the blocks. It notifies a user about rewarding (in GESTS) a person who signed a block. This is a producer of the block, which may be one of the following persons: - * a witness included in the approved list of witnesses; - * a witness, randomly chosen; - * a miner. - -The virtual operation looks as follows: -```cpp -struct producer_reward_operation { - account_name_type producer; - asset vesting_shares -}; -``` -Parameters: -`producer` — a person who signed a block; -`vesting_shares` — amount of reward (in GESTS). - -The virtual operation is stored in a block history and can be requested by the API method `get_ops_in_block()` to get the information about a block producer reward. This method has the following form: -```cpp -std::vector get_ops_in_block( - uint32_t block_num, - bool only_virtual -) -``` -Parameters: -`block_num` — a block identifier whose virtual operations are requested; -`only_virtual` — «true», if only virtual operations are requested. - -## Improved error diagnosis -In previous versions, diagnostic information about errors which occurred in the blockchain, was issued in the form of an uninformative text message. The text of the message contained only general information and it was difficult for a user to identify the cause of the error. - -To solve this problem the solution has been implemented in the new SF version that provides a user with much more diagnostic information about an error including a description of the level of the hierarchical structure of the block that is causing the error. The solution is based on breaking all the errors into categories and generating diagnostic information for each category. The information includes a description of the hierarchical structure level of the block that causes the error. - -All errors were analyzed directly in the places of their formation and then classified according to informative signs. As a result of the analysis, three classes of errors were identified: -1. user errors in setting parameters; -2. user errors when executing business logic operations (for example, exceeding a bandwidth); -3. program text errors (internal blockchain errors that are not user-specific). - -Each of these error classes was divided into error subclasses and then into error categories for each subclass. The following error categories were created: -1. unsupported operation by the blockchain; -2. error of arguments number passed to a plugin; -3. parameter value error (syntax checking of a specified parameter value, including: the presence of invalid characters in account names, a correctness of asset units writing, exceeding the maximum number of characters in a comment); -4. excess of the limit for the operation result issuance; -5. JSON-API request structure error (for example, an empty field, a request to a non-existent method); -6. transaction structure violation; -7. an absence of specified object (for example, an absence of an account with a specified name or transaction with a specified identifier); -8. lack of a required HardFork version; -9. business logic error, including: -— lack of sufficient assets for an operation; -— exceeding a bandwidth (for example, exceeding a number of posts or votes per a certain period); -10. server error (for example, lack of access to a server); -11. attempt to perform an operation on a blocked wallet; -12. program code error, including: -— error, which occurs in the using libraries; -— code error (for example, invalid use of a function within a code). - -Diagnostic information has been generated for each of the error categories and added to the message catalog. Specific errors are separated within each of the category by additional signs. Besides, improved diagnostic information return system about an error that occurred when processing a request in the JSON format. -Except for category errors under 12 number, all other errors are user-defined and can be analyzed directly by the user. - -This update provides a user with the most complete diagnostic information about an error. - -## New private message operations -Version SF-0.18.4 has a new plugin 'private_message_operations' that extends a user's ability to communicate with other users, as well as to process personal messages. -The new plugin added the following functionality to a user: - * messaging with other users without using tokens; - * getting a subscription to (virtual) operations related to the operation of the plugin; - * getting a list of users who are in communication; - * creating and setting up an account contact list; - * ability to obtain a history of messaging by a given user name; - * ability to obtain a history of messaging by a given certain signs (for example, by date or by number of messages); - * pagination of messages received during communication; - * editing a sent message; - * ability to delete a sent message (and mark it as deleted message). - -### Private message operations - -#### Sending and editing private messages - -The following method is used to send or edit user private messages: -```cpp -struct private_message_operation { - account_name_type from; - account_name_type to; - uint64_t nonce; - public_key_type from_memo_key; - public_key_type to_memo_key; - uint32_t checksum; - bool update; - vector encrypted_message -}; -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — arbitrary integer value, unique value of the key part (recommended value is a current time in milliseconds); -`from_memo_key` — public memo key of a sender account used to encrypt a message; -`to_memo_key` — public memo key of a receiver account used to encrypt a message; -`checksum` — a checksum is the encryption key result; -`update` — "true" if the message is edited (fields `from`, `to`, `nonce`); "false" if the message is created; -`encrypted_message` — result message. - -To edit private message a user has to specify a unique key (with the values `from`, `to` and `nonce`). To specify this key the user may follow the algorithm for obtaining the `memo` key for operations with funds transfers. - -Inside the encrypted messages there is the structure in JSON format that can be extended (modified). The structure has the following form: -```cpp -struct message { - string subject; - string body -}; -``` -#### Deleting a private message -This operation deletes user private messages from the personal mailboxes of the accounts that are either a sender or a recipient of the messages being deleted. The operation must include an account name that is requesting this operation. This operation is performed by calling the following method: -```cpp -struct private_delete_message_operation { - account_name_type requester; - account_name_type from; - account_name_type to; - uint64_t nonce; - time_point_sec start_date; - time_point_sec stop_date -}; -``` -Parameters: -`requester` — account name that requested the delete operation; -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`start_date` — timestamp from which messages should be deleted; -`stop_date` — timestamp at which messages should be deleted. - -To delete a user private message the user has to specify a unique key (with the values `from`, `to` and `nonce`). To delete a series of messages, the user has also to specify the `start_date-stop_date`message range. - -#### Marking private messages as read -A message (or series of messages) can be marked with a "read" label. This operation is similar to the delete message operation and is called by the following method: -```cpp -struct private_mark_message_operation { - account_name_type from; - account_name_type to; - uint64_t nonce; - time_point_sec start_date; - time_point_sec stop_date -}; -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`start_date` — timestamp from which messages should be marked as read; -`stop_date` — timestamp at which messages should be marked as read. - -To mark a user private message the user has to specify a unique key (with the values `from`, `to` and `nonce`). To mark a series of messages, the user has also to specify the `start_date-stop_date`message range. - -#### Creating and setting up an account contact list -A contact list for monitoring incoming and outgoing messages has been added to the system for processing private messages. The contact list for a user is created immediately after the first message sending (or receiving) with any of accounts. After each sending or receiving message this contact list is updated with new account who have been sharing this message. - -The user himself can add a new account to the contact list who was not yet in communication. The method that creates a new contact is as follows: -```cpp -struct private_contact_operation { - account_name_type owner; - account_name_type contact; - private_contact_type type; - string json_metadata -}; -``` -Parameters: -`owner` — account name that owns the contact list; -`contact` — account name to add to the contact list; -`type` — type of contact (`pinned` is to add a contact name); -`json_metadata` — data in JSON format about the account added to the contact list. - -Allowed contact types: -```cpp -enum private_contact_type { - unknown = 1, // unknown account name - pinned = 2, // the contact that the user adds to the contact list personally - ignored = 3 // ignored account name -}; -``` -To remove a contact from the contact list, the user has to specify the `unknown` type in this method. All messages related to this account will be deleted. -To add an account to the contact list, the user has to specify the type `pinned`. -To stop receiving messages from a contact that exists in the contact list, the user has to specify the type of `ignored`. -To stop receiving messages from all accounts except those in the contact list, the user has to set up the contact list. - -For setting up a contact list the following method is used: -```cpp -struct private_settings_operation { - account_name_type owner; - bool ignore_messages_from_unknown_contact -}; -``` -Parameters: -`owner` — account name that owns the contact list; -`ignore_messages_from_unknown_contact` — "true" to stop receiving messages from unknown contact. - -### Private message operations supported by the client application cli_wallet -#### Sending private messages -The following method is used in `cli_wallet` to send private messages: -```cpp -send_private_message( - string from, - string to, - message_body message, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`message` — message in form ({"subject":"", "body":""}); -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Editing private messages -The following method is used in `cli_wallet` to send private messages: -```cpp -edit_private_message( - string from, - string to, - uint64_t nonce, - message_body message, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`message` — message in form ({"subject":"", "body":""}); -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Getting a list of incoming messages -The following method is used in `cli_wallet` to get a list of incoming messages: -```cpp -get_private_inbox( - string to, - message_box_query query -); -``` -Parameters: -`to` — account name who receives a message; -`query` — search option. - -#### Getting a list of outgoing messages -The following method is used in `cli_wallet` to get a list of outgoing messages: -```cpp -get_private_outbox( - string from, - message_box_query query -); -``` -Parameters: -`from` — account name who sends a message; -`query` — search option. - -#### Receiving a list from a message pipe -The following method is used in `cli_wallet` to receive a list from a message pipe: -```cpp -get_private_thread( - string from, - string to, - message_thread_query query -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`query` — search option. - -#### Setting up private messages -The following method is used in `cli_wallet` to set up private messages: -```cpp -set_private_settings( - string owner, - settings_api_object settings, - bool broadcast -); -``` -Parameters: -`owner` — account name that owns the contact list; -`settings` — settings; -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Obtaining private message settings -The following method is used in `cli_wallet` to obtaine private message settings: -```cpp -get_private_settings(string owner) -``` -Parameter: -`owner` — account name that owns the contact list. - -#### Add or edit a contact in the private message contact list -The following method is used in `cli_wallet` to add or edit a contact in the contact list: -```cpp -add_private_contact( - string owner, - string contact, - private_contact_type type, - string json_metadata, - bool broadcast -) -``` -Parameters: -`owner` — account name that owns the contact list; -`contact` — account name whose contact is added or edited in the contact list; -`type` — type of contact (`unknown`, `pinned`, `ignored`); -`json_metadata` — data in JSON format about the account existed in the contact list; -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Obtaining a list of accounts existed in private message contact list -The following method is used in `cli_wallet` to obtaine a list of contacts: -```cpp -get_private_contacts( - string owner, - private_contact_type type, - int limit, - int offset -); -``` -Parameters: -`owner` — account name that owns the contact list; -`type` — type of contact by which the list is formed; -`limit` — maximum number of contacts in the formed list; -`offset` — offset from the start of contacts in the contact list. - -#### Obtaining information about a particular contact -The following method is used in `cli_wallet` to obtaine information about a particular contact: -```cpp -get_private_contact( - string owner, - string contact -); -``` -Parameters: -`owner` — account name that owns the contact list; -`contact` — contact account name. - -#### Deleting a private message from the inbox list -The following method is used in `cli_wallet` to delete a private message from the inbox: -```cpp -delete_inbox_private_message( - string from, - string to, - uint64_t nonce, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Deleting a series of private message from the inbox list -The following method is used in `cli_wallet` to delete a series of private message from the inbox list: - -```cpp -delete_inbox_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`start_date` — timestamp from which incoming messages should be deleted; -`stop_date` — timestamp at which incoming messages should be deleted; -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Deleting a private message from the sent list -The following method is used in `cli_wallet` to delete a private message from the sent list: -```cpp -delete_inbox_private_message( - string from, - string to, - uint64_t nonce, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Deleting a series of private messages from the sent list -The following method is used in `cli_wallet` to delete a series of private messages from the sent list: - -```cpp -delete_outbox_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`start_date` — timestamp from which outgoing messages should be deleted; -`stop_date` — timestamp at which outgoing messages should be deleted; -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Marking private messages as read -The operation is similar to the delete private message operation and is called by the following method: -```cpp -mark_private_message( - string from, - string to, - const uint64_t nonce, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a unique value part of the key (thereof fields `from`, `to`, `nonce`); -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -#### Marking a series of private messages as read -The operation is similar to the delete a series of private message operation and is called by the following method: -```cpp -mark_private_messages( - string from, - string to, - time_point_sec start_date, - time_point_sec stop_date, - bool broadcast -); -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`start_date` — timestamp from which messages should be marked as read; -`stop_date` — timestamp at which messages should be marked as read; -`broadcast` — "true" if the operation is forwarded to a daemon; "false" if the transaction is displayed. - -### User private messages API -#### Getting a list of private messages -When performing the operation of receiving the list of messages, a user receives a structure of the following form: -```cpp -struct message_api_object { - account_name_type from; - account_name_type to; - uint64_t nonce; - public_key_type from_memo_key; - public_key_type to_memo_key; - uint32_t checksum; - std::vector encrypted_message; - time_point_sec create_date; - time_point_sec receive_date; - time_point_sec read_date; - time_point_sec remove_date -}; -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`nonce` — a random number that is necessary for decrypting the message. This is an integral part of the unique key (it contains the fields `from`,` to` and `nonce`); -`from_memo_key` — public memo key of a sender account; -`to_memo_key` — public memo key of a receiver account; -`checksum` — a checksum is the encryption key result; -`encrypted_message` — encrypted message; -`create_date` — date and time when the message was created; -`receive_date` — date and time when the message was received. If the message is not edited, this value is the same as the value of the `create_data` field; -`read_date` — date and time the message was read; -`remove_date` — date and time the message was deleted from the interlocutor's box. - -#### View messages received from inbox and outbox - -To view the messages stored in the inbox and outbox, the following structure is used: -```cpp -struct message_box_query { - set select_accounts; - set filter_accounts; - time_point_sec newest_date; - bool unread_only; - uint16_t limit; - uint32_t offset -}; -``` -Parameters: -`select_accounts` — a list of accounts names that is selected to see their messages; -`filter_accounts` — a list of account names that are excluded from viewing their messages; -`newest_date` — date and time from which messages are displayed; -`unread_only` — show only unread messages; -`limit` — maximum number of messages issued; -`offset` — offset from beginning of the list from which messages are issued. - -#### Get a list of incoming messages for a recipient account -To get a list of incoming messages for a recipient account, the following query form is used: -```cpp -get_inbox( - string to, - message_box_query -) -``` -Parameters: -`to` — account name who receives a message; -`message_box_query` — request to receive messages; - -The result is a vector receiving of the following form: `vector`. - -#### Getting a list of outgoing messages for a sender account - -The following query is used to get a list of outgoing messages for a sender account: -```cpp -get_outbox( - from, - message_box_query -) -``` -Parameters: -`from` — account name who sends a message; -`message_box_query` — request to receive messages. - - -The result is a vector receiving of the following form: `vector`. - -#### Filtering a message list -A structure of following form is used for filtering the list of messages in a message pipe (between accounts `from` and `to`) is carried out using structures of the following form: -```cpp -struct message_thread_query { - time_point_sec newest_date; - bool unread_only; - uint16_t limit; - uint32_t offset -}; -``` -Parameters: -`newest_date` — date and time from which messages are displayed; -`unread_only` — show only unread messages; -`limit` — maximum number of messages issued; -`offset` — offset from beginning of the list from which messages are issued. -#### Obtaining a message flow between a sender and receiver of messages -Receiving a message stream (between accounts `from` and `to`) is performed using a method of the following form: -```cpp -get_thread( - string from, - string to, - message_thread_query -) -``` -Parameters: -`from` — account name who sends a message; -`to` — account name who receives a message; -`message_thread_query` — request to receive message flow. - -The result is a vector receiving of the following form: `vector`. - -#### Getting up-to-date settings of the private messages module -The following API request is used to obtain the current module settings of private messages: -```cpp -get_settings(string owner) -``` -Parameter: -`owner` — account name that owns the contact list. - - -The result is a structure receiving of the following form: -```cpp -struct settings_api_object { - bool ignore_messages_from_unknown_contact; -}; -``` -Parameter: -`ignore_messages_from_unknown_contact` — "true" if messages from unknown contacts should be blocked. - -#### Obtaining data on a size of the contact list - -The following query form is used to get information about the contact list size: -```cpp -get_contacts_size(string owner) -``` -Parameter: -`owner` — account name that owns the contact list. - -The result is a structure receiving of the following form: -```cpp -struct contacts_size_api_object { - map size -}; -``` -Parameters: -`size` — size data of the contact list in the form of the following structure: -```cpp -struct contacts_size_info { - int total_contacts; - int total_outbox_messages; - int unread_outbox_messages; - int total_inbox_messages; - int unread_inbox_messages -}; -``` -`total_contacts` — total number of account (contact) names in the contact list; -`total_outbox_messages` — total number of outgoing messages; -`unread_outbox_messages` — total number of unread outgoing messages; -`total_inbox_messages` — total number of incoming messages; -`unread_inbox_messages` — total number of unread incoming messages. - -#### Getting information about a single contact -The following query form is used to obtain information about a specific contact: -```cpp -get_contact_info( - string owner, - string contact -) -``` -Parameters: -`owner` — account name that owns the contact list; -`contact` — account name you want to obtain the data. - -A result of the query is a structure of the following form: -```cpp -struct contact_api_object { - account_name_type owner; - account_name_type contact; - string json_metadata; - private_contact_type local_type; - private_contact_type remote_type; - contact_size_info size -}; -``` -Parameters: -`owner` — account name that owns the contact list (up to 16 characters); -`contact` — account name whose data are issued (up to 16 characters); -`json_metadata` — account's data in JSON format; -`local_type` — contact type in the account contact list with name `owner`; -`remote_type` — contact type in the account contact list with name `contact`; -`size` — size data of the contact list. - - -#### Getting a complete list of contacts that are in the contact list - -The following query form is used to obtain a complete list of account names (contacts) which are existed in the contact list: -```cpp -get_contacts( - string owner, - private_contact_type type, - int limit, - int offset -) -``` -Parameters: -`owner` — account name that owns the contact list; -`type` — type of contacts the user want to get (`unknown`, `pinned`, `ignored`); -`limit` — maximum number of contacts to be issued; -`offset` — offset relative to the beginning of the list from which the contacts are issued. - -The result is receiving an array of structures of the following form `vector`. - - -#### Subscribing to events about private messages - -To subscribe to private message events, the following call is used: -```cpp -set_callback(callback_query) -``` -The `callback_jquery` parameter is a structure of the following form: -```cpp -struct callback_query { - set select_accounts; - set filter_accounts; - set select_events; - set filter_events -}; -``` -Parameters: -`select_accounts` — a list of account names that is selected to see their messages; -`filter_accounts` — a list of account names that are excluded from viewing their messages; -`select_events` — a list of events to monitor; -`filter_events` — a list of events to exclude from monitoring. - - -A list of the events has the `enum` form: -```cpp -enum callback_event_type { - message, // message monitoring - mark, // marking messages as read - remove_inbox, // delete incoming messages - remove_outbox, // delete outgoing messages - contact // adding account name to the contact list -}; -``` - -If the events `message`, `mark`, `remove_inbox` and `remove_outbox` are occured the following struct will be received: -```cpp -struct callback_message_event { - callback_event_type type; // type of contact (`unknown`, `pinned`, `ignored`); - message_api_object message // message object -}; -``` - -If the event `contact` is occured the following struct will be received: -```cpp -struct callback_contact_event { - callback_event_type type; // type of contact (`unknown`, `pinned`, `ignored`); - contact_api_object contact // contact object -}; -``` -## Additional operations on reblogged posts - -In previous versions, а user was given only small opportunities with operations on reblogged posts (for example, the user could not delete them or add their own comment). Version SF-0.18.4 provides the user with such features. - -### Deleting the reblogged post - In the new version, unlike previous versions, the blogger is given the opportunity to remove reblogs, as well as third-party publications copied randomly to his blog. To implement this feature, a new method `delete_reblog_operation()` has been added to the `follow` plugin. Calling this method is available from `cli_wallet` using evaluator `custom_json`. The operation of deleting the reblog is formed manually. - -Example of calling the operation to delete a reblogged post: -```cpp -begin_builder_transaction -add_operation_to_builder_transaction 0 ["custom_json", {"required_posting_auths":[""], \ - "id": "follow", "json":"["delete_reblog", {"account":"", \ - "author":"", "permlink":""}]"}] -sign_builder_transaction 0 true -``` -In this example: -`begin_builder_transaction` — a command to call the transaction, which includes the operation of deleting the reblogged post; -`add_operation_to_builder_transaction` — a command that the deletion of the reblog that has the identification number “0”; -`` — account name, who is a reblogger; -`` — account name of the original post; -`` — reblogged post to be deleted; -`sign_builder_transaction` — a command for signing transaction, which is sending into a demon. - -To delete more than one reblogged post, it needs to create a transaction with multiple operations. - - -### Adding a comment to the reblog - -In the SF-0.18.4 version, unlike the previous ones, the author of the reblog is given the opportunity to add a comment to the reblog. For this purpose, the `reblog_operation` method has been modified in the` follow` plugin. Calling this method is available from `cli_wallet` using the `custom_json` evaluator. The operation of adding a comment to the reblog is formed manually. - -**Changes in the cli_wallet application** - -Calling the operation `reblog_operation` is possible from the `cli_wallet` application. To add a comment to the reblog, the following fields are added to the call: - -Field name | Type | Functionality -:--------- |:---------- |:------------ -`body` | string (UTF-8) | Contains a comment body to be added to the reblog -`title` | string (UTF-8) | Contains a comment title to be added to the reblog -`json_metadata` | string (UTF-8) | Contains a comment metadata in JSON form to be added to the reblog - -**Note:** The `body` field is mandatory in the call for the reblog operation with the addition of a comment. - -A sample invocation of the reblog operation with adding a comment: -```cpp -begin_builder_transaction -add_operation_to_builder_transaction 0 ["custom_json", {"required_posting_auths":[""], \ - "id": "follow", "json":"["reblog", {"account":"","author":"", \ - "permlink":"","title":"","body":""}]"}] -sign_builder_transaction 0 true -``` -In this sample: -`begin_builder_transaction` — a command to call the transaction, which includes the operation the post reblog with adding a comment; -`add_operation_to_builder_transaction` — команда, формирующая операцию репоста с добавлением комментария, a command that the post reblog that has the identification number “0”; - `` — account name, who performs the post reblog; -`` — account name of the original post; -`` — the post to be reblogged; -`` — comment title to be added to the reblog; -`` — comment body to be added to the reblog; -`sign_builder_transaction` — a command for signing transaction, which is sending into a demon. - -**Changes in API methods:** - -Responses of API methods `get_blog` and `get_blog_entries` have been supplemented with the fields listed in the following table: - -Field name | Type | Functionality -:------------- |:-------- |:--------------- -`reblog_title` | string | Contains the reblog title to which the comment is added - `reblog_body` | string | Contains the reblog body - `reblog_json_metadata` | string | Contains the reblog metadata - -Responses of API methods `get_feed`, `get_feed_entries`, `get_discussions_by_blog` and `get_discussions_by_feed` are supplemented with the array of objects `reblog_entries`, the structure of which is supplemented by the fields given in the following table: - -Field name | Type | Functionality -:------------- |:-------- |:--------------- -`author` | string | Contains the account name who reblogged the post -`reblog_title` | string | Contains the reblog title to which the comment is added - `reblog_body` | string | Contains the reblog body - `reblog_json_metadata` | string | Contains the reblog metadata - -## Ability to tune the configuration file for storing only the necessary information on a node - -In order to save memory resources, a user is interested in storing on the blockchain node only necessary data, such as account metadata, memo text (a note) in the operations of savings withdraws, the latest updates of posts and comments. After the post is closed, such information becomes irrelevant and needs to be deleted. - -To store only such information on a blockchain Node, the user does not need to create a node in the full memory configuration option. In previous versions, the user could build a node in the LOW_MEM configuration option to reduce memory consumption. The disadvantage of this method was the following fact. To disable or enable the memory save mode on a node, the user each time had to rebuild the node in either standard or LOW_MEM configuration options. Because it took a long time to rebuild, this had a negative impact on the node performance. - -### Ability to tune the configuration file for storing account metadata -New `store-account-metadata` and `store-account-metadata-list` flags have been added to the configuration file `config.ini`, as well as changes to the API library for storing account metadata on a blockchain node (without having to rebuild the node in the configuration option LOW_MEM). Using these flags provides more flexibility to configure a node to store account metadata in memory-saving mode. - -To enable or disable the account metadata storage mode, the user only needs to configure the `config.ini` file and restart a node. It is no longer need to restart the node after the synchronization is complete. - - -**Changes in the config.ini file** - -The `config.ini` file has been updated with the custom flags given in the following table: - -Name | Type | Default value | Set value -:-------------- |:------------- |:------------- |:---------------- -`store-account-metadata` | bool | — | "true" — enable the mode for storing metadata for all accounts specified in the flag list `store-account-metadata-list`. "false" — enable the mode for storing metadata for all accounts -`store-account-metadata-list` | string | — | List of account names for which metadata is stored - - -**Changes in the API library** - -From now on the API method `account_api_object()` uses an empty value of json_metadata without having to set the LOW_MEM mode in case a blockchain node has the metadata storage mode disabled. - -### Ability to tune the configuration file for storing the memo field in the operations of savings withdraws -New `store-memo-in-savings-withdraws` flag has been added to the configuration file `config.ini` for storing the `memo` field on a blockchain node for the operations of savings withdraws (without having to rebuild the node in the configuration option LOW_MEM). Using these flags provides more flexibility to configure a node to store account metadata in memory-saving mode. - -To enable or disable mode for storing the `memo` field message, the user only needs to configure the `config.ini` file and restart a node. It is no longer need to restart the node after the synchronization is complete. - - -**Changes in the config.ini file** - -The `config.ini` file has been updated with the custom flag given in the following table: - -Name | Type | Default value | Set value -:------------- |:------------------ |:----------- |:----------- -`store-memo-in-savings-withdraws` | bool | true | "true" — enable the mode for storing the `memo` field message for all operations of savings withdraws - -### Ability to tune the configuration file for storing changes in posts and comments, taking into account a history depth of these changes - -In previous versions, a user had to rebuild a node each time to enable or disable the mode for storing comments of the `last_update` and `active` fields. - -New `store-comment-last-update` flag has been added to the configuration file `config.ini`, as well as changes to the API library for storing changes in posts and comments on a blockchain node. - -Using this flag allows the user to set a storage history depth based on a date of change and a date of the last update. To enable or disable the mode for storing comments of the `last_update` and `active` fields on a node, the user only needs to configure the `config.ini` file and restart the node. It is no longer need to restart the node after the synchronization is complete. - - -**Changes in the config.ini file** - -The `config.ini` file has been updated with the custom flag given in the following table: - - -Name | Type | Default value | Set value -:------------- |:------------------ |:----------- |:----------- -`store-comment-last-update` | bool | true | "true" — enable mode to store changes in posts and comments. "false" — disable mode - - - -**Changes in the API library** - -In SF-0.18.4, the `last_update` and `active` fields are optional and may not be present in the return value of the `comment_api_object()` API method. - -Changed names of the arguments presented in the following table. - -Old argument name (in previous version) | New argument name (in the SF-0.18.4 version) -:----------- |:------------------- -`discussion_helper::impl fill_comment_content` | `fill_comment_info` -`discussion_helper::discussion_helper() fill_comment_content` | `fill_comment_info` - -### Ability to tune the configuration file for storing history of payments for publications -After the end of all payments for a post publication (to the author, as well as to the persons who took part in the voting), these data become irrelevant and are no longer used in the system. The user, if necessary, can store a history of publishing rewards on a node and use it at their discretion without having to rebuild the node in the configuration option LOW_MEM. - -New `store-comment-rewards` variable has been added to the configuration file `config.ini`, as well as changes to the API library. Using this variable allows the user to store the information about rewards on the blockchain node. From now on the user has to rebuild the node only once after setting configuration file variable. - - -**Changes in the API library** - -New parameters (marked with the comment “new parameter”) has been added to the structure `comment_api_object`: -```cpp -struct comment_api_object { - … - asset total_payout_value; - asset beneficiary_payout_value; - asset beneficiary_gests_payout_value; - asset curator_payout_value; - asset curator_gests_payout_value; // new parameter - - share_type author_rewards; - asset author_gbg_payout_value; // new parameter - asset author_golos_payout_value; // new parameter - asset author_gests_payout_value; // new parameter - … -} -``` -Parameters: -`total_payout_value` — total amount of payments in GBG; -`beneficiary_payout_value` — payment to the beneficiary in GBG; -`beneficiary_gests_payout_value` — payment to the beneficiary in GESTS; -`curator_payout_value` — payment to the curator in GBG; -`curator_gests_payout_value` — payment to the curator in GESTS. -`author_rewards` — reward to the author in GOLOS; -`author_gbg_payout_value` — payment to the author in GBG; -`author_golos_payout_value` — payment to the author in GOLOS; -`author_gests_payout_value` — payment to the author in GESTS. - -### Ability to tune the configuration file for storing both the post and comment contents -A user is given an opportunity to more flexibly configure the file `config.ini` to store the post or comment content until a certain time. New parameters `comment-title-depth`, `comment-body-depth`, `comment-json-metadata-depth` and `set-content-storage-depth-null-after-update` have been added to the configuration file `config.ini`. - -The first three parameters are used to specify a depth of the title, body, and metadata history (or comments), respectively. Specifying zero values for all these parameters in the configuration file means that the content should not be stored. A non-zero integer value of at least one of these parameters means that the corresponding content part is stored until a payment for this post (or comment). - -Setting the parameter `set-content-storing-depth-null-after-update` is used when the user needs to store a content only after updating it. Setting this option automatically cancels the first three options. - -To conserve memory resources, the user can store only a piece of the content without having to rebuild the node in the configuration option LOW_MEM. - -The parameters are given in the following table. - -Name | Type | Default value | Set value -:------------- |:----------- |:----------- |:--------- -`comment-title-depth` | uint32_t | — | Maximum number of blocks to store titles -`comment-body-depth` | uint32_t | — | Maximum number of blocks to store a post (or comment) body -`comment-json-metadata-depth` | uint32_t | — | Maximum number of blocks to store metadata in the JSON format -`set-content-storing-depth-null-after-update` | bool | "false" | "true" if the content storage depth should be reset after content changes - -### Ability to tune the configuration file for removing obsolete votes - -In previous versions, the option LOW_MEMORY_NODE was used to remove obsolete votes. This option could be set either on the command line or in the configuration file using the compile flag "-DLOW_MEMORY_NODE = ON / OFF". -Obsolete votes were removed after a post closure and all necessary calculations were made. It was done to free a memory from outdated information and, consequently, reduce the time spent on initial synchronization. - -Also, the votes could be removed using another option `clear-votes-before-block, bpo::value() - >default_value(0)`, which provided removal of all votes to a certain fixed block. The main disadvantage of this method was that it did not provide for removing the newly arrived votes, which were re-accumulated in the system and after a certain time they again would be unnecessary. - -New solution introduced in SF-0.18.4 version to remove obsolete votes. New parameter `clear-votes-old-n-blocks, bpo::value() - >default_value(0xFFFFFF)` was added to configuration file `config.ini`. This parameter ensures the votes preservation till N blocks, and deleting votes in blocks over N. -A correspondence between the specified value N and the operation is given in the following table. - -N value | Number of blocks storable votes | Operation to be performed | Comment -:------------- |:---------- |:---------- |:------- -N=0 | 0 | Removal of votes immediately after closing the post | Used when a user does not want to save votes -N>0 | N | Removing votes from blocks older than N | Used to save votes of N blocks starting from the current block and remove votes in blocks older than N. The N value shows a difference (age) between the current block and the block that has a vote -N=-1 | All blocks | Removal of votes is not performed | The value «-1» is converted to the maximum possible unsigned number (infinity analog). Used to store voices for a long time - - -In all cases, the removal of votes is not performed until a post is closed. - -**Note:** This modification has been implemented at the request of delegates. - -### Ability to tune the configuration file for increasing the number of keywords or phrases to find the right information in the posts - -In previous versions, the number of tags (keywords or phrases) in a request to a blockchain Node was limited to five. which was not always sufficient for a more detailed description of the requested information in posts. This amount was not always sufficient for a more detailed description of the requested information in the posts. - -In the new version, the maximum number of tags in a request to a blockchain Node can be increased to 15 . In addition, the tag size is limited to 512 characters. New parameters `tags-number` and `tag-max-length` have been added to the `config.ini` file, allowing the user more flexibility to customize the operation of the blockchain. The user can specify the number and size of the tag depending on resources of the blockchain nodeю The specified number of tags must not exceed 15. - -**Changes in the config.ini file** -The parameters `tags-number` and `tag-max-length` are given in the following table. - -Name | Type | Default value | Comment -:------------ |:---------- |:---------- |:----------- -`tags-number` | std::size_t | 5 | This value can be increased to 15 -`tag-max-length` | std::size_t | 512 | It is not recommended to set tag size more than 512 characters - -If `tags-number` takes default value, the changes are backward compatible with previous version. - - -## Fixed old bug in the cli_wallet application for the case, when an account had a multiple authorities - -In previous versions, an account (a user) who has multiple authorities was not able to sign a transaction with using own key when the names of third-party accounts were containing in the `account_auths` field. -Transactions created by the user could only be signed with using keys of the third-party accounts existed in the `account_auths` field. When the user was trying to sign a transaction with own key, the application `cli_wallet` issued an error message. - -This flaw is no longer in the SF-0.18.4 version. There was modified the `annotated_signed_transaction()` method in the client application `cli_wallet`. The fix did not affect the input and output parameters of this method and did not change a call to this method. This modification provides ability to sign transactions with using the user's key as well as with using keys of the accounts existed in the `account_auth` field. - -## Fixed bug in displaying the original blogger on the post feed - -A user who subscribed to view posts of only certain blogger, could see other bloggers on the post feed. -This bug occured in the case when a blogger, for which the user had a subscription, reposted work of another blogger, for which the user had no subscription. As a result, the user could see another blogger on the post feed. The user was confused because of there was no any explain information on the post feed. - -This bug has been fixed in the 0.18.4 version. The post feed has been supplemented with the `"reblogged_by:"` field, which displays a name of the author who reposted a third-party author work. - -## Filtering the requested information about operations from account history - -In previous versions, a user did not have ability to request the blockchain for a history of about only individual account operations. Instead, the user could only request a history of all account operations performed over a period of time. Many of the received operations were not directly related to the account (for example, voting for posts of this account, repetitive operations perceived as "noise"). To obtain information about an account operation of interest, the user had to create several requests for the blockchain and choose the necessary one from a variety of operations and abandon the rest. - - -In order to speed up the search for necessary account operations a new parameter has been implemented in version SF-0.18.4 that can be used to filter operations on certain criteria. - -**Changes in the get_account_history API method** - -The optional parameter `query` was added to the `get_account_history` method to filter operations. By default, filtering is disabled. The method has the following form: -```cpp -get_account_history(account_name, [from, [limit, [query]]]) -``` -The parameters `from` and` limit` in this method are optional and by default take the values "-1" and "100" respectively. This method can be called with one specified parameter (for example, `get_account_history(account)`) to get the last 100 account operations. - -The `query` parameter is a structure (object) and contains the following fields: - * `select_ops` — list of operations that need to be obtained. The value may contain names of operations (including ending with "\_operation"), as well as the following key words: - * `ALL` — all operations; - * `REAL` — only explicitly defined operations; - * `VIRTUAL` — only virtual operations; - * `filter_ops` — list of operations to be deleted. Takes the same values as `select_ops`. This field is optional and defaults to the empty value; - * `direction` — "direction" of operation relative to the account (for example, the operation `vote` defines two accounts: one is who votes and another is whose post is voted for). This field is optional and takes the following values: - * `any` — any direction (default value is no filtering by direction); - * `sender` — determines the account as a sender (for example, `creator` or `voter`. Usually, this is account who creates the operation); - * `receiver`— determines the account as a receiver (for example, `created` or `voted`. Usually, this is account who is related to the operation but does not creates it); - * `dual` — determines the account as both sender and receiver at the same time (for example, `voting self post`. That is, the case where the operation ambiguously determines the account role). - -**Changes in the cli_wallet application** - -The `filter_account_history()` method was added to the application `cli_wallet`, which performs the same function as the method `get_account_history()`. Unlike the latter, it has the input parameter `query` to support filtering. In the body of that method, there is a call to the API method `get_account_history()`. - - -Examples of calling the `filter_account_history()` method: -```cpp -get_account_history cyberfounder -1 100 -filter_account_history cyberfounder -1 100 {"select_ops":["REAL","interest"], "filter_ops":["transfer"]} -filter_account_history cyberfounder -1 100 {"direction":"receiver","filter_ops":["producer_reward"]} -``` -The changes are backward compatible and retain the call and functionality of the `get_account_history()` method. - -**** diff --git a/golosd/SoftFork/SF-0.18.5-Release_Notice.md b/golosd/SoftFork/SF-0.18.5-Release_Notice.md deleted file mode 100644 index 904243ff..00000000 --- a/golosd/SoftFork/SF-0.18.5-Release_Notice.md +++ /dev/null @@ -1,110 +0,0 @@ -# GOLOS·CORE -# The new version SoftFork 0.18.5 - -***Golos·Core announced the SoftFork 0.18.5 version release which eliminated previously existing defects in the system. -This page describes a detailed outline of the fixes.*** - - -**Reindexing:** -***SF 0.18.5 requires reindexing from all previous versions except version SF 0.18.4.*** - - -### Defects fixed in this release - -Defect (Task№) | Abstract -:------------------------------- |:---------------- -943 | Problem of creating a list of operations for operation_history plugin -936 | The `get_ops_in_block` method, unlike the `get_block` method, did not provide information about virtual operations in block -948 | Removed the first argument in the method `broadcast_transaction_with_callback` did not allow this method to be used in third-party libraries - - - -**** -## Problem of creating a list of operations for operation_history plugin -**Bug description** -Some plugins, including `operation_history`, had difficulty setting options (keys). - -For example, executing a command of the form “./golosd --=123” for keys `history-blocks`, `history-start-block` failed with the error message: -“Error parsing command line: option --history-blocks is ambiguous and matches different versions of --history-blocks”. - -The error occurred when trying to run this command also with some other keys available in `program_options`. - - -**Solution** -The `add_option` method has been improved. Each of the plugins contains two objects `program_options`, this is either `cli` (command line options) or `cfg` (config file options). To declare a parameter, it has to be added to the `cfg` object with a required value. - -The error cause was an additional declaration of parameters in `cli`, which caused duplicates in general list of parameters. The solution was based on removing the parameter declaration from the `cli` object. - -The change is made to the following plugins: - * `account_history`; - * `debug_node`; - * `follow`; - * `market_history`; - * `operation_history`; - * `statsd`; - * `witness`. - - - -## The get_ops_in_block method, unlike the get_block method, did not provide information about virtual operations in block - -**Bug description:** - -The `get_ops_in_block` method did not provide information about virtual operations in a block in the return value. - -**Solution:** - -It was decided to generate the return value of the `get_ops_in_block` method similar to the return value of the `get_block` method. These two methods become identical in structure in this release. The `operation_history` plugin has been supplemented with the `get_block_with_virtual_ops` method. - - -**Samples** -1. The sample method request is as follows: -```javascript -var func = function (err, result) { - ... -}; -golos.api.send("operation_history",{"method": - "get_block_with_virtual_ops", "params":[]}, func); -``` -The parameter is a block number. - -2. The sample response of the `get_ops_in_block` method is as follows: -```javascript -"previous": "00...00", -"timestamp": "2018-09-01T00:01:22", -"witness": "", -"transaction_merkle_root": "00...00", -"extensions": [], -"witness_signature": "00...00", -"transactions": [], -"block_id": "0000000000000000000000000000000000000000", -"signing_key": "GLS1111111111111111111111111111111114T1Anm", -"transaction_ids": [] -"_virtual_operations": [{ - "trx_in_block": 65535, - "op_in_trx": 0, - "virtual_op": 1, - "op": [ - "producer_reward", - … - ] -}] -``` - -## Removed the first argument in the method broadcast_transaction_with_callback did not allow this method to be used in third-party libraries - -**Bug description** -In the previous version of softfork-0.18.4, the order of arguments in the `broadcast_transaction_with_callback` method was changed. The argument at the first position was removed as unused. Because this method was used by third-party libraries, the absence of this argument caused problems. Failure was caused by requirement to check node softfork version to find what arguments should be used to call that method. - -**Solution:** -The removed argument has been returned back to the method `broadcast_transaction_with_callback` at its previous first position. The argument order and functioning of the libraries have been restored in this release. Additionally, one of checks in the method has been fixed too. - - - -**Notes:** - * The `_virtual_operations` field is optional and can be omitted if here are no virtual operations in the block. There is no more difference between responses of the methods. - * Also the `set_block_applied_callback` method was modified in the plugin `database_api`. From now on, its response has the `_virtual_operations` field as well. This change affects API node only. - - - -**** diff --git a/golosd/admin/install_osx.md b/golosd/admin/install_osx.md deleted file mode 100644 index c609382a..00000000 --- a/golosd/admin/install_osx.md +++ /dev/null @@ -1,63 +0,0 @@ -# Установка ноды на OS X - - - -### Установка -Перед тем как начать, установите пожалуйста XCode [скачать](https://developer.apple.com/download) или через App Store -и введите в консоли: -```bash -sudo xcodebuild -license accept -``` - -#### Установите Homebrew [отсюда](http://brew.sh/) или введите: -```bash -/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" -``` - -#### Установите зависимости Голоса: -```bash -brew install cmake git openssl autoconf automake qt5 -``` - -```bash -brew install google-perftools berkeley-db libtool python3 readline -``` - -```bash -brew install homebrew/versions/boost160 -``` - -#### Склонируйте репозиторий в вашу рабочую директорию: -```bash -git clone https://github.com/GolosChain/golos -``` - -И соберите проект (это может занять от 10 до 30 минут): -```bash -cd golos && git checkout master -git submodule update --init --recursive -cmake -DBOOST_ROOT='/usr/local/Cellar/boost160/1.60.0' -DOPENSSL_ROOT_DIR='/usr/local/Cellar/openssl/1.0.2h_1/' -DCMAKE_BUILD_TYPE=Release . -make -``` -Заметка: для ускорения процесса можете запустить команду make с флагом -j и числом ядер процессора: -```bash -make -j$(sysctl -n hw.ncpu) -``` - -Теперь вы можете запустить Голос: -```bash -cd programs/golosd -./golosd -``` - -Или с помощью утилиты [screen](http://help.ubuntu.ru/wiki/screen) -```bash -cd programs/golosd -screen -dmS golos ./golosd -``` - -После запуска у вас запустится нода и инициализируются аккаунты из файла snapshot.json в генезис, также у вас создастся папка -witness_node_data_dir с конфигурационным файлом config.ini - -#### Отредактируйте его со следующими настройками: -[дописать инструкцию по конфигурированию config.ini] diff --git a/golosd/admin/install_ubuntu.md b/golosd/admin/install_ubuntu.md deleted file mode 100644 index 7beb0c97..00000000 --- a/golosd/admin/install_ubuntu.md +++ /dev/null @@ -1,158 +0,0 @@ -# Установка ноды на Ubuntu - - -### Установка -#### Скрипт установки ноды Голос на Ubuntu 16.04 LTS -Текущий способ установки позволяет автоматически обновлять ноду Голоса - -Вы можете запустить команду за командой либо создать файл golos-install.sh и дать ему необходимые права: - -```bash -touch golos-install.sh -nano golos-install.sh -``` - -Заметка: самый простой способ сделать это с помощью редактора [nano](http://help.ubuntu.ru/wiki/nano) - -Данный скрипт устанавливает все необходимые зависимости и скачивает последний релиз из тега актуальной версии основного репозитория - -```bash -#!/bin/bash - -# install dependencies -sudo apt-get -y upgrade && sudo apt-get -y install git cmake g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev libssl-dev libncurses5-dev doxygen libreadline-dev dh-autoreconf screen - -# remove old installation -rm -rf golos -mkdir golos - -rm -rf golosnode -mkdir golosnode - -# pull fresh code, compile -git clone https://github.com/GolosChain/golos && cd golos && git checkout tags/v0.16.4 && git submodule update --init --recursive && cmake -DCMAKE_BUILD_TYPE=Release . && make -j$(nproc) - -# install new binaries -cp programs/golosd/golosd ../golosnode/ -cp programs/golosd/snapshot5392323.json ../golosnode/ -cp programs/cli_wallet/cli_wallet ../golosnode/ - -# go into golos -cd .. -cd golosnode/ -mkdir witness_node_data_dir - -# apply config.ini if available -if [ -f ../config.ini ] -then - cp -fv ../config.ini witness_node_data_dir/ -fi - -chmod +x golos-install.sh && ./golos-install.sh -``` - -После всего этого структура директорий будет следующая - - -```bash -$ tree -L 2 -. -├── config.ini <=== (наш config.ini) -├── golos -│ ├── (source code files) -├── golosnode <=== (отсюда мы запускаем ноду и воллет) -│ ├── cli_wallet -│ ├── golosd -│ └── witness_node_data_dir <=== (config.ini и блокчейн находится здесь) -└── golos-install.sh -``` - -Если вышел новый релиз с новым хардфорком - перезапускаем скрипт. - -```bash -./golos-install.sh -``` - -#### Пошаговая сборка клиента Голос на Ubuntu 14.04 LTS -_В этом обучающем материале изложено, как можно начать работать над Голосом, используя операционную систему Debian/Ubuntu. В случае использования другой операционной системы, основанной на Linux, возможна иная последовательность установки необходимых элементов._ - -#### Установка зависимостей -Для успешной инсталляции Ubuntu 14.04 LTS требуется установить следующие дополнительные элементы : - -``` -sudo apt-get install gcc-4.9 g++-4.9 cmake make libbz2-dev libdb++-dev libdb-dev -sudo apt-get install libssl-dev openssl libreadline-dev autoconf libtool git - -``` -#### Скачивание оригиналов -Оригиналы программного кода могут быть загружены с [гитхаба](https://github.com/GolosChain/golos). - -``` -git clone git@github.com:GolosChain/golos.git -``` - -#### Сборка клиента Голоса -Для конфигурирования и компиляции требуется запустить cmake: - -``` -cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release . -make -``` - -Обратите внимание, что переменная среды $BOOST_ROOT должна указывать на вашу установочную папку, если вы устанавливали её вручную. - -#### Обновление Голоса -Для загрузки обновлённого программного кода требуется запустить следующий код: - -``` -git fetch -git checkout -git submodule update --init --recursive -cmake . -make -``` - -#### Особенности разных версий ПО - -##### Boost 1.60 -Библиотека загрузочных файлов может быть устаревшей. В этом случае следует загрузить tar-архив для Boost 1.60.0. - -``` -export BOOST_ROOT=$HOME/opt/boost_1_60_0 -sudo apt-get update -sudo apt-get install autotools-dev build-essential g++ libbz2-dev libicu-dev python-dev -wget -c 'http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.bz2/download' \ - -O boost_1_60_0.tar.bz2 -tar xjf boost_1_60_0.tar.bz2 -cd boost_1_60_0/ -./bootstrap.sh "--prefix=$BOOST_ROOT" -./b2 install -``` - -##### Ubuntu 14.04 -Поскольку g++-4.9 недоступна в 14.04 LTS , следует вначале сделать следующее: - -``` -sudo add-apt-repository ppa:ubuntu-toolchain-r/test -sudo apt-get update -If you get build failures due to abi incompatibilities, just use gcc 4.9 - -CC=gcc-4.9 CXX=g++-4.9 cmake . -``` - -##### Ubuntu 15.04 -В Ubuntu 15.04 используются gcc 5, в которых c++11 ABI используется по дефолту, при этом загрузочные файлы были скомпилированы с использованием cxx11 ABI (это проблема во многих дистрибутивов). При возникновении ошибок, вызванных несовместимостью с abi, следует использовать gcc 4.9 - -``` -CC=gcc-4.9 CXX=g++-4.9 cmake . -``` - -#### Использование контейнеров Docker -Release: -``` -docker run -p 8090:8090 -p 2001:2001 -it -v chain_data:/var/lib/golosd goloschain/golos -``` - -Testnet: -``` -docker run -p 8092:8090 -p 2002:2001 -e STEEMD_WITNESS_NAME="cyberfounder" -e STEEMD_EXTRA_OPTS="--enable-stale-production" -e STEEMD_MINER_NAME="cyberfounder" -e STEEMD_PRIVATE_KEY="5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS" -e STEEMD_MINING_THREADS=4 -v testnet_chain_data:/var/lib/golosd -it goloschain/golos_testnet:0.17.0 -``` \ No newline at end of file diff --git a/golosd/admin/witness.md b/golosd/admin/witness.md deleted file mode 100644 index 27fcf16f..00000000 --- a/golosd/admin/witness.md +++ /dev/null @@ -1,339 +0,0 @@ -# Настройка нод - - -#### Настройка нод майнера и делегата для работы в Голосе: рабочие конфиги и пояснения по установке - -> Материал взят отсюда: -https://golos.io/ru--golos/@primus/nastroika-nod-mainera-i-delegata-dlya-raboty-v-golose-rabochie-konfigi-i-poyasneniya-po-ustanovke - ->ВНИМАНИЕ: необходимо изменить команды типа golos-14.2, указав актуальную версию ноды, например, 16.4 - - - -Устанавливаем необходимые библиотеки и зависимости: - -``` -sudo apt-get update -sudo apt-get install git cmake g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev libssl-dev libncurses5-dev doxygen libreadline-dev dh-autoreconf screen -sudo -``` - -Скачиваем исходный код Голоса из официального репозитория: - -``` - -git clone https://github.com/GolosChain/golos.git golos-14.2 -cd golos-14.2 -git submodule update --init --recursive -``` - -Генерируем файлы для управления сборкой: - -``` - -cmake -DCMAKE_BUILD_TYPE=Release . -``` - - -И завершаем компиляцию (придётся подождать некоторое время): -``` - - -make``` - - -Для запуска нод я использую отдельную директорию, в которой лежат конфигурационные файлы и сам блокчейн Голоса. Пусть это будет директория по имени golos, давайте создадим её: -``` - - -cd -mkdir golos -cd golos``` - - -Запуск ноды производится командой: -``` - - -/path/to/golos-14.2/programs/golosd/golosd -где /path/to/ - это путь в системе до папки golos-14.2``` - - созданной на этапе скачивания исходного кода Голоса из официального репозитория. - -Прежде чем запускать Голос, скопируйте в эту папку файл со снэпшотом сети: -``` - - -cp /path/to/golos-14.2/programs/golosd/golosd/snapshot5392323.json .``` - - -И теперь можно запускать golosd: -``` - - -/path/to/golos-14.2/programs/golosd/golosd``` - - -При первом запуске golosd создаст директорию witness_node_data_dir для хранения блокчейна. Прервите работу golosd и создайте (в любом текстовом редакторе, я использую nano) конфигурационный файл в этой директории: -``` - - -nano witness_node_data_dir/config.ini``` - -Конфигурационный файл для ноды майнера: - -``` - - -# Endpoint for P2P node to listen on -# p2p-endpoint = - -# Maxmimum number of incoming connections on P2P endpoint -# p2p-max-connections = - -# P2P nodes to connect to on startup (may specify multiple times) -# seed-node = - -seed-node = 5.9.18.213:4243 -seed-node = 52.32.75.69:4243 -seed-node = 52.57.156.202:4243 -seed-node = 88.99.13.48:4243 -seed-node = golos-seed.arcange.eu:4243 -seed-node = golos-seed.esteem.ws:4243 -seed-node = golosnode.com:4243 -seed-node = 138.68.101.115:4243 -seed-node = golos.imcoins.org:2001 -seed-node = 178.62.224.148:4242 - -# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints. -# checkpoint = - -# Endpoint for websocket RPC to listen on -# rpc-endpoint = - -rpc-endpoint = 127.0.0.1:9090 - -# Endpoint for TLS websocket RPC to listen on -# rpc-tls-endpoint = - -# The TLS certificate file for this server -# server-pem = - -# Password for this certificate -# server-pem-password = - -# Block signing key to use for init witnesses, overrides genesis file -# dbg-init-key = - -# API user specification, may be specified multiple times -# api-user = - -# Set an API to be publicly available, may be specified multiple times -public-api = database_api login_api - -# Plugin(s) to enable, may be specified multiple times -enable-plugin = witness account_history - -# Defines a range of accounts to track as a json pair ["from","to"] [from,to) -# track-account-range = - -# RPC endpoint of a trusted validating node (required) -# trusted-node = - -# Track market history by grouping orders into buckets of equal size measured in seconds specified as a JSON array of numbers -bucket-size = [15,60,300,3600,86400] - -# How far back in time to track history for each bucket size, measured in the number of buckets (default: 5760) -history-per-size = 5760 - -# Defines a range of accounts to private messages to/from as a json pair ["from","to"] [from,to) - -# Enable block production, even if the chain is stale. -enable-stale-production = false - -# Percent of witnesses (0-99) that must be participating in order to produce blocks -required-participation = false - -# name of witness controlled by this node (e.g. initwitness ) -# witness = - -witness = "alcotester" - -# name of miner and its private key (e.g. ["account","WIF PRIVATE KEY"] ) -# miner = - -miner = ["alcotester","5JGyvx65iLqRgX77Yzr2kDYqEoEwG3PhnxDJ2Nb97SbVb5CbGKs"] - -# Number of threads to use for proof of work mining -# mining-threads = - -mining-threads = 2 - -# WIF PRIVATE KEY to be used by one or more witnesses or miners -# private-key = - -# Account creation fee to be voted on upon successful POW - Minimum fee is 100.000 STEEM (written as 100000) - -miner-account-creation-fee = 3000 - -# Maximum block size (in bytes) to be voted on upon successful POW - Max block size must be between 128 KB and 750 MB -# miner-maximum-block-size = - -# SBD interest rate to be vote on upon successful POW - Default interest rate is 10% (written as 1000) -# miner-sbd-interest-rate = - -# declare an appender named "stderr" that writes messages to the console -[log.console_appender.stderr] -stream=std_error - -# declare an appender named "p2p" that writes messages to p2p.log -[log.file_appender.p2p] -filename=logs/p2p/p2p.log -# filename can be absolute or relative to this config file - -# route any messages logged to the default logger to the "stderr" logger we -# declared above, if they are info level are higher -[logger.default] -level=warn -appenders=stderr - -# route messages sent to the "p2p" logger to the p2p appender declared above -[logger.p2p] -level=warn -appenders=p2p -mining-threads = 2 - количество ядер вашего CPU -``` - -Note: Актуальный список seed node можете найти тут: -https://github.com/GolosChain/golos/blob/master/documentation/seednodes - - -Note: WIF PRIVATE KEY можно найти в вашем аккаунте на golos.io, щелкните по иконке своего пользователя в правом верхнем углу, выбирете "КОШЕЛЕК", затем щелкните на вкладку "РАЗРЕШЕНИЯ", вам нужен приватный ключ "ОБСУЖДАЕМОЕ" (нажмите "ПОКАЗАТЬ ПРИВАТНЫЙ КЛЮЧ") -- это и будет WIF PRIVATE KEY. - - -Конфигурационный файл для ноды делегата: -``` - - - -# Endpoint for P2P node to listen on -# p2p-endpoint = - -# Maxmimum number of incoming connections on P2P endpoint -# p2p-max-connections = - -# P2P nodes to connect to on startup (may specify multiple times) -# seed-node = - - -seed-node = 5.9.18.213:4243 -seed-node = 52.32.75.69:4243 -seed-node = 52.57.156.202:4243 -seed-node = 88.99.13.48:4243 -seed-node = golos-seed.arcange.eu:4243 -seed-node = golos-seed.esteem.ws:4243 -seed-node = golosnode.com:4243 -seed-node = 138.68.101.115:4243 -seed-node = golos.imcoins.org:2001 -seed-node = 178.62.224.148:4242 - -# Pairs of [BLOCK_NUM,BLOCK_ID] that should be enforced as checkpoints. -# checkpoint = - -# Endpoint for websocket RPC to listen on -rpc-endpoint = 127.0.0.1:9090 - -# Endpoint for TLS websocket RPC to listen on -# rpc-tls-endpoint = - -# The TLS certificate file for this server -# server-pem = - -# Password for this certificate -# server-pem-password = - -# Block signing key to use for init witnesses, overrides genesis file -# dbg-init-key = - -# API user specification, may be specified multiple times -# api-user = - -# Set an API to be publicly available, may be specified multiple times -# public-api = database_api login_api - -# Plugin(s) to enable, may be specified multiple times - -enable-plugin = witness -enable-plugin = account_history -enable-plugin = follow -enable-plugin = market_history -enable-plugin = private_message -enable-plugin = tags -public-api = database_api login_api market_history_api tags_api follow_api - -# Defines a range of accounts to track as a json pair ["from","to"] [from,to) -# track-account-range = - -# RPC endpoint of a trusted validating node (required) -# trusted-node = - -# Track market history by grouping orders into buckets of equal size measured in seconds specified as a JSON array of numbers -bucket-size = [15,60,300,3600,86400] - -# How far back in time to track history for each bucket size, measured in the number of buckets (default: 1000) -history-per-size = 1000 - -# Defines a range of accounts to private messages to/from as a json pair ["from","to"] [from,to) -# pm-account-range = - -# Enable block production, even if the chain is stale. -enable-stale-production = false - -# Percent of witnesses (0-99) that must be participating in order to produce blocks -required-participation = false - -# name of witness controlled by this node (e.g. initwitness ) - -witness = "primus" - -# name of miner and its private key (e.g. ["account","WIF PRIVATE KEY"] ) -# miner = - -# Number of threads to use for proof of work mining -# mining-threads = - -# WIF PRIVATE KEY to be used by one or more witnesses or miners - -private-key = 5KeVwZewUmGsP8UzowRJdUNh1dCq7McweYJrPgokVsJiyRTCm6W - -# Account creation fee to be voted on upon successful POW - Minimum fee is 100.000 STEEM (written as 100000) - -miner-account-creation-fee = 3000 - -# Maximum block size (in bytes) to be voted on upon successful POW - Max block size must be between 128 KB and 750 MB -# miner-maximum-block-size = - -# SBD interest rate to be vote on upon successful POW - Default interest rate is 10% (written as 1000) -# miner-sbd-interest-rate = - -# declare an appender named "stderr" that writes messages to the console -[log.console_appender.stderr] -stream=std_error - -# declare an appender named "p2p" that writes messages to p2p.log -[log.file_appender.p2p] -filename=logs/p2p/p2p.log -# filename can be absolute or relative to this config file - -# route any messages logged to the default logger to the "stderr" logger we -# declared above, if they are info level are higher -[logger.default] -level=warn -appenders=stderr - -# route messages sent to the "p2p" logger to the p2p appender declared above -[logger.p2p] -level=warn -appenders=p2p``` - - diff --git a/golosd/api/op-decline-voting-rights.md b/golosd/api/op-decline-voting-rights.md deleted file mode 100644 index 2a27b1cd..00000000 --- a/golosd/api/op-decline-voting-rights.md +++ /dev/null @@ -1,21 +0,0 @@ -# Операция Decline\_voting\_rights. - -Автор: [@drwho](https://golos.io/@drwho) - -В операциях БЧ GOLOS есть операция decline\_voting\_rights. У данной операции всего 2 параметра: - -* account - имя аккаунта в системе -* decline - параметр принимающий значение либо true либо false. - Сама операция подписывается ключом OWNER. - -**Если Вы хотите полностью отказаться от голосования \(т.е. курирования и голосования за делегатов\) определённым аккаунтом**, то Вам необходимо отправить данную операцию с параметрами`account - имя аккаунта который должен прекратить голосование`в системе и`decline - true`. -После этого система ставит вашу заявку в очередь на срок 30 дней. И по прошествии этого срока аккаунт больше не сможет голосовать и все его ранее выставленные голоса будут сняты. - -Если Вы в течении 30 дней решили отказаться от перспективы полной невозможности голосования, то Вам необходимо выполнить данную операцию с параметрами`account - имя аккаунта, который должен прекратить голосование`в системе и`decline - false`. - -**Предупреждение: Данная операция необратима и если Вы не отказались вовремя, то можете забыть про курирование и голосование за делегатов.** - -Операция была принята в [HF 14](https://github.com/steemit/steem/releases/tag/v0.14.2) еще в STEEM. Но к сожалению, как и большинство других операций, практически не задокументирована, кроме параметров. - -[Источник](https://golos.io/ru--golos/@drwho/operacziya-decline-voting-rights) - diff --git a/golosd/api/operatsiya-declinevoting-rights.md b/golosd/api/operatsiya-declinevoting-rights.md deleted file mode 100644 index e69de29b..00000000 diff --git a/golosd/architecture/node-roles.md b/golosd/architecture/node-roles.md deleted file mode 100644 index b72f2ab9..00000000 --- a/golosd/architecture/node-roles.md +++ /dev/null @@ -1,57 +0,0 @@ -Роли нод -======== - -В зависимости от конфигурации, golosd может выполнять несколько функций. Эти функции можно выделить в отдельные роли, которые описаны ниже. - -seed node ---------- - -Seed-нода обеспечивает хранение блокчейна и его "сидирование", т.е. отдачу всей истории блоков клиенту, а также приём и распространение транзакций в сети. seed-нода должна иметь возможность приёма соединений, т.е. быть доступной по белому IP-адресу. - -Для минимизации потребления памяти, seed-нода может быть собрана с опцией `-DLOW_MEMORY_NODE=TRUE` - -Опции конфигурационного файла, относящиеся к seed-ноде: - -``` -# Endpoint for P2P node to listen on -# p2p-endpoint = 0.0.0.0:2001 - -# Maxmimum number of incoming connections on P2P endpoint -# p2p-max-connections = -``` - -API node --------- - -Основной задачей API-ноды является обслуживание клиентских приложений через API. Для включения API используются следующие опции конфигурационного файла: - -``` -public-api = database_api login_api market_history_api tags_api follow_api -enable-plugin = account_history follow market_history private_message tags -``` - -witness node ------------- - -Нода, обеспечивающая работу делегата сети Голос. Характеризуется включенным плагином witness, указанным именем делегата и его приватного ключа: - -``` -enable-plugin = witness -witness = "foo" -private-key = WIF PRIVATE KEY -``` - -Директива `witness` может быть указана несколько раз. - -miner node ----------- - -Нода, обеспечивающая работу pow-майнера и одноимённого делегата. - -``` -enable-plugin = witness -witness = "foo" -miner = ["foo", "WIF PRIVATE KEY"] -``` - -Директива `miner` может быть указана несколько раз. \ No newline at end of file diff --git a/golosd/devel/guideline.md b/golosd/devel/guideline.md deleted file mode 100644 index e25d1c0c..00000000 --- a/golosd/devel/guideline.md +++ /dev/null @@ -1,53 +0,0 @@ -> Гайдлайн в процессе разработки. Тут постепенно родится руководство по тому, как разрабатывается проект Голос - -## Categorizing GitHub Issues Using Milestones - -After review of each github issue, the issue should either be marked with a milestone or closed if we decide not to address the issue further. We will have three milestones: - -1. _NextRelease_: Issues which are to be included in the next stable release. Whenever a release is made, this milestone will be renamed with the version number of the new release and a new empty _NextRelease_ milestone will be created. -2. _FutureRelease_: Issues which are planned for some future release. Whenever a release is completed, issues will be selected from this milestone and moved into the new _NextRelease_ milestone. -3. _IdealRelease_: Issues which contain interesting ideas that someone may wish to take on in the future, but will not normally be reviewed for possible inclusion into a near-term release. - -## Workflow for GitHub Issues - -**Create a new branch for each issue using the issue number** and a brief mnemonic description using dashes as word separators (e.g. 500-crypto-api). If the branch is being used for several tightly related issues, select the most appropriate issue and link the other issues to that issue in GitHub. - -When the new branch has been adequately tested it (or if it is not possible to test it on its own), merge it into the _integration_ branch to allow it be tested against other code commits for possible interactions. - -## Creation and Testing of a Release - -The release manager will merge all the branches associated with issues marked with the _NextRelease_ milestone to the master branch to create a stable release of Graphene. The release manager will will use a label to tag each issue after he has merged the associated branch to master. Barring an emergency, all such branches should have been previously tested in the **integration** branch and should be marked as closed. This version will then be tested on the real network prior to making an official announcement of the new release. - -## Assignment of GitHub Issues (Avoiding Duplication of Work) - -Anyone can assign themselves to an unassigned issue. If you wish to work on a issue assigned to someone else, you must first discuss the issue with the currently assigned person before beginning work on it. - -## GitHub Labels - -GitHub labels are very useful for categorizing issues in terms of severity, task difficulty, impact (e.g. causes a hardfork), etc. However, they become less useful as categorizations if new labels with overlapping meanings are created, so please be sure there are no [similar labels](https://github.com/GolosChain/wiki/blob/master/%D0%9B%D0%B5%D0%B9%D0%B1%D0%BB%D1%8B%20%D0%B4%D0%BB%D1%8F%20issue.md) before creating new ones. - -Информация для разрабочиков. -Здесь собрана информация о лейблах для issue, которые мы используем в нашем с вами проекте: - -*** -##Russian description -* bug (#fc2929) - баг в коде, исключение на страницах, падение при запуске тестов; -* enhancement (#84b6eb) - предложения по улучшению, пример улучшения кода; -* important (#5319e7) - то, что нужно сделать обязательно; -* look & feel (#bfdadc) - предложения по улучшению внешнего вида приложения; -* minor (#d4c5f9) - что-то не важное, что можно делать в последнюю очередь; -* question (#cc317c) - вопросы по коду приложения; -* resolved (#aaaaaa) - помечаются закрытые ишью, к которым больше не нужно возвращаться; -* help wanted (#128a0c) - помечаюся ишью, в которых нужна помощь членов команды; -* duplicate (#cccccc) - лейбл для дубликатов других ишью; - -##English description -* bug (# fc2929) - a bug in the code, exceptions on the pages, droped tests at startup; -* enhancement (# 84b6eb) - suggestions for improvement, an example of improving the code; -* important (# 5319e7) - what is needed to make necessarily; -* look & feel (#bfdadc) - proposals to improve the appearance of the application; -* minor (# d4c5f9) - that is not important, what can be done in the least; -* question (# cc317c) - questions about the application code; -* resolved (#aaaaaa) - marked closed issue, which do not need to come back anymore; -* help wanted (# 128a0c) - Marks the issues in which team members need help; -* duplicate (#cccccc) - label for duplicates other issues; diff --git a/golosd/howto/cli_wallet-create-account.md b/golosd/howto/cli_wallet-create-account.md deleted file mode 100644 index c29bb532..00000000 --- a/golosd/howto/cli_wallet-create-account.md +++ /dev/null @@ -1,96 +0,0 @@ -

        Создание нового пользователя, используя cli_wallet

        - -Автор:
        @ropox - -

        Я уже писал тут, как создать пользователя через cli_wallet, но я тогда честно говоря по незнанию переборщил - я тогда ждал пока нода не поднимется и не синхронизируется с блокчейном.

        -

        Поэтому я решил обновить статью. Эта статья вообщем-то повторяет старую, но отличие этой в том, что мы не будем ждать пока нода полностью синхронизируется. Вместо этого мы подключимся кошельком к официальной ноде wss://ws.golos.io или любой другой ноде. Отпадает конфигурирование, можно обойтись меньшим размером оперативки и вообще более слабым компьютером.

        -

        Докер

        -

        Как установить докер я не буду описывать. На своем компьютере (линукс, ubuntu 17) я установил докер из репозитория.

        -

        sudo apt install docker.io

        -

        Теперь как по инструкции от @someguy123.

        -

        Выполнить следующие команды

        -
        git clone https://github.com/Someguy123/golos-docker.git
        -cd golos-docker
        -./run.sh install
        -mkdir data/witness_node_data_dir/blockchain
        -./run.sh start
        -
        -

        Если все было правильно сделано, то вы увидите, что то вроде

        -
        Starting container...
        -golos-seed
        -
        -

        Голос-нода теперь работает, но нам нужен только консольный кошелек - cli_wallet в контейнере. Чтобы “войти” в контейнер выполните следующую команду

        -
        ./run.sh enter
        -
        -

        Подготавливаем кошелек

        -

        Если все нормально, то вы теперь находитесь в контейнере докера. По следующему пути /golos/ находится точка монтирования директории golos-docker/data. Здесь мы сохраним файл с ключами.

        -

        Запустим cli_wallet

        -
        /usr/local/bin/cli_wallet -w /golos/wallet.json -s wss://ws.golos.io
        -
        -

        Где
        - -w /golos/wallet.json - Файл с ключами
        - -s wss://ws.golos.io - Мы подключаемся к офф. ноде

        -

        Кошелек запустится и предложит для начала задать пароль для файла с ключами.

        -
        Please use the set_password method to initialize a new wallet before continuing
        -new >>> 
        -
        -

        Вводим set_password 123456

        -

        Теперь в строке ввода, вместо “New”, стоит “locked >>>”. Разблокируем файл введя пароль unlock 123456, после чего в строке ввода будет написано “unlocked >>>”.

        -

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

        -

        Теперь собственно импортируем приватный, активный ключ.

        -
        import_key 51f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f
        -
        -

        И проверяем сработало ли

        -
        list_my_accounts
        -ropox                    74.368 GOLOS 47303729.658692 GESTS          222.701 GBG
        --------------------------------------------------------------------------
        -TOTAL                    74.368 GOLOS 47303729.658692 GESTS          222.701 GBG
        -
        -

        Создание пользователя

        -

        Ну и собственно к чему мы шли. Проверяем существует ли аккаунт, который мы решили зарегистрировать.

        -
        get_account tolstoy
        -2669058ms th_a       websocket_api.cpp:88          on_message           ] message: {"id":21,"result":[]} 
        -10 assert_exception: Assert Exception
        -!accounts.empty(): Unknown account
        -    {}
        -    th_a  wallet.cpp:396 get_account
        -
        -

        Нету, значит столбим

        -
        create_account ropox tolstoy "{}" true
        -
        -

        Команда выдаст много инфы на экран и в частности четыре публичных ключа. Собственно команда при исполнении сама генерит эти четыре ключа: хозяйский, постинг, активный и мемо и сохраняет их в файле кошелька. Это видно в логе

        -
        2745489ms th_a       wallet.cpp:470                save_wallet_file     ] saving wallet to file /golos/wallet.json
        -2745489ms th_a       wallet.cpp:470                save_wallet_file     ] saving wallet to file /golos/wallet.json
        -2745489ms th_a       wallet.cpp:470                save_wallet_file     ] saving wallet to file /golos/wallet.json
        -2745490ms th_a       wallet.cpp:470                save_wallet_file     ] saving wallet to file /golos/wallet.json
        -
        -

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

        -
        list_my_accounts
        -ropox                    71.368 GOLOS 47303729.658692 GESTS          222.701 GBG
        -tolstoy                   0.000 GOLOS   11492.614025 GESTS            0.000 GBG
        --------------------------------------------------------------------------
        -TOTAL                    71.368 GOLOS 47315222.272717 GESTS          222.701 GBG
        -
        -

        Ну и смотрим список ключей

        -
        list_keys
        -
        -

        Можно их сохранить где нибудь у себя или распечатать. Если сейчас нажать Ctrl-C и ENTER и ввести exit, то мы покинем контейнер. В папочке data лежит вновь созданный wallet.json. Его тоже можно сохранить где нибудь и использовать повторно, если хотите создать нового пользователя или для перевода монет. Не забудьте только пароль - 123456 ))).

        -

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

        -
        ./run.sh stop
        -
        -

        Ключи

        -

        Я лично храню wallet.json, так как им удобно пользоваться, если надо перекинуть монеты с аккаунта на аккаунт и тому подобных дел. Так же я сохранил выхлоп list_keys команды у себя в гугл док. Там мешанина из открытых и приватных ключей. Как узнать, какой ключ, что? Для этого к примеру идем на http://golosd.com/@tolstoy. Прокручиваем до окошка "Authorities" и видим открытые ключи. Копируем постинг ключ и ищем его в списке ключей. Ниже находится приватный ключ.

        -

        Используя постинг ключ можно войти на сайт golos.io и писать комментарий, посты и апвотить. Чтобы сделать перевод потребуется активный ключ.

        -

        Ошибки

        -

        Бывает, что кошелек вылетает с такой ошибкой

        -
        10 assert_exception: Assert Exception
        -!ec: websocket send failed: invalid state
        -    {"msg":"invalid state"}
        -    th_a  websocket.cpp:164 send_message
        -
        -

        Видимо иногда пропадает соединение с нодой и не восстанавливается. Помогает закрыть кошелек (Ctrl-C и Enter) и снова запустить.

        - -
        -По материалам статьи. -Автор @ropox -
        diff --git a/golosd/howto/emission_chart.md b/golosd/howto/emission_chart.md deleted file mode 100644 index e9ca390b..00000000 --- a/golosd/howto/emission_chart.md +++ /dev/null @@ -1,64 +0,0 @@ -# Генерация графика эмиссии - - -Вы можете найти скрипты для построения модели и графика супплая в директории **_programs/util_** - -Расчет производится на основе информации находящейся в вашей текущей сборке (нужно собрать проект) в файле config.hpp - -Для запуска этого скрипта введите: -```bash - ./inflation_model > model.json -``` - -Скрипт в течении пары минут сгенерирует файл _model.json_, который содержит информацию по супплаю на 10 лет. Далее вы можете построить график используя данную модель: -```bash -python3 inflation_plot.py model.json -``` - -Также в файле inflation_plot.py вы можете внести изменения и построить график по модели удобным вам образом. - - -**Заметка #1** У вас в системе должен быть установлен _matplotlib_ для python3. -Пример для macOS: -```bash -brew install homebrew/python/numpy --with-python3 -``` - -```bash -brew install homebrew/python/matplotlib --with-python3 -``` - -**Заметка #2** Если вы хотите изучить файл model.json, то мы рекомендуем вам использовать редактор Sublime Text - -**Что внутри модели** - -```bash -{"rvec":["929159090641","8360617424769","929159090641","8360617424769","197985103985","1780051544865","195077031513","1755693283617","179687790278","1615357001502"],"b":68585000,"s":"24303404786580"} -``` - -rvec показывает общее количество **Голос сатоши** созданные с момента генезиса: - -- Curation rewards -- Vesting rewards balancing curation rewards -- Content rewards -- Vesting rewards balancing content rewards -- Producer rewards -- Vesting rewards balancing producer rewards -- Liquidity rewards -- Vesting rewards balancing liquidity rewards -- PoW rewards -- Vesting rewards balancing PoW rewards - -**b** - это номер **блока** - -**s** - это **общий** суплай - -**Некоторые возможные источники неточностей, направления и расчетные относительные размеры этих эффектов:** -** - -- Missed blocks not modeled (lowers STEEM supply, small) -- Miner queue length very approximately modeled (assumed to go to 100 during the first blocks and then stay there) (may lower or raise STEEM supply, very small) -- Creation / destruction of STEEM used to back SBD not modeled (moves STEEM supply in direction opposite to changes in dollar value of 1 STEEM, large) -- Interest paid to SBD not modeled (raises STEEM supply, medium) -- Lost / forgotten private keys / wallets and deliberate burning of STEEM not modeled (lowers STEEM supply, unknown but likely small) -- Possible bugs or mismatches with implementation (unknown) diff --git a/golosd/howto/generate-keys.md b/golosd/howto/generate-keys.md deleted file mode 100644 index edede799..00000000 --- a/golosd/howto/generate-keys.md +++ /dev/null @@ -1,46 +0,0 @@ -# Генерация ключей - - -См. также статью [Создание пользователя (cli_wallet)](https://wiki.golos.io/3-guides/stati/sozdanie-polzovatelya-ispolzuya-cliwallet.html) - - -В кодовой базе проекта идет инструмент для генерации ключей, которые могут быть использованы для регистрации пользователя в проекте Голос - -После сборки проекта, вы можете найти файл get_dev_key.cpp в директории __/programs/util__ и изучить его. - -Для генерации пар ключей, введите в консоли: - - - -``` -bash -./get_dev_key golosuser active-cryptoonelove owner-cryptoonelove posting-cryptoonelove memo-cryptoonelove othercryptoonelovekey -``` - - - -Выводом будет несколько пар ключей: - -```bash -[{"private_key":"5JDoZLvTu9xSfH7wiFEg8xPwiWa8gCctdAhz5LTTtKjx9sBBaKU","public_key":"GLS4ybS19Ga2dh3zFJAVhQLTie5dmg4UEVbpK3Vu7ThBqUJeath4j"}, -{"private_key":"5JfrHKyz9xh7xwgTJ1AmcSvdGWvGiFhcj16cfsCB6TGtbs3ci9N","public_key":"GLS8XXEaRx855V8jymLgnuAhhvo8WRD4fmUQm9qxsvdq8wxt8Ayu6"}, -{"private_key":"5KJ9b7KzrFfkRtmV1miFsR6SYX5Feok9S19VPUoXjBEZJgJz9uJ","public_key":"GLS6cdxbXENrw9G32L3ZcNj8DHDNEF6LU7cuRGzspuc47keyyheng"}, -{"private_key":"5J9piaqHugUe2Bhzcn4Ht79sthurBEWViqme1tXnTYCsRSKwZYk","public_key":"GLS7QM8d9whh9VzNEqXynrqb7VgPb1MyZsraDD37Cyzw6pqTFDbtQ"}, -{"private_key":"5KN2FYUYb49RDSDpYDvdYJQVBv7xgbyswGUdgKpFqSd79GVkkeh","public_key":"GLS7vpq2yJK3WeNxeFGj4hkPpYzuyxZTpkLHzN1CNLoDyfnFmXiLh"}] -``` - -```javascript -fc::sha256::hash( dev_key_prefix + arg ) -где dev_key_prefix = golosuser -и arg = owner-cryptoonelove | active-cryptoonelove | posting-cryptoonelove | memo-cryptoonelove -``` - -После вы можете зарегистрировать пользователя, используя __./cli_wallet__: - -```javascript -create_account_with_keys creator account_name "json_metadata" owner_public_key active_public_key posting_public_key meme_public_key true -``` -Заметка: для этого вы должны задать пароль для __cli_wallet__ и импортировать туда ключи для вашего __creator__ аккаунта, с которого вы будете регистрировать нового участника проекта Голос. - -Заметка: в __json_metadata__ вы можете записать метаинформацию для аккаунта. -К примеру, все аккаунты, которые созданы на генезисе (со снэпшота стима) получат следующую запись: __created_at: GENESIS__. Аккаунты, которые инвестируют в проект на стадии ICO, получат уникальный для каждого инвестора биткоин адрес, на который он сможет перевести инвестиции, которые затем будут автоматически переправлены на мультисиг адрес команды запуска проекта. diff --git a/golosd/howto/reward-calculation.md b/golosd/howto/reward-calculation.md deleted file mode 100644 index 9a78587b..00000000 --- a/golosd/howto/reward-calculation.md +++ /dev/null @@ -1,76 +0,0 @@ -## Расчет вознаграждения за апвоут \(голосование\) - -Автор: [@ropox](https://golos.io/@ropox) - -## Теория - -Тут небольшое отступление, что бы рассказать немного теории. Что бы было понятнее и для тех, кто не знает должно быть интересно. Кому не интересно, крутите смело в конец статьи. - -У каждого голосующего есть Сила Голоса. Посмотреть ее можно так же в кошельке. - -![](https://images.golos.io/DQmTfU3uajtMFGKWJaboBiLwTfu3SNvK5FWYxTsiecyfkEo/image.png) - -Это своеобразные акции голоса с долгосрочным размещением. Как минимум половина вознаграждения за посты и комментарии выплачивается в Силе Голоса, то бишь акциями. Те кто уже достаточно долго на голосе наверняка знают, что эта Сила Голоса влияет на распределения выплат к постам и на ваши кураторские вознаграждения. - -Ваша СГ внутри блокчейна учитывается в вестинах. - -![](https://images.golos.io/DQmQUEQBcyUNEJx7jqc3YaiKmz5iysPAaXXehtmm6aSPPDY/image.png) - -Как это происходит. Когда кто-то размещает на голосе пост, другие участники голоса голосуют за этот пост, и блокчейн записывает под постом имя проголосовавшего и его количество акций на момент голосования, иначе говоря его уровень Силы Голоса. - -### weight - -Голосующие могут так же выставлять процент Силы Голоса от нуля до 100, так называемый вес апвота или weight по английски. Это тоже учитывается. В такой пропорции будет учитываться ваша Сила Голоса. - -![](https://images.golos.io/DQmVg8ZbNvJupNj4KzAAEE6AJWTV1RzM7Fz5LWfGeAU3g8Y/image.png) - -### voting\_power - -Есть еще один параметр, который влияет на Силу Голоса - энергия голоса. Так бы я перевел voting\_power. С каждым отданным голосом ваша энергия падает. Примерно 40 ваших апвотов снижают voting\_power до ~ 80% и за сутки она успевает восстановится до почти 100 процентов. - -Текущее значение voting\_power можно узнать к примеру на golosd.com/@вашник - -![](https://images.golos.io/DQmd9aDNXogYWgbUMBBuwJuhUhPn8gAW3awgRgFh4WexHTM/image.png) - -То-есть в итоге ваша СГ умножается на weigh / 100 и на voting\_power/100 и в итоге и получаются так называемые reward shares \(англ. акции вознаграждения\), сокращенно. rshares. - -Чем больше этих rshares получает ваш пост относительно других постов, тем больше вознаграждение. Как это происходит. Допустим Петя написал пост "Жить хорошо", а Вася "А хорошо жить еще лучше. И спустя сутки за петин пост проголосовали 100 человек и вложили в его пост 100 акций, а за васин пост проголосовали всего 2 человека, но с большой силой голоса - т. н. киты, вложив к примеру 2500 акций. В сумме у нас получается 2600 акций. Если у нас пул вознаграждения к примеру 260 Золотых, то умножив 260 на 100 и поделив на 2600, мы получим вознаграждение Пети 10 золотых, а у Васи получится 250 золотых. - -Часть вознаграждения распределяется между голосующими за пост. Все так же, аналогично. Если проголосует Вася-Кит за пост с 1000 акциями и Петя-Гальян с одной акцией. То естественно Вася-Кит получит 1000 частей вознаграждения кураторам, а Петя-Гальян за одну акцию получит 1 часть. - -Вот почему так важно наращивать Силу Голоса. Чем она больше, тем выше ваше влияние на распределение наград, и тем выше ваш заработок.[@naminutku](https://golos.io/@naminutku)регулярно публикует отчеты по заработками кураторов. Можно посмотреть сколько возможно получить процентов годовых, вложившись в Силу Голоса и удачно голосуя. В среднем получается 10-20 процентов.**Где еще вы можете получить такие начисления по вкладам или?**\)\) - -## Вычисления - -Ну вот мы и добрались до самих вычислений. Что бы посчитать, нам надо получить сумму выплат за пост в GBG. Это можно сделать, открыв вкладку "Авторские вознаграждения" в кошельке. Как видим шаману было выплачено 59.120 GBG за пост. - -![](https://images.golos.io/DQmREbeheJr21QXy3Y2VaZf2zX4rotqSEs1XDEbx99bDEes/image.png) - -И нам нужны rshares каждого проголосовавшего за данный пост. Для этого можно воспользоваться любым тулом, способным получить техническую информацию о посте. У меня есть свой собственный, я им и воспользуюсь. - -Что бы получить информацию о посте, понадобится имя пользователя и так называемый permlink. permlink можно получить из ссылки на пост в адресной строке браузера. Это последняя часть ссылки после "/" \(без слэша\) - -![](https://images.golos.io/DQmakwwm3cDuJE3LB1C1tVKKxnBVqoAd1VT8ndttXLaDDyy/image.png) - -Теперь переходим на сайт[http://ropox.tools/steemjs/api/database\_api/get\_content](http://ropox.tools/steemjs/api/database_api/get_content)и вводим имя автора, permlink и нажимаем execute. В нижней части экрана появится техническая информация о посте. - -![](https://images.golos.io/DQmVQU5T1u7rqPfeqzKifabE8HJKsci4Sc28fz51JdBeiqZ/image.png) - -Пролистав в низ, до "active\_votes" вы увидите список проголосовавших и их rshares - -![](https://images.golos.io/DQmTWBxQVDFUbQ35tBMbMeGDxSPc28FM3envGp4jY5hwZbd/image.png) - -Надо сложить все rshares. Просуммировав мы можем уже посчитать размер вознаграждения каждому проголосовавшему. Для этого умножаем размер выплат - 59.120 на rshares проголосовавшего и делим на сумму всех rshares. - -В своем скрипте я исключал тех, кто ставил флаги. Их rshares записаны со знаком минус. И если сумма выплат получается меньше 0.001 GBG, то я увеличиваю принудительно сумму выплат до 0.001, что бы всем перепало, даже тем, у кого небольшая сила голоса. - -Вот собственно и все - - - -> По материалам [статьи](https://golos.io/ru--golos/@ropox/kak-poschitat-vruchnuyu-summu-otkatov-golosuyushim). -> -> Автор [@ropox](https://golos.io/@ropox) - - - diff --git a/golosd/howto/testing.md b/golosd/howto/testing.md deleted file mode 100644 index 1b8e3494..00000000 --- a/golosd/howto/testing.md +++ /dev/null @@ -1,112 +0,0 @@ -# Тестирование - - -- [Что такое TEST CASE, CHECK LIST, CHEET SHEET](http://bugscatcher.net/archives/2480) - -###### Обычно сценарий состоит из следующих пунктов: - * Предусловие - * Описание последовательности действий пользователя - * Ожидаемый результат (то, как система должна себя вести) - -###### Сценарий тестирования клиента: -1. Регистрация - * Через фейсбук - * Через ВК -2. Постинг - * Написать заголовок и тело поста - * Добавить теги - * Отметить: проголосовать за свой пост - * Отметить: получить 100% в Силе Голоса - * Апвоут пост - * Показать проголосовавших - * Отображение выплат - * Отметить пост флагом -3. Фолловинг - * Зафолловить автора - * Отображение в ленте постов авторов -4. Репост - * Репост поста - * Отображение в ленте -5. Комментирование - * Добавить комментарий - * Апвоут комментария - * Комментарий комментария -6. Репост в соцсети - * Репост в твиттер - * Репост в фейсбук -7. Кошелек - * Перевод Голоса в Силу Голоса себе - * Перевод Голоса в Силу Голоса другому - * Пауэр даун - * Перевод GBG в Стимы -8. Разрешения - * Показать ключи -9. Пароль - * Смена пароля - * Войти под новым паролем -10. Возврат украденного аккаунта -11. Поиск по сайту -12. Поиск по тегам - * Русские - * Английские -13. Голосование за делегатов -14. Покупка на ICO -15. Купить Голоса - -###### Сценарий тестирования блокчейна и cli_wallet: - -1. Проверить логику после хардфорков -2. Проверить - * Создание аккаунтов - * Старт сети - * Присоединение делегатов - * Перевод голосов - * Перевод голосов в Силу Голоса - * Доставление ценовых фидов - * Выплату кураторам - * Голосование за делегатов - * Вывод из power, power down -3. Протестировать 3 временных параметра выплат: - * STEEMIT_CASHOUT_WINDOW_SECONDS - * STEEMIT_SECOND_CASHOUT_WINDOW - * STEEMIT_MAX_CASHOUT_WINDOW_SECONDS -4. Комиссия за создание аккаунта (влияние делегатов на этот показатель) -5. Восстановление аккаунтов. Протестировать параметры: - * STEEMIT_OWNER_AUTH_RECOVERY_PERIOD - * STEEMIT_ACCOUNT_RECOVERY_REQUEST_EXPIRATION_PERIOD - * STEEMIT_OWNER_UPDATE_LIMIT -6. Проверка вестинга (до и после старта) -7. Проверить попадание делегата в очередь в результате голосования - * STEEMIT_START_MINER_VOTING_BLOCK - * Проверить формирование пула витнес+майнер+случайный на раунд -8. Тестирование STEEMIT_HARDFORK_REQUIRED_WITNESSES -9. Тестирование изменения процентной ставки -10. Протестировать параметры ликвидности -11. STEEMIT_APR_PERCENT_MULTIPLY_PER_BLOCK -12. Параметры суплая -13. Работа витнесов (поставка данных) -14. STEEMIT_BLOCKCHAIN_PRECISION -15. Протестировать распределение денег на аккаунты генезиса - -##### Конфигурационный файл: Первая итерация -/ - -STEEMIT_GENESIS_TIME | (fc::time_point_sec(1475332220)) ------------------------|---------------------------------- -STEEMIT_MINING_TIME | (fc::time_point_sec(1475332300)) -STEEMIT_CASHOUT_WINDOW_SECONDS | (60*60) /// 1 hr -STEEMIT_SECOND_CASHOUT_WINDOW | (60*60*3) /// 3 hours -STEEMIT_MAX_CASHOUT_WINDOW_SECONDS | (60*60*6) /// 6 hours -STEEMIT_START_VESTING_BLOCK | (STEEMIT_BLOCKS_PER_DAY/4) -STEEMIT_START_MINER_VOTING_BLOCK | (STEEMIT_BLOCKS_PER_DAY/3) -STEEMIT_FIRST_CASHOUT_TIME | (fc::time_point_sec(1475346620)) -STEEMIT_INIT_MINER_NAME | "cyberfounder" -STEEMIT_NUM_INIT_MINERS | 1 -STEEMIT_MAX_VOTED_WITNESSES | 5 -STEEMIT_MAX_MINER_WITNESSES | 1 -STEEMIT_MAX_RUNNER_WITNESSES | 1 -STEEMIT_HARDFORK_REQUIRED_WITNESSES | 2 -STEEMIT_VESTING_WITHDRAW_INTERVALS | 3 -STEEMIT_VESTING_WITHDRAW_INTERVAL_SECONDS | (60*60) -STEEMIT_MIN_PAYOUT_SBD | (asset(1,SBD_SYMBOL)) -STEEMIT_INIT_SUPPLY | int64_t((STEEMIT_BLOCKS_PER_DAY*1/0.03 - STEEMIT_BLOCKS_PER_DAY*1)*1000) diff --git a/golosd/howto/testnet1.md b/golosd/howto/testnet1.md deleted file mode 100644 index 38a5d178..00000000 --- a/golosd/howto/testnet1.md +++ /dev/null @@ -1,197 +0,0 @@ -# Запуск тестнета - -#### Как запустить тестовую сеть - -> Пошаговая инструкция для запуска частной тестовой сети. Эта инструкция предполагает, что вы уже начали работать с ПО. -> -> См. также статью [Запуск testnet Golos](golosd/howto/testnet2.md) - -### Компиляция для запуска тестовой сети - -Тестовая сеть настраивается несколько иначе, чем реальная сеть. Вам придется настроить cmake для создания источника для тестовой сети: - -cmake -DBUILD\_STEEM\_TESTNET=ON . - -## -- BUILD\_STEEM\_TESTNET: ON - --- Конфигурация для тестовой сети - -## -- Finished fc module configuration... - -``` - Конфигурация для тестовой сети -``` - --- Configuring done --- Generating done --- Build files have been written to: ... - -make - -### Конфигурация Steem Daemon - -Сначала запустите процесс steemd для генерации файла config.ini и распечатайте приватный ключ, сгенеренный по умолчанию. - -cd programs/steemd - -## ./steemd -d testnet - -``` - Запуск тестовой сети -``` - ---- - -initminer public key: TEST6LLegbAgLAy28EHrffBVuANFWcFgmqRMW13wBmTExqFE9SCkg4 -initminer private key: 5JNHfZYKGaomSFvd4NUdQ9qMcEAC43kujbfjueTHpVapX1Kzq2n - -## chain id: 18dcf0a285365fc58b71f18b3d3fec954aa0c141c44e4e5cb4cf777b9eab274e - -Отредактируйте файл testnet/config.ini и настройте эти ноды свидетелей на производство блоков, используя приватный ключ, указанный выше. - -# имя ноды свидетеля, управляемой данным узлом \(например, initminer \) - -witness = "initminer" - -# WIF приватный ключ \(можете указать несколько раз\) - -private-key = 5JNHfZYKGaomSFvd4NUdQ9qMcEAC43kujbfjueTHpVapX1Kzq2n - -# Конечная точка для прослушивания для P2P ноды - -p2p-endpoint = 0.0.0.0:3333 - -# Конечная точка для прослушивания для RPC - -rpc-endpoint = 127.0.0.1:9876 - -Запуск ноды свидетеля -После конфигурации можете запустить ноду свидетеля следующим образом: - -./steemd -d testnet --enable-stale-production - -В этом время вы должны увидеть на экране следующее: - -.... - 2745098ms th\_a witness.cpp:212 block\_production\_loo \] Generated block \#1 with timestamp 2016-03-28T22:45:45 at time 2016-03-28T22:45:45 by initminer - 2747995ms th\_a witness.cpp:212 block\_production\_loo \] Generated block \#2 with timestamp 2016-03-28T22:45:48 at time 2016-03-28T22:45:48 by initminer - 2750994ms th\_a witness.cpp:212 block\_production\_loo \] Generated block \#3 with timestamp 2016-03-28T22:45:51 at time 2016-03-28T22:45:51 by initminer - .... -Запуск CLI кошелька -Первым шагом следует создать новый кошелек. Обратите внимание, что нода свидетеля должна быть запущена на том же компьютере. - -cd programs/cli\_wallet -./cli\_wallet --server-rpc-endpoint="ws://127.0.0.1:9876" -new >>> set\_password "testpassword" -locked >>> unlock "testpassword" -unlocked >>> list\_my\_accounts -\[\] -unlocked >>> - -До запуска команд требуется импортировать приватный ключ, который контролирует учетную запись initminer \(ключ, который был распечатан в начале\). - -unlocked >>> import\_key 5JNHfZYKGaomSFvd4NUdQ9qMcEAC43kujbfjueTHpVapX1Kzq2n -true - -unlocked >>> list\_keys -\[\[ - "TST6LLegbAgLAy28EHrffBVuANFWcFgmqRMW13wBmTExqFE9SCkg4", - "5JNHfZYKGaomSFvd4NUdQ9qMcEAC43kujbfjueTHpVapX1Kzq2n" - \] -\] - -unlocked >>> list\_my\_accounts - -## initminer 17.000 TESTS 1.000000 VESTS 0.000 TBD - -TOTAL 17.000 TESTS 1.000000 VESTS 0.000 TBD - -Сейчас требуется проделать то же самое для всех учетных записей. После этого можно создавать учетные записи для тестирования - -unlocked >>> create\_account "initminer" "scott" "" true -{ - "ref\_block\_num": 3673, - "ref\_block\_prefix": 74705714, - "expiration": "2016-02-16T21:54:04", - "operations": \[\[ - "account\_create",{ - "fee": "0.000 TESTS", - "creator": "initminer", - "new\_account\_name": "scott", - "owner": { - "weight\_threshold": 1, - "account\_auths": \[\], - "key\_auths": \[\[ - "STM5Tqg19fydUJpheNLtsanWQi8AYdcK8FiWr8W1PdeUfmFQSSjAo", - 1 - \] - \] - }, - "active": { - "weight\_threshold": 1, - "account\_auths": \[\], - "key\_auths": \[\[ - "STM7Rc77FhVoEU2TDcJiRv9fDXgZUon8vAtPPsAXyxaHTWw7wLtWD", - 1 - \] - \] - }, - "memo\_key": "STM5S9zfoMvfgenkGzwKLrKdeTrJRQnTJLAX9N4iXFVurEEVDKkkT", - "json\_metadata": "" - } - \] - \], - "extensions": \[\], - "signatures": \[ - "1f552f946600c4244231da804ba24be4c3e0fefdfc5ce61faa5528af775b32fa5f676a978323aef679b13f5c414d5bbed08fc9bfa5ae11ec5c1f8fe490a0a20829" - \], - "transaction\_id": "b9aedb9a0d3f66f4588836bf307246c3b3e53a3f", - "block\_num": 3674, - "transaction\_num": 0 -} - -unlocked >>> list\_my\_accounts - -initminer 49.000 TESTS 1.000000 VESTS 0.000 TBD - -## scott 0.000 TESTS 0.000000 VESTS 0.000 TBD - -TOTAL 49.000 TESTS 1.000000 VESTS 0.000 TBD - -Для проведения транзакций требуется отложенные TEST: - -unlocked >>> transfer\_to\_vesting "initminer" "scott" "1.000 TESTS" true -{ - "ref\_block\_num": 367, - "ref\_block\_prefix": 697512891, - "expiration": "2016-03-29T17:32:30", - "operations": \[\[ - "transfer\_to\_vesting",{ - "from": "initminer", - "to": "scott", - "amount": "1.000 TESTS" - } - \] - \], - "extensions": \[\], - "signatures": \[ - "1f5950f65c93f369beee1637e5608eac50e7e2753311c69a3085f1acf4c2bebc215bffa6b6bd4c2d6455a540ee371c582f4d5ae707ec24354990e075051003756c" - \], - "transaction\_id": "c29efe38e4a67d40e877a85c0caf6acdac4ce758" - "block\_num": 368, - "transaction\_num": 0 -} - -unlocked >>> list\_my\_accounts -initminer 264.000 TESTS 1.000000 VESTS 0.000 TBD - -## scott 0.000 TESTS 1.000000 VESTS 0.000 TBD - -TOTAL 264.000 TESTS 2.000000 VESTS 0.000 TBD - -Для получения полного списка команд используйте команду «помощи» - -Все операции кошелька будут заблокированы до тех пор, пока операция не будет включена в блокчейн или не появится сообщение об ошибке. Это займет в среднем около 1,5 секунды, но не более 6 секунд, в случае нормальной работы сети. - -В результате операции кошелька содержат номер блока транзакции, подтвержденной блокчейн-системой. - diff --git a/golosd/howto/testnet2.md b/golosd/howto/testnet2.md deleted file mode 100644 index f9e9c12d..00000000 --- a/golosd/howto/testnet2.md +++ /dev/null @@ -1,208 +0,0 @@ -

        Запуск тестнета Голос

        - -Автор: @ropox - -

        Зачем требуется тестнет

        - -

        Порой для писателей скриптов, ботов для голоса требуется отладить работу программ в тишине и спокойствии и в контролируемой среде. Не хочется, что бы бот к примеру перевел внезапно 10000 голосов неизвестно кому из-за глупой ошибки. Как это случилось однажды с доброботом. Опять же для регрессионных тестов, нужна возможность повторения сценариев с одинаковыми исходными данными, чтобы получить повторяемые, ожидаемые результаты. Ну и конечно тестирование ХФ, новой версии сети голоса. У нас сейчас актуальная версия сети 0.16.4, а новая версия будет 0.17.0. Если кто-то захочет протестировать новую версию, подключившись к реальной сети, то возможно нода с “неправильной” версией будет “саботировать” сеть.

        -

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

        -

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

        -

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

        -

        Сборка образ докера

        -

        В официальном репозитории golos уже есть готовые файлы для docker, и предпочтительно использовать их, чтобы не городить свои скрипты для компиляции, бороться с зависимостями. Все для вас сделает docker. Как работать с докером я расписывать сильно не буду. Инструкций полно в интернете.

        -

        Подготовка исходников

        -

        Для начала скачаем исходники golos. Для этого воспользуемся git-ом.

        -
        $ git clone https://github.com/GolosChain/golos.git
        -
        -Клонирование в «golos»…
        -remote: Counting objects: 22425, done.
        -remote: Compressing objects: 100% (150/150), done.
        -remote: Total 22425 (delta 132), reused 177 (delta 76), pack-reused 22152
        -Получение объектов: 100% (22425/22425), 13.47 MiB | 4.58 MiB/s, готово.
        -Определение изменений: 100% (15314/15314), готово.
        -
        -

        У нас создастся папка golos с исходниками. Перейдем в нее и последующие комманды будет запускать в ней.

        -

        Нам нужно будет переключить на нужную нам ветку. В настоящий момент меня интересует версия 0.17.0.

        -

        -

        Как видно на скриншоте, есть branch под названием golos-v0.17.0. Вот на нее нам и надо переключиться. Для этого в корне папки с исходниками выполним следующую команду

        -
        $ git checkout golos-v0.17.0
        -Ветка golos-v0.17.0 отслеживает внешнюю ветку golos-v0.17.0 из origin.
        -Переключено на новую ветку «golos-v0.17.0»
        -
        -

        И теперь нам надо обновить локальные файлы до версий в репозитории на гитхабе

        -
        $ git submodule update --init --recursive
        -Подмодуль «libraries/chainbase» (https://github.com/GolosChain/chainbase.git) зарегистрирован по пути «libraries/chainbase»
        -Подмодуль «libraries/fc» (https://github.com/GolosChain/fc.git) зарегистрирован по пути «libraries/fc»
        -Подмодуль «libraries/libcds» (https://github.com/khizmax/libcds.git) зарегистрирован по пути «libraries/libcds»
        -Клонирование в «/hom...
        -
        -

        Теперь можно поменять нужные нам для теста параметры. К примеру я хочу тестировать скрипт, который должен запускаться после понижения силы голоса. Чтобы не ждать неделями, я сокращу интервал вывода СГ до 10 минут. Для этого открываю файл с настройками сети в редакторе.

        -
        $ nano libraries/protocol/include/steemit/protocol/config.hpp
        -
        -

        И ищу переменные со словам withdraw и почти сразу нахожу нужные мне.
        -

        -

        Меня интересует конкретно вот эта строка

        -
        #define STEEMIT_VESTING_WITHDRAW_INTERVAL_SECONDS (60*60*24*7) // 1 week per interval
        -
        -

        Я исправляю, чтобы интервал был 10 минут и сохраняю файл

        -
        #define STEEMIT_VESTING_WITHDRAW_INTERVAL_SECONDS (60*10) // 1 week per interval
        -
        -

        Сборка образа

        -

        В папке docker лежит файл для докера с инструкциями по сборке образа.

        -
        $ ls docker/*
        -docker/Dockerfile-testnet
        -
        -

        Все, что нам требуется, это запустить сборку

        -
        $ docker build . -f docker/Dockerfile-testnet -t testnet-17
        -
        -

        Спустя какое то время мы имеем готовый образ докера

        -

        -

        Запуск

        -

        Для начального запуска воспользуемся командой run докера

        -
        $ docker run -it -p 127.0.0.1:9090:8090 -d --name testnet -t testnet-17
        -
        -

        Собственно все понятно. -it включает интерактивность. “-p 127.0.0.1:9090:8090” включает переадресацию порта 8090 изнутри контейнера наружу, на порт 9090. Это дает возможность подключаться скриптами к тестнету используя URL вида ws://localhost:9090. Опция -d запускает контейнер отключенным от консоли в фоне. --name testnet задет простое имя контейнеру. -t testnet-17 задает имя образа, который будет использоваться для создания контейнера.

        -

        Если все нормально, после запуска контейнера докер распечатает ID контейнера и вернет управление в консоль.

        -

        Как я писал выше, в тестнете уже созданы пара тестовых пользователей. Самый важный cyberfounder. Естественно, чтобы можно было этим аккаунтом пользоваться, нужны ключи. Приватный и публичный. При запуске, golos распечатывает пару ключей в самом начале. Посмотреть их можно распечатав лог голоса.

        -
        $ docker logs testnet
        -
        -

        -
        initminer public key: GLS58g5rWYS3XFTuGDSxLVwiBiPLoAyCZgn6aB9Ueh8Hj5qwQA3r6
        -initminer private key: 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS
        -chain id: 5876894a41e6361bde2e73278f07340f2eb8b41c2facd29099de9deef6cdb679
        -blockchain version: 0.17.0
        -
        -

        Конфигурационный файл

        -

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

        -

        Сначала зайдем в образ

        -
        $ docker exec -it testnet bash
        -
        -

        Конфигурационный файл config.ini лежит в папке /etc/golosd.

        -
        vi /etc/golosd/config.ini
        -
        -

        Изменим следующие параметры

        -
        witness = "cyberfounder"
        -private-key = 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS
        -enable-stale-production = true
        -required-participation = 0
        -
        -

        После чего перезапускаем контейнер

        -
        $ docker stop testnet
        -$ docker start testnet
        -
        -

        И видим, что сеть заработала и cyberfounder начал генерировать блоки

        -
        $ docker logs testnet
        -
        -

        -

        Дождемся 17-го хардфорка, после чего можно пользоваться тестнетом

        -
        1551001ms th_a       database.cpp:4890             apply_hardfork       ] HARDFORK 17 at block 36
        -1551002ms th_a       witness.cpp:205               block_production_loo ] Generated block #36 with timestamp 2017-07-29T15:25:51 at time 2017-07-29T15:25:51 by cyberfounder
        -
        -

        Запускаем cli_wallet, задаем пароль, и импортируем приватный ключ cyberfounder аккаунта

        -
        $ docker exec -it testnet cli_wallet
        -
        -Please use the set_password method to initialize a new wallet before continuing
        -new >>> set_password 123
        -set_password 123
        -null
        -locked >>> unlock 123
        -unlock 123
        -null
        -unlocked >>> import_key 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS
        -import_key 5JVFFWRLwz6JoP9kguuRFfytToGU6cLgBVTL9t6NB3D3BQLbUBS
        -2152613ms th_a       wallet.cpp:534                save_wallet_file     ] saving wallet to file wallet.json
        -true
        -unlocked >>> 
        -
        -
        -
        -

        На аккаунте cyberfounder есть уже некая сумма голосов

        -
        unlocked >>> list_account_balances cyberfounder
        -
        -[
        -  "43306208.000 GOLOS"
        -]
        -
        -

        Можно создать нового пользователя и перевести ему GOLOS

        -
        unlocked >>> create_account cyberfounder ropox "{}" true
        -unlocked >>> transfer cyberfounder ropox "200000.000 GOLOS" "для тестов" true
        -{
        -  "ref_block_num": 338,
        -  "ref_block_prefix": 853465515,
        -  "expiration": "2017-07-29T15:41:27",
        -  "operations": [[
        -      "transfer",{
        -        "from": "cyberfounder",
        -        "to": "ropox",
        -        "amount": "200000.000 GOLOS",
        -        "memo": "для тестов"
        -      }
        -    ]
        -  ],
        -  "extensions": [],
        -  "signatures": [
        -    "20491f45c3f3f8d67f3a5c62f934c7c22312ddf392edde2f78a9962634a0ed7b4e4d2f6428282e0d0837893013c04e9e5e0057974c43a490b4abb4416091d5a18b"
        -  ],
        -  "transaction_id": "7d155661801e3b5a450d5c1f97378ee5a94a54b6",
        -  "block_num": 339,
        -  "transaction_num": 0
        -}
        -
        -
        -
        -

        Ну и вишенка на торт, создаем свой, персональный токен

        -
        unlocked >>> create_asset cyberfounder ROPOX 3 {"description": "Золото царя Гороха", "core_exchange_rate":{"base":"1.000 ROPOX","quote":"1.000 GOLOS"}} null true
        
        -{
        -  "ref_block_num": 380,
        -  "ref_block_prefix": 3346277100,
        -  "expiration": "2017-07-29T15:43:33",
        -  "operations": [[
        -      "asset_create",{
        -        "issuer": "cyberfounder",
        -        "asset_name": "ROPOX",
        -        "precision": 3,
        -        "common_options": {
        -          "max_supply": "1000000000000000",
        -          "market_fee_percent": 0,
        -          "max_market_fee": "1000000000000000",
        -          "issuer_permissions": 79,
        -          "flags": 0,
        -          "core_exchange_rate": {
        -            "base": "1.000 ROPOX",
        -            "quote": "1.000 GOLOS"
        -          },
        -          "whitelist_authorities": [],
        -          "blacklist_authorities": [],
        -          "whitelist_markets": [],
        -          "blacklist_markets": [],
        -          "description": "Золото царя Гороха",
        -          "extensions": []
        -        },
        -        "is_prediction_market": false,
        -        "extensions": []
        -      }
        -    ]
        -  ],
        -  "extensions": [],
        -  "signatures": [
        -    "20225a9ce260f8434f3e83cf8e48c4e16557f38e5540fa9a9a53126c685b70f16b3619a95b50c7f7a611e9c26261fd669c4ad8496cdc45d95ea9d3ef12c5cc5e33"
        -  ]
        -}
        -
        -

        Инстанциируем немного монет и переводим их тестовому пользователю

        -
        unlocked >>> issue_asset cyberfounder "1000.000 ROPOX" "Акции" true
        -unlocked >>> transfer cyberfounder ropox "20.000 ROPOX" "Подарок" true
        -unlocked >>> list_account_balances ropox
        -[
        -  "0.000 GBG",
        -  "200000.000 GOLOS",
        -  "20.000 ROPOX"
        -]
        -
        -

        Удачных вам экспериментов!

        - - -
        -По материалам статьи. -Автор @ropox -
        diff --git a/golosd/howto/transactions-monitoring.md b/golosd/howto/transactions-monitoring.md deleted file mode 100644 index 737f3d0f..00000000 --- a/golosd/howto/transactions-monitoring.md +++ /dev/null @@ -1,471 +0,0 @@ -# Мониторинг счета - - - -#### Как мониторить учетную запись -Пошаговая инструкция для мониторинга учетной записи - -В данном документе объяснено, как следует мониторить учетные записи и направлять средства на определённую учетную запись, используя Python или JavaScript. Это также полезное введение в тему блокчейна, используемого в Голосе. - -#### Блокчейн Голоса -Используемый в Голосе блокчейн является аналогом блокчейна Стима, и очень похож на технологию графена, используемую в других блокчейнах. Блокчейн состоит из хешируемых блоков, в которые записывается несколько транзакций. В отличии от блокчейна биткоина каждая транзакция в данном случае может выполнять определённые задачи (трансфер, голосование, комментарии, перевод и прочее). - -В этом документе излагается, как следует читать и интерпретировать операции трансфера в случае запросов от пользователей на перевод средств. Для того, чтобы различать пользователей, используются memos, которые присваиваются каждому трансферу. Обратите внимание, что данные memos хранятся в блокчейне в виде обычного текста. - -##### Операции трансфера - -Операции трансфера выглядят следующим образом: - - { - "from": "hello", - "to": "world", - "amount": "10.000 STEEM", - "memo": "mymemo" - } - -В данном случае from и to используются для идентификации отправителя и получателя. Переменная amount - строка с пробелами, содержащая количество средств и символ ГОЛОС. Как указывалось выше, пользователь может присоединить к транзакции memo, которое будет сохранено в блокчейн в виде обычного текста. - -##### Операции - -Каждая операция имеет идентификатор (например, transfer), определённые данные, специфические для данной операции, и группируется в массив операций: - - -``` - -[ - [OperationType, {operation_data}], - [OperationType, {operation_data}], - [OperationType, {operation_data}], -] - -``` - - - Несколько операций могут быть сгруппированы вместе. При этом все они имеют форму: OperationType, {data}]: -""" -[ - ["transfer", { - "from": "hello", - "to": "world", - "amount": "10.000 STEEM", - "memo": "mymemo" - } - ], - ["transfer", { - "from": "world", - "to": "trade", - "amount": "15.000 STEEM", - "memo": "Gift!" - } - ] -] -""" - -Набор операций выполняется в заданном порядке. Принимая во внимание тот факт, что в Голосе заложен последовательный порядок выполнения операций, все операции выполняются автоматически, согласно коду. - -##### Транзакции - -Набор операций записывается в транзакцию, в которой имеются все необходимые подписи задействованных в транзакции учётных записей, срок окончания действия и параметры необходимые для алгоритма консенсуса TaPOS/DPOS. -""" -[ -{"ref_block_num": 29906, - "ref_block_prefix": 1137201336, - "expiration": "2016-03-30T07:15:00", - "operations": [[ - "transfer",{ - "from": "hello", - "to": "world", - "amount": "10.000 STEEM", - "memo": "mymemo" - } - ] - ], - "extensions": [], - "signatures": ["20326......"] - } -] -""" -##### Блок - -Несколько транзакций от разных источников далее группируются в блок производителями блоков (например, майнерами по алгоритму доказательства работы или делегатами). Блок имеет обычные для блокчейн параметры, такие как корень дерева Меркель, хэш предыдущего блока и транзакции. -""" -{ - "previous": "000274d2b850c8433f4c908a12cc3d33e69a9191", - "timestamp": "2016-03-30T07:14:33", - "witness": "batel", - "transaction_merkle_root": "f55d5d65e27b80306c8e33791eb2b24f58a94839", - "extensions": [], - "witness_signature": "203b5ae231c....", - "transactions": [{ - "ref_block_num": 29906, - "ref_block_prefix": 1137201336, - "expiration": "2016-03-30T07:15:00", - "operations": [[ - "transfer",{ - "from": "hello", - "to": "world", - "amount": "10.000 STEEM", - "memo": "mymemo" - } - ] - ], - "extensions": [], - "signatures": [ - "20326d2fe6e6ba..." - ] - } - ], - "block_id": "000274d3399c50585c47036a7d62fd6d8c5b30ad", - "signing_key": "STM767UyP27Tuak3MwJxfNcF8JH1CM2YMxtCAZoz8A5S8VZKQfZ8p", - "transaction_ids": [ - "64d45b5497252395e38ed23344575b5253b257c3" - ] -} -""" -Использование операции get_block возвращает идентификаторы ids транзакций (то есть хэши подписанных отправителем транзакций), по которым можно идентифицировать уникальным образом транзакцию и соответственно набор операций, содержащийся в ней. - -##### Мониторинг сбережений - -Разобравшись с блокчейн Голоса, можно приступать к мониторингу сбережений - -##### Запуск ноды (узла) - -Во-первых, запускать полную ноду требуется в ситуации, когда есть доверие к аппаратному обеспечению -""" - ./programs/steemd/steemd --rpc-endpoint=127.0.0.1:8092 - -Открыв конечную точку RPC, можно настроить связь с нодой посредством операций RPC-JSON - -Запрос get_config вернёт конфигурацию блокчейна с данными об интервалах блоков в секундах. Запрос get_dynamic_global_properties вернёт данные с текущим номером головного блока и номером последнего блока, который не может быть изменён. Текущий блок - это последний блок, который был произведён сетью и подтверждён производителем блока. Последний блок, который не может быть изменен, - это блок, который подтверждён большинством майнеров и соответственно не может быть изменён без хард форка. Каждый блок более старший , чем последний блок, который может быть ещё отозван, эквивалентен точке проверки в биткоине. В начале за головным Блоком находится 30-50 блоков. После 30 первых дней после запуска сети за головням находится около 15 блоков. - -##### Обработка данных блока - -Поскольку содержание блока не зашифровано, для мониторинга учетной записи требуется только обработать содержание каждого блока. - - -#### Пример - -Ниже приведён пример для мониторинга учетной записи. - -##### Python -Эта библиотека доступна по адресу https://github.com/xeroc/python-steem - -""" - from steemrpc import SteemRPC - from pprint import pprint - import time -""" -Параметры для установки соединения с steemd daemon. -Запускайте steemd daemon с rpc-endpoint: - - ./programs/steemd/steemd --rpc-endpoint=127.0.0.1:8092 - -Это откроет порт RPC (на 8092). В настоящий момент аутентификация не работает, поэтому рекомендуем ограничить доступ к локальному хостингу. Позже будет возможна аутентификация посредством username, password. - - """ - rpc = SteemRPC("localhost", 8092, "", "") - - """ - -Последний блок, который вы обработали. Обработка будет продолжена с 'last_block + 1` - """ - last_block = 160900 - - """ - -Указывайте учетную запись для мониторинга - """ - watch_account = "world" - - - def process_block(block, blockid): - """ - -Этот запрос обрабатывает блок, который может содержать множество транзакций - - :param Object block: block data - :param number blockid: block number - """ - if "transactions" in block: - for tx in block["transactions"]: - #: Выбор операций - for opObj in tx["operations"]: - #:Каждая операция - это массив данных в виде - #: [type, {data}] - opType = opObj[0] - op = opObj[1] - - # в данном случае обрабатываются только трансферы - if opType == "transfer": - process_transfer(op, block, blockid) - - - def process_transfer(op, block, blockid): - """ - -В данном случае обрабатываются действительные операции трансфера - """ - if op["to"] == watch_account: - print( - "%d | %s | %s -> %s: %s -- %s" % ( - blockid, - block["timestamp"], - op["from"], - op["to"], - op["amount"], - op["memo"] - ) - ) - if __name__ == '__main__': -""" - -Давайте узнаем, как часто генерятся блоки -""" - config = rpc.get_config() - block_interval = config["STEEMIT_BLOCK_INTERVAL"] -""" - -Бесконечное зацикливание -""" - while True: -""" -Получите свойства цепочки для идентификации головного/последнего возможного к отмене блока -""" - props = rpc.get_dynamic_global_properties() -""" -Получайте номер блока. Здесь на выбор имеется - * head_block_number: последний блок - * last_irreversible_block_num: блок, который подтверждён 2/3 всех производителей блоков, и потому безотзывной. - -Предлагается использовать последнюю переменную -""" - block_number = props['last_irreversible_block_num'] -""" - -Пропустите в цикле все блоки, которые возникли после блока, определенного выше -""" - while (block_number - last_block) > 0: - last_block += 1 -""" -Получите полный блок -""" - block = rpc.get_block(last_block) -""" -Обработайте блок -""" - process_block(block, last_block) -""" -Пропустите один блок -""" - time.sleep(block_interval) -""" - -###### NodeJS -""" - var rpc = require('node-json-rpc'); - - var last_block = 160900; - var watch_account = "world"; - var options = { - port: 8092, - host: '127.0.0.1', - path: '/rpc', - strict: false - }; - - - var callrpc = function(name, params, cb) { - client.call( - {"jsonrpc": "2.0", - "method": name, - "params": params, - "id": 0}, - function(err, res) { - if (err) { cb(err, null) } - else { cb(null, res["result"]) } - } - ); - } - - var process_transfer = function(op, block, blockid) { - console.log(block); - if (op["to"] == watch_account) { - console.log(blockid + " | " + - block["timestamp"] + " | "+ - op["from"] + " -> " + - op["to"] + ": " + - op["amount"] + " -- " + - op["memo"] - ); - } - } - - var process_block = function(block, blockid) { - console.log(blockid); - console.log(block["transactions"]); - for (var tx in block["transactions"]) { - for (var opObj in tx["operations"]) { - var opType = opObj[0]; - var op = opObj[1]; - - console.log(op); - - if (opType == "transfer") { - process_transfer(op, block, blockid); - } - } - } - } - - var start_loop = function() { - callrpc("get_dynamic_global_properties", [], function(err, props) { - var block_number = props["last_irreversible_block_num"]; - while ((block_number - last_block) > 0) { - last_block += 1 - callrpc("get_block", [last_block], function(err, block) { - process_block(block, last_block); - }); - } - }); - } - - - var client = new rpc.Client(options); - - var block_interval; - - callrpc("get_config", [], - function (err, config) { - if (err) { console.log(err); } - else { - block_interval = config["STEEMIT_BLOCK_INTERVAL"] - start_loop(); - } - } - ) - - if __name__ == '__main__': -""" -Давайте выясним, как часто генерятся блоки -""" - config = rpc.get_config() - block_interval = config["STEEMIT_BLOCK_INTERVAL"] -""" -Бесконечное зацикливание -""" - while True: -""" -Получите свойства цепочки для идентификации головного/последнего возможного к отмене блока -""" - props = rpc.get_dynamic_global_properties() -""" -Получайте номер блока. Здесь на выбор имеется -* head_block_number: последний блок -* last_irreversible_block_num: блок, который подтверждён 2/3 всех производителей блоков, и потому безотзывной -Предлагается использовать последнюю переменную -""" - block_number = props['last_irreversible_block_num'] -""" - -Пропустите в цикле все блоки, которые возникли после блока, определенного выше -""" - while (block_number - last_block) > 0: - last_block += 1 -""" - Получите полный блок -""" - block = rpc.get_block(last_block) -""" - Обработайте блок -""" - process_block(block, last_block) -""" -Пропустите один блок -""" - time.sleep(block_interval) -""" - -###### NodeJS -""" - var rpc = require('node-json-rpc'); - - var last_block = 160900; - var watch_account = "world"; - var options = { - port: 8092, - host: '127.0.0.1', - path: '/rpc', - strict: false - }; - - - var callrpc = function(name, params, cb) { - client.call( - {"jsonrpc": "2.0", - "method": name, - "params": params, - "id": 0}, - function(err, res) { - if (err) { cb(err, null) } - else { cb(null, res["result"]) } - } - ); - } - - var process_transfer = function(op, block, blockid) { - console.log(block); - if (op["to"] == watch_account) { - console.log(blockid + " | " + - block["timestamp"] + " | "+ - op["from"] + " -> " + - op["to"] + ": " + - op["amount"] + " -- " + - op["memo"] - ); - } - } - - var process_block = function(block, blockid) { - console.log(blockid); - console.log(block["transactions"]); - for (var tx in block["transactions"]) { - for (var opObj in tx["operations"]) { - var opType = opObj[0]; - var op = opObj[1]; - - console.log(op); - - if (opType == "transfer") { - process_transfer(op, block, blockid); - } - } - } - } - - var start_loop = function() { - callrpc("get_dynamic_global_properties", [], function(err, props) { - var block_number = props["last_irreversible_block_num"]; - while ((block_number - last_block) > 0) { - last_block += 1 - callrpc("get_block", [last_block], function(err, block) { - process_block(block, last_block); - }); - } - }); - } - - - var client = new rpc.Client(options); - - var block_interval; - - callrpc("get_config", [], - function (err, config) { - if (err) { console.log(err); } - else { - block_interval = config["STEEMIT_BLOCK_INTERVAL"] - start_loop(); - } - } - ) -""" diff --git a/golosd/howto/vichislenie-kuratorskih-voznagrazhdenii.md b/golosd/howto/vichislenie-kuratorskih-voznagrazhdenii.md deleted file mode 100644 index e6bcee02..00000000 --- a/golosd/howto/vichislenie-kuratorskih-voznagrazhdenii.md +++ /dev/null @@ -1,125 +0,0 @@ -# Как вычислять реальные кураторские до закрытия окна выплат - -Автор [@**vvk**](https://golos.io/@vvk) - -Рассмотрим, как прогнозировать кураторские вознаграждения до закрытия поста. - -# Общие сведения - -В механику заложена отдача 25% от полной выплаты поста кураторам, однако кураторы, голосующие в первые 30 минут, отдают часть своей кураторской доли автору \(штрафуются\) по линейной зависимости. 30 минут - это 100%, соответственно голосующий на 15-й минуте отдаёт 50% своего кураторского вознаграждения. - -# Как получить реальный кураторский процент - -У нас есть следующие параметры: - -* `weight` - - вес куратора, находится в - `active_votes` - , с учётом штрафа -* `total_vote_weight` - - сумма всех весов кураторов без учёта штрафа - -Таким образом, мы можем вычислить реальный кураторский процент так: - -``` -sum_weight = int() - -for vote in active_votes: - sum_weight += int(vote['weight']) - -curators_share = sum_weight / int(post['total_vote_weight']) * 0.25 - -``` - -# Механика - -Дальше рассмотрим, а как вообще вычисляется weight каждого куратора. - -В модели у нас будет: - -* 5 апов с одинаковыми условными 50 rshares \( - `votes` - \). -* `s` - - это CONTENT\_CONSTANT, в модели она маленькая для наглядности -* 10000 - это - `std::numeric_limits` - `<` - `uint64_t` - `>` - `::max()` - , опять же маленькое значение для наглядности - -``` -# modeling weight - -votes = [50, 50, 50, 50, 50] -#votes = [10, 50, 100, 150, 100, 150, 50, 100000, 200] - -s = 100 -num_votes = 10 - -sum_vote_rshares = int() - -for rshares in votes: - old_weight = (10000 * sum_vote_rshares) / (2 * s + sum_vote_rshares) - sum_vote_rshares += rshares - new_weight = (10000 * sum_vote_rshares) / (2 * s + sum_vote_rshares) - weight = new_weight - old_weight - print('vote rshares: {:.0f}: old: {:.0f}, new: {:.0f}, weight: {:.0f}'.format(rshares, old_weight, new_weight, weight)) - -``` - -Выполнение этого кода даст такую картину: - -``` -vote rshares: 50: old: 0, new: 2000, weight: 2000 -vote rshares: 50: old: 2000, new: 3333, weight: 1333 -vote rshares: 50: old: 3333, new: 4286, weight: 952 -vote rshares: 50: old: 4286, new: 5000, weight: 714 -vote rshares: 50: old: 5000, new: 5556, weight: 556 - -``` - -Видим, что хотя все апы одинаковы, вес каждого последующего меньше предыдущего. Вот так и работают вычисления в golosd, однако там ещё после вычисления`weight`накладывается штраф, если ап сделан в первые 30 минут. Т.е. например для апа на 15-й минуте его вес уменьшается так:`weight = weight * 0.5` - -Зная данную механику, теперь можно вычислять кураторские ещё до закрытия поста: - -``` - -active_votes = sorted(post['active_votes'], key=lambda k: datetime.strptime(k['time'], '%Y-%m-%dT%H:%M:%S')) - -for vote in active_votes: - reward = pending_payout * 0.25 * investor['weight'] / int(post['total_vote_weight']) - time_passed = datetime.strptime(vote['time'], '%Y-%m-%dT%H:%M:%S') - post['created'] - print('real weight percent: {:.2%}, reward: {:.3f} GBG, voter: {}, time: {}, weight: {:.0f}'.format( - real_share, reward, vote['voter'], time_passed, float(vote['weight'])/100000000000000)) - -``` - -Пример вывода: - -``` -real weight percent: 0.00%, reward: 0.000 GBG, voter: zaebot, time: 0:00:03, weight: 0 -real weight percent: 0.00%, reward: 0.000 GBG, voter: rastabandito, time: 0:00:03, weight: 0 -real weight percent: 0.00%, reward: 0.265 GBG, voter: nett, time: 0:03:03, weight: 336 -real weight percent: 0.00%, reward: 2.148 GBG, voter: idestus, time: 0:10:03, weight: 2721 -real weight percent: 0.00%, reward: 4.378 GBG, voter: cyros, time: 0:10:36, weight: 5546 -real weight percent: 0.00%, reward: 0.017 GBG, voter: marusya, time: 0:10:39, weight: 21 -real weight percent: 0.00%, reward: 2.120 GBG, voter: sveokla, time: 0:20:03, weight: 2685 -real weight percent: 0.00%, reward: 0.960 GBG, voter: graff0x, time: 0:21:03, weight: 1216 -real weight percent: 0.00%, reward: 0.162 GBG, voter: grkh, time: 0:23:03, weight: 205 -real weight percent: 0.00%, reward: 0.004 GBG, voter: usias60, time: 0:25:03, weight: 4 -real weight percent: 0.00%, reward: 35.749 GBG, voter: spinner, time: 0:26:21, weight: 45282 -real weight percent: 0.00%, reward: 21.262 GBG, voter: park.bom, time: 0:27:03, weight: 26932 -real weight percent: 0.00%, reward: 1.664 GBG, voter: svamiva, time: 0:27:33, weight: 2108 -real weight percent: 0.00%, reward: 0.173 GBG, voter: yakubovruslan, time: 0:29:03, weight: 219 - -``` - -Здесь у нас GBG, хотя кураторские идут в СГ, кому надо легко вычислят. - - - -[Источник](https://golos.io/goldvoice/@vvk/curation-rewards) - diff --git a/golosd/howto/witness-node.md b/golosd/howto/witness-node.md deleted file mode 100644 index cddbd281..00000000 --- a/golosd/howto/witness-node.md +++ /dev/null @@ -1,397 +0,0 @@ -# 👨‍🎓 Актуальная инструкция по установке делегатской ноды GOLOSD \(+ Создание общедоступной паблик-API ноды с TLS/WSS шифрованием на NGINX\) - -Автор: [@vik](https://golos.io/@vik) - -![](https://imgp.golos.io/0x0/https://s26.postimg.org/6fgrgq2cn/vik.png) - -**В последнее время ко мне часто обращались с вопросами по установке делегатских нод и давно нужно было написать инструкцию, которую каждый мог бы получить в виде ссылки.** -На голосе можно найти старые мануалы, но практически нет информации об активации и настройке режима паблик-api ноды. Я постараюсь подробно описать настройку. - -Публичные ноды важная составляющая экосистемы блокчейна, при малом их количестве и нестабильной работе, многие начинают использовать основную ноду ws.golos.io увеличивая нагрузку и нарушая работу клиента golos.io -Об этом я уже писал ранее: [**Этика ботоводства на голосе и экономия ресурса официальной паблик ноды**](https://golos.io/ru--golos/@vik/etika-botovodstva-na-golose-i-ekonomiya-resursa-pablik-nod-robot-delegat-za-kotorogo-ne-nuzhno-golosovat) - -**Установка ноды Делегата \(Witness\)** - -**Сервер** - -Если вы раньше не арендовали сервера, это может показаться для вас трудной задачей. Но это только так кажется. На самом деле существует масса сервисов и реселлеров, которые принимают оплату в криптовалюте, вам не составит труда оплатить VPS/VDS. А если вы привыкли платить картой - в вашем распоряжении "океан" возможностей. Например Digital Ocean - -Запомните, вам нужен сервер с ROOT доступом и с минимум 8 GB \(Если только для тестов, иначе нужно хотя бы 12 GB\) RAM и минимум 40 GB на диске. Желательно SSD диск. При заказе сервера вам будет предложено выбрать предустановленную OS - выбирайте Ubuntu 16.04 и выше. - -После того как вы получили в свое распоряжение логин и пароль к серверу, можно подключаться к нему терминалом/консолью по SSH и установить все необходимое в командной строке: - ---- - -`sudo apt-get update` - -`sudo apt-get upgrade` - -Если обновления не загружаются из-за ipv6, просто введите команду ниже и повторите снова -`echo 'Acquire::ForceIPv4 "true";' | tee /etc/apt/apt.conf.d/99force-ipv4` - -**Ниже я не использую Docker, поскольку он потребляет лишние ресурсы, к тому же чистая установка будет нагляднее для первого раза** - -**Установка зависимостей** - -``` -sudo apt-get -y upgrade && sudo apt-get -y install git cmake g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev libssl-dev libncurses5-dev doxygen libreadline-dev dh-autoreconf screen -``` - -**Установка ноды** -В строке ниже есть фрагмент `tags/v0.16.4`- это версия ноды. Если вам попадется эта инструкция позднее, вам следует проверить, какую актуальную версию блокчейна поддерживает большинство делегатов здесь: [http://golosd.com/witnesses](http://golosd.com/witnesses) и заменить версию в строке ниже на актуальную. - -\(Папка с ПО блокчейна голоса установится в ту директорию, в которой вы введете команду ниже\) - -``` -git clone https://github.com/GolosChain/golos && cd golos && git checkout tags/v0.16.4 && git submodule update --init --recursive && cmake -DCMAKE_BUILD_TYPE=Release . && make -j$(nproc) -``` - -⏰ После ввода команды нужно будет подождать несколько минут инсталяции. - -После я рекомендую использовать `screen`- это своего рода окна в консоли, между которыми вы можете переключаться не останавливая выполняемые скрипты в них. - -Например создайте и перейдите в окно D \(Делегат\) -`screen -S D`\(Вместо D можно использовать любое слово, это просто id окна\) - -> Чтобы выйти из него, нажмите `ctrl`+`A`+`D` -> Чтобы вернуться снова `screen -x D` - -Теперь вы в отдельном окне и можете перейти в папку -`golos/programs/golosd/` - ---- - -![](https://images.golos.io/DQmbRqx6eBDSDRahGD1uKw3k3yfNhzVF7e2uwngkRpp7fJC/image.png) - ---- - -И ввести там`./golosd` - -Это будет первый запуск, во время которого будет показана ошибка, но будут созданы необходимые папки с настройками. -Вы увидите вывод консоли вида -![](https://images.golos.io/DQmSARL2Msbp2Vr8YAb5maGJ4MAXP2tdAQifuXUguk1Mn63/1.PNG "Мастер нода GOLOS") - -Файл конфига создан, теперь нужно его найти и отредактировать -![](https://images.golos.io/DQmaxLcS4G6ZcD3BP2RtGBxmWGYRV5KjzyHR9LqUyyCrsvy/path.PNG "Мастер нода GOLOS") - -Находим его по пути `golos/programs/golosd/witness_node_data_dir/config.ini` - -Теперь нам нужно добавить адреса сид-нод для связи с сетью голоса и локальные адреса с доступом по RPC, WS, curl и т.д. для работы с блокчейном - -![](https://images.golos.io/DQmQvUUUE5qgdhrPk9V6q6w3Q75jMxpFrXQvxnxjhQcB12T/image.png) - -Актуальный список сид-нод можно будет взять тут -[https://github.com/GolosChain/golos/blob/master/documentation/seednodes](https://github.com/GolosChain/golos/blob/master/documentation/seednodes) - -``` -seed-node = 5.9.18.213:4243 -seed-node = 52.32.75.69:4243 -seed-node = 52.57.156.202:4243 -seed-node = 88.99.13.48:4243 -seed-node = golos-seed.arcange.eu:4243 -seed-node = golos-seed.esteem.ws:4243 -seed-node = golosnode.com:4243 -seed-node = 138.68.101.115:4243 -seed-node = golos.imcoins.org:2001 -seed-node = 178.62.224.148:4242 -``` - -RPC адреса - -``` -rpc-endpoint = 127.0.0.1:9090 -rpc-http-endpoint = 127.0.0.1:9091 -rpc-http-allowip = 127.0.0.1 -``` - -Теперь осталось добавить еще 2 необходимых параметра **witness **и **private-key** - -В поле witness добавьте свой логин делегата в кавычках, например`"vik"` -А в поле **private-key **нужно вставлять **\(!\) приватный ключ подписи **без кавычек, например: - -`5FfMuvf3SQQDKhN83zboHYW5FZA1ShqqD2NaaLqo` - -Но вы еще не знаете свой приватный ключ подписи. Обычно я временно вставляю туда активный \(это неправильно\) а после синхронизации беру в кошельке ключ подписи. Но сегодня мы сделаем по-другому. -Как узнать свой приватный **signing key **я напишу ниже. - -Вместе с нодой **golosd **мы установили также **cli wallet **\(кошелек для голоса с командной строкой\) -Обычно мы подключаем кошелек к своей ноде, но поскольку мы ее еще не запустили и она не синхронизировала блокчейн - к ней подключиться нельзя. Мы временно подключимся к публичной ноде. - -Вспомним о наших "окнах" screen и создадим новое W \(wallet\): -`screen -S W` - -Перейдем в папку cli\_wallet по пути: -`golos/programs/cli_wallet/` - -И запустим кошелек командой -`./cli_wallet --server-rpc-endpoint="wss://ws.golos.io"` - -Параметр`--server-rpc-endpoint="wss://ws.golos.io"`позволил нам подключиться к рабочей ноде голоса. Напомню, это временно, так как наша нода еще не запущена и на скрине ниже локальный адрес. - -После ввода команды вы увидите строку с приглашением`new>>>` -Вам нужно зашифровать локальный кошелек на сервере придуманным паролем, введите команду после new>>>: - -`set_password ВАШ-ПрИдУмАнЫй-ПАРОЛЬ`\* - -![](https://images.golos.io/DQmcSE1UmpseweLKY9g7aHmZUVm87rmcXzZdwSRVfLPANp4/4.PNG "Мастер нода GOLOS") - -Вы увидите в ответ locked \(заблокирован\) -Теперь разблокируйте кошелек командой - -`unlock ВАШ-ПрИдУмАнЫй-ПАРОЛЬ` - -И увидите приглашение unlocked>>> - -Теперь вам нужно импортировать в кошелек свой активный ключ с голоса. -Его можно взять на вкладке разрешений в кошельке на сайте. Разумеется, это должен быть приватный активный ключ, который показывается после авторизации, он как и постинг начинается на 5. - -![](https://images.golos.io/DQmUF9LF2NqnTYnkt477juXDv8GjLGrjEpDCD61gJtoidt6/image.png) - -Теперь импортируйте свой ключ командой: - -`import_key 5XNqnTYnkt477juXDv8GjLGrjEpDCD61gJtoidt6huy` - -Далее введите команду -`suggest_brain_key` - -Вы получите ответ вида: - -![](https://images.golos.io/DQmcj7Dfp2djRdCnpxTym5D1PQQThKohfu1CNh2vfMFebiv/image.png) - -Надежно сохраните эти ключи \(мы еще вернемся к ним\). -А ключ, который `wif_priv_key` вставьте в config.ini - это именно тот ключ, с помощью которого ваша делегатская нода будет подписывать блоки. - ---- - -Вернемcя к ноде `screen -x D` - -Настало время запустить синхронизацию, находясь в папке golosd вводим - -`./golosd` -Если все верно, вы увидите вот такой вывод в консоли - -![](https://images.golos.io/DQmW42QhFfMuvf3SQQDKhN83zboHYW5FZA1ShqqD2NaaLqo/2.PNG "Мастер нода GOLOS") - -Красные строки на этом этапе не ошибки, а скорее важные заметки. Если процесс синхронизации блоков идет - все хорошо. - -⏰ ⏰ ⏰ Запаситесь терпением, это достаточно длительный процесс, на быстрых серверах это займет около часа, на средних - может занять много часов. Можно расслабиться и сходить покакать. - -Если взять с собой ноутбук, можно всплакнуть наблюдая принятие прошлых хардфорков - -![](https://images.golos.io/DQmXxSot6UDMmVyQwUPXGoFqtFKg8L8pFTB4dNQ7My4cWde/3.PNG "Мастер нода GOLOS") - -Когда в строках \_block изменится на \_transactions и вы будете видеть, что блоки идут последовательно с интервалом в 3 секунды, можно считать, что нода синхронизирована. Если мы будем вносить правки в конфиг, а мы будем, то потом ее нужно будет перезапустить. Нажав `ctrl`+`c` можно остановить ноду. А введя команду `./golosd` в папке `golosd` - восстановить. - -![](https://images.golos.io/DQmdxSzpFd8NMmF4TeDoGe48aKEJdt9jAJb9WWYzBJeShmW/5.PNG "Мастер нода GOLOS") - -Пока нода работает, вам нужно объявить себя активным делегатом. -Выйдем с окна D командой`CTRL+A+D`и перейдем к кошельку`screen -x W` - -Теперь нам логично подключиться уже к своей локальной ноде \(помните, мы работали раньше с публичной\) -Для этого выйдем с текущей сессии кошелька CTRL+C или ENTER и введем команду: - -`./cli_wallet --server-rpc-endpoint="ws://localhost:9090"` - -Теперь мы подключились к блокчейну локально, через свою ноду. - -Вернемя к нашим ключам -![](https://images.golos.io/DQmcj7Dfp2djRdCnpxTym5D1PQQThKohfu1CNh2vfMFebiv/image.png) - -Теперь нам нужен ПУБЛИЧНЫЙ ключ `pub_key` -Cформируйте строку для команды объявления себя делегатом: - -``` -update_witness "vik" "https://golos.io/x/@vik/delegat" GLS8LPBzkzf6ap9gby1mVLSsXnBhC2sp8iQd8mKoMS2ChbiMAhWHf -{"account_creation_fee":"3.000 GOLOS", "maximum_block_size":65536, "sbd_interest_rate":1000} true -``` - -Где vik - ваш логин, ссылка - это ваш пост о делегатстве, тот самый публичный ключ \(не вздумайте приватный, эта операция будет публичной и ее увидят все\) -Остальные параметры можете оставить как в шаблоне выше. - -Попробуйте ввести эту команду, если в ответ вы не получите ошибок, можно проверить в golosd.com/@имя и убедиться, что вы смогли отправить транзакцию через свою ноду. - -После вы можете опубликовать котировку GOLOS/GBG -Сделать это можно так: - -`publish_feed "vik" { "base":"2.362 GBG", "quote":"1.000 GOLOS"} true` - -Позднее вам лучше автоматизировать эту операцию, так как это обязанность делегата, публиковать котировки GOLOS к GBG - -Теперь вам нужно получить голоса за свою ноду. Можете проголосовать за себя сами и попросить друзей, чтобы ваша нода хоть немного поднялась в рейтинге и подписался первый блок. - -Проголосовать можно здесь -golos.io/~witnesses или командой в кошельке - -`vote_for_witness КТО КОГО true true` - -Если вы получили малый вес голосов, ждать первого блока можно достаточно долго. -Пока вы его не подпишите, выглядеть ваша нода на[http://golosd.com/witnesses](http://golosd.com/witnesses)будет так: -![](https://images.golos.io/DQmWJKw6QP3PBa32Ha9WbzqcwsEEua22Lr8psW4nA9sqQbQ/image.png) - -Если блок не появится или появится пропущенный блок - вам будет нужно пересмотреть настройки и найти ошибку. - ---- - ---- - -Инструкция ниже позволит сделать вашу ноду доступной для использования другим пользователям. Это подразумевает более мощный сервер. - -**Делаем ноду публичной и безопасной для всех \(NGINX+TLS/WSS шифрование\)** - -У голоса есть публичная нода wss://ws.golos.io к которой подключается множество разработчиков и мешают работе сети создавая узкое место. Вы можете "разгрузить" официальную ноду предложив использовать вашу, для этого вам нужно сделать ее так же доступной для всех. -Вы можете купить или зарегистрировать бесплатный домен или вовсе использовать IP адрес сервера, просто прописав его как RPC в конфиге. Но если вы намерены держать нагрузку и поддерживать постоянную работу - следует использовать более гибкий инструмент. - -Чтобы не "нагружать" вас лишним раньше времени ниже я приведу базовую настройку nginx без rate limit и анализа трафика \(В будущем я опубликую как обезопасить сервер от атак\) - -**Установка NGINX** - -Как и ранее можно использовать screen и переключиться на отдельное окно и начать установку: - -`sudo apt-get update` -`sudo apt-get install nginx` - -Теперь создайте в удобном для себя месте на сервере произвольный файл с расширением .conf, например `golosnode.conf` - -Далее добавим путь к этому файлу конфигурации в конфиге nginx -Открываем в редакторе главный конфиг: - -`nano /etc/nginx/nginx.conf` - -Ищем там строки с include -И добавляем после include путь/к/golosnode.conf -Например: - -`include /home/nginx/golosnode.conf;` - -Далее откройте этот файл и добавьте nginx правила: - -``` -upstream websockets { - server 127.0.0.1:9090; - server 127.0.0.1:9091; -} - -server { - listen 80; - server_name ВАШ_ДОМЕН_ИЛИ_IP; - root /home/html/; - keepalive_timeout 65; - keepalive_requests 100000; - sendfile on; - tcp_nopush on; - tcp_nodelay on; - - location ~ ^(/|/api) { - - limit_req zone=ws burst=5; - access_log off; - proxy_pass http://websockets; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_next_upstream error timeout invalid_header http_500; - proxy_connect_timeout 2; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - -} -``` - -После сохранения перезапустите nginx и проверьте статус - -`systemctl restart nginx` -`systemctl status nginx.service` - -При отсутствии ошибок вы увидите примерно такой вывод в консоли - -![](https://images.golos.io/DQmX2HmJWFxyPicw4J6sxr9ziEFSZbtuUKXtJiUykLaT738/6.PNG "Мастер нода GOLOS") - -К редакциям конфигов мы еще вернемся, теперь установим TLS сертификат для шифрования нашего трафика. - -**🔐 Шифрование и безопасность коннекта TLS/SSL/WSS** - -Установить сертификат стало очень просто с сервисом-ботом `CertBOT` -Введите команды ниже: - -``` -sudo apt-get update -sudo apt-get install software-properties-common -sudo add-apt-repository ppa:certbot/certbot -sudo apt-get update -sudo apt-get install python-certbot-nginx -sudo certbot --nginx -``` - -Вы увидите диалоговое окно, где вам будет предложено ввести свой email и указать домен для которого вы собираетесь установить сертификаты -![](https://images.golos.io/DQmd95BHuxMJDWER1jPM9kpbkKzz8pLcLDA2VESksMW3K4R/7.PNG "Мастер нода GOLOS") - -Так же вам будет предложено автоматически добавить редирект с http на https , но так как нам нужен редирект с ws на wss - можно эту опцию не выбирать. -![](https://images.golos.io/DQmRThxRxDPcXazwKx7G1yYreCtL7gUv2ZtJfYg3XVguhKe/8.PNG "Мастер нода GOLOS") - -После всего этого, certbot самостоятельно добавит настройки в ваш `golosnode.conf;`, но вам лучше всё перепроверить: - -``` -server { - listen 80; # УДАЛИТЬ! - server_name ВАШ_ДОМЕН_ИЛИ_IP; - root /home/html/; - - listen 443 ssl; # ДОЛЖНО БЫТЬ ДОБАВЛЕНО - ssl_certificate /etc/letsencrypt/live/api.golos.cf/fullchain.pem; # ДОЛЖНО БЫТЬ ДОБАВЛЕНО - ssl_certificate_key /etc/letsencrypt/live/api.golos.cf/privkey.pem; # ДОЛЖНО БЫТЬ ДОБАВЛЕНО - include /etc/letsencrypt/options-ssl-nginx.conf; # ДОЛЖНО БЫТЬ ДОБАВЛЕНО -*** остальные настройки такие же *** -``` - -Я оставил полный конфиг тут -[https://github.com/vikxx/server](https://github.com/vikxx/server) -Он работает так: -Доступ по вебсокетам по адресу`wss://api.golos.cf` -Доступ к html страничкам из папки html по адресу [https://golos.cf](https://golos.cf/) -Используя его как шаблон, вы сможете настроить правильные пути для своего домена. - -После правки nginx настроек его следует перезапускать -`systemctl restart nginx` - перезапуск -`systemctl status nginx.service` - проверяем нет ли ошибок - -**Теперь вернемся к ноде голоса, к файлу config.ini** - -Нам нужно указать список плагинов для активации, а так же API запросы, которые мы разрешим для пользователей - -``` -enable-plugin = account_by_key -enable-plugin = witness -enable-plugin = account_history -enable-plugin = follow -enable-plugin = market_history -enable-plugin = tags -public-api = database_api login_api market_history_api tags_api follow_api network_broadcast_api use_network_node_api -``` - -Так же найдите строку`server-pem`и добавьте путь к сертификату, его можно увидеть в конфиге к nginx - -После правки config.ini можно перезапустить ноду `ctr+c` стоп, `./golosd` запуск. - -Чтобы понять корректно ли работает ваша нода, можете попробовать подключить к ней cli\_wallet указав публичный путь, а не локальный. - ---- - -**Позднее я добавлю инструкции по настройке фаервола и алгоритмов защиты вашей ноды от злоупотребления.** - -Пример работы паблик ноды можно увидеть тут [https://golos.cf](https://golos.cf/) -Сайт подключен к api.golos.cf - -![](https://images.golos.io/DQmTwTLB1yP5mYQTjen2pjZmRp5CGQGCE6feSFd3rMa2GJN/image.png) - -Так же вы можете подключить к `wss://api.golos.cf` собственные скрипты. - -Конфигурация сервера описана мной [ранее в блоге](https://golos.io/ru--golos/@vik/publichnaya-api-noda-dlya-razrabotchikov-golosa-golos-cf-wss-api-golos-cf) - -> По материалам [статьи](https://golos.io/ru--golos/@vik/aktualnaya-instrukciya-po-ustanove-delegatskoi-nody-golosd-sozdanie-obshedostupnoi-pablik-api-nody-s-tls-wss-shifrovaniem-na). -> -> Автор [@vik](https://golos.io/@vik) - - - diff --git a/golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md b/golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md deleted file mode 100644 index 6acd0df8..00000000 --- a/golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md +++ /dev/null @@ -1,158 +0,0 @@ -# Запуск golos ноды в контейнере docker - -Автор: [@ropox](https://golos.io/@ropox) - -Для запуска понадобится естественно сам докер. Установить можно пользуясь инструкцией к примеру для ubuntu расположенной тут - -[https://docs.docker.com/install/linux/docker-ce/ubuntu/](https://docs.docker.com/install/linux/docker-ce/ubuntu/) - -Дальше нам понадобится образ с golos-демоном. Есть два способа получить этот образ. Можно воспользоваться готовым образом из официального хаба докера или собрать самому. - -## Самостоятельная сборка образа. - -Такой способ может понадобится если нету готового, нужного вам образа в хабе докера, но есть Dockerfile для сборки. Goloscore поддерживает в актуальном состоянии Dockerfile для сборки образа с демоном голоса им мы и воспользуемся. - -Допустим наша цель собрать образ для запуска хардфорка от Гороха. :\) Для этого нам понадобятся исходники. Воспользуемся командой git — ее можно установить воспользовавшись к примеру apt в ubuntu или любым другим способом. - -#### Клонируем репозиторий и переключаемся на нужный релиз - -``` -#> git clone https://github.com/gropox/golos.git -#> cd golos -~/golos #> git checkout gropox-0.17.1 -~/golos #> git submodule update --init --recursive -``` - -#### Запускаем сборку образа - -_Если у вас прерывается сборка в самом начале, при попытке актуализировать репозиторий, то отредактируйте Dockerfile и удалите отмеченную строку._ - -![](https://imgp.golos.io/0x0/https://i.imgur.com/oORc5BJ.png) - -Запускаем сборку - -``` -~/golos #> docker build . -f Dockerfile -t gropox-17 -Sending build context to Docker daemon 58.29MB -Step 1/18 : FROM phusion/baseimage:0.9.19 - --- -> c39664f3d4e5 -Step 2/18 : ENV LANG=en_US.UTF-8 - --- -> Using cache - --- -> 2467fc9cd257 -.... -``` - -Если все прошло удачно, у вас будет готовый образ - -``` -~/golos #> docker images gropox* -REPOSITORY TAG IMAGE ID CREATED SIZE -gropox-17 latest 70647dfb7d19 20 minutes ago 1.23GB -``` - -## Вариант номер два - скачать образ из docker hub - -Нет ничего проще. К примеру, чтобы скачать продуктивную версию голоса можно выполнить следующую команду - -``` -#> docker pull goloschain/golos:v0.16.4 -``` - -# Запуск контейнера - -## Подготовка - -Чтобы блокчейн не хранить в контейнере, что повлечет за собой огромный расход дискового пространства, нужно подготовить директорию, для хранения блокчейна и конфигурационного файла. - -Я лично создаю отдельного пользователя, для запуска контейнера и в домашней папке пользователя создаю нужные мне директории. Допустим мы все будет запускать от имени пользователя golosd. Не забудьте добавить пользователя в группу_docker_Понадобятся две папки. Одна рабочая под блокчейн и другая с конфигурационными файлами. - -``` -/home/golosd #> mkdir -p ~/home/blockchain -/home/golosd #> mkdir -p ~/home/p2p -/home/golosd #> mkdir -p ~/home/logs/p2p -/home/golosd #> mkdir -p ~/config -``` - -Из папки с исходниками \(допустим это директория_golos_в вашей домашней папке\) скопируйте конфигурационные файлы - -``` -/home/golosd #> cp ~/golos/documentation/seednodes ~/config/ -/home/golosd #> cp ~/golos/contribution/config.ini ~/config/ -``` - -И скопируйте снепшот из директории с исходниками в рабочую папку - -``` -/home/golosd #> cp ~/golos/programs/golosd/snapshot5392323.json ~/home/ -``` - -## Запуск. - -Отредактируйте ~/config/config.ini на ваше усмотрение или используйте свой старый, если есть. - -``` -#> docker run \ - -it \ - -p 0.0.0.0:8090:8090 \ - -v /home/golosd/config/:/etc/golosd \ - -v /home/golosd/home/:/var/lib/golosd/ \ - -d --name golosd \ - -t gropox-17 -``` - -**-it **— запускаем контейнер в интерактивном режиме -**-p 127.0.0.1:8090:8090 **— пробрасываем 8090 порт из контейнера наружу \(если нужен доступ скриптами\) -**-v /home/golosd/config/:/etc/golosd **— монтируем папку ~/config как /etc/golosd в контейнере -**-v /home/golosd/home/:/var/lib/golosd/ **— монтируем папку ~/home как /var/lib/golosd в контейнере -**-d --name golosd **— демонизируем контейнер и задаем имя контейнеру golosd -**-t gropox-17 **— указываем, какой образ использовать. В данном случае собранный вручную, или можно указать **-t goloschain/golos:v0.16.4 **для использования официального образа goloscore. - -Собственно все. Проверить работоспособность можно командой - -``` -#> docker logs --tail 40 golosd -``` - -Остановить - -``` -#> docker stop golosd -``` - -Продолжить работу контейнера - -``` -#> docker start golosd -``` - -## shared memory - -По умолчанию нода положит shared\_memory\* файлы в директории /home/golosd/home/blockchain - -В конфигурационном файле можно указать другое место, где ноде следует создать файл. - -``` -shared-file-dir=/shm -``` - -В свою очередь можно при создании контейнера смонтировать /dev/shm как /shm внутрь образа тем самым позволив контейнеру поместить shared\_memory файлы в рамдиск. Что позволит ускорить синхронизацию ноды. - -[Источник](https://golos.io/golosd/@ropox/zapusk-golos-nody-v-konteijnere-dokera) - - - - - -**Примечание: ** - -У многих делегатская нода работает пока еще на 8G RAM, место на диске требуется порядка 40G, лучше 60G SSD. Процессоры более менее современные, с поддержкой виртуализации, если запускать в докере. - -К API ноде требования конечно выше. Если просто ванильную ноду установить и включить все плагины, то надо как минимум 64G RAM. Диска около 120G. - -Можно взять исходники отсюда [https://github.com/gropox/golos/tree/less\_account\_history](https://github.com/gropox/golos/tree/less_account_history) и настроить как написано тут [https://goldvoice.club/@ropox/filxtrovanie-accounthistory/](https://goldvoice.club/@ropox/filxtrovanie-accounthistory/) - -То я обхожусь менее 20 Гигами RAM и ни в чем себе не отказываю практически. У меня на сервере для себя с 48G RAM крутятся такая вот нода, testnet, и нода BitShares. Плюс скрипты всякие. Правда места на диске осталось 7 Гиг из 120. Надо учесть, что образы докера отъедают место на диске. - diff --git a/golosd/links.md b/golosd/links.md deleted file mode 100644 index 2dc8a4c4..00000000 --- a/golosd/links.md +++ /dev/null @@ -1,17 +0,0 @@ -# Сайты с документацией для разработчиков - -[![](/assets/logo_developers_golos.png)](https://developers.golos.io/) - -* [Сайт developers.golos.io](https://developers.golos.io/doc) - * [Руководство по веб-клиенту](https://developers.golos.io/doc/client) - * [Руководство по тестнету](https://developers.golos.io/doc/testnet) - * [API-документация](https://developers.golos.io/doc/client#api-reference) - * [Документация по блокчейну](https://developers.golos.io/golos-v0.17.0/index.html) - * [Список классов](https://developers.golos.io/doc/blockchain) -* [GitHub проекта Голос: GolosChain](https://github.com/GolosChain) - * [GitHub golos core](https://github.com/GolosChain/golos) - * [GitHub клиента golos.io](https://github.com/GolosChain/tolstoy) - * [GitHub wiki.golos.io](https://github.com/GolosChain/wiki) -* [Документация по Graphene: docs.bitshares.eu](http://docs.bitshares.eu/) - - diff --git a/golosd/mechanics/consensus_algorithm.md b/golosd/mechanics/consensus_algorithm.md deleted file mode 100644 index e94bab47..00000000 --- a/golosd/mechanics/consensus_algorithm.md +++ /dev/null @@ -1,80 +0,0 @@ -## Алгоритм консенсуса - -###Обеспечение надежной работы социальной сети, устойчивой к цензуре. - -Консенсус-протокол представляет собой процесс, посредством которого сеть компьютеров может достичь однозначного согласия о том, кто чем владеет. Цель этого консенсус-протокола – минимизировать риски по созданию альтернативной блокчейн-цепочки, закрытию сети, или цензурированию отдельных пользователей. В Голосе используется протокол, сочетающий в себе методы, используемые протоколами Доказательства владения (POS) и Доказательства работы(POW), за счет чего обеспечивается большая надежность и устойчивость к цензурованию. - -Консенсус представляет собой процесс, посредством которого группа лиц достигает однозначного согласия по поводу текущего состояния распределенной сети. Основным требованием для достижения консенсуса является соглашение о порядке следования событий и детерминированный алгоритм для обработки этих событий. Второе по значимости требование – устойчивость к цензурированию. Устойчивость к цензурированию означает наделение всех пользователей правом размещать свои собственные материалы в социальной сети. - -На каждом 21 блоке (один раз в раунде) выбираются 21 активных майнеров для текущего раунда. Из активных майнеров в случайном порядке формируется очередь для производства блоков (блок производится каждые 3 секунды). Отбор активных майнеров осуществляется следующим образом: - -19 лучших майнеров, за которые проголосовали держатели Силы ГОЛОСА (отложенных ГОЛОСОВ) -1 слот предназначен для всех невыбранных майнеров -1 слот выбирается посредством механизма Доказательства работы - -###Голосование за майнеров - -Каждый пользователь может проголосовать за любое количество майнеров либо непосредственно, либо опосредованно – по доверенности. Голосование по доверенности может быть до 3-х уровней в глубину. Процесс голосования очень похож на то, как майнеры биткоина голосуют при выборе майнинговых пулов. Только владельцы ГОЛОСОВ, имеющие отложенные ГОЛОСА (Силу ГОЛОСА), имеют право голосовать. Никто не замораживает свой капитал на год или более без оплаты. Мы считаем, что ликвидность имеет реальную стоимость, как и электроэнергия имеет стоимость. Соответственно, оба параметра могут использоваться как объективная мера работы. - -###Использование оставшихся (невыбранных) майнеров - -Лучшие 19 майнеров имеют приоритет и получают возможность производить блоки в каждом раунде. Оставшиеся желающие производить блок по очереди получают это право примерно раз в 63 секунды. Цель состоит в том, чтобы эффективно распределить право на производство блока между этими желающими, пропорционально доле голосов, которые они получают. Тот, кто имеет в два раза больше голосов, должен получать право на майнинг в два раза чаще. Выбранный алгоритм является разновидностью алгоритма честных очередей со средневзвешенными коэффициентами (WFQ). Согласно WFQ каждый производитель блока получает слот для майнинга, основываясь на весе тех голосов, которые он имеет, и времени ожидания на производство блока. При любом изменении количества голосов за того или иного майнера время слота обновляется. В начале каждого раунда производитель блока с наименьшим временным слотом выбирается для создания блока и перемещается в конец очереди. - -_Если майнер не в состоянии произвести блок, то блок не будет произведен. Если ни один из оставшихся майнеров не произведет блок, то сеть будет по-прежнему на 95% надежна, выдавая блоки каждые 3 секунды._ - -###Доказательство работы - -В сети предполагается использовать преимущества алгоритма Доказательства работы (майнинга), но без недостатков последнего, таких как непредсказуемое время производства блока, концентрация и централизация майнинговых пулов, вероятность, что конечные блоки окажутся брошенными. -Основные преимущества ДР (POW): - -###Высокая цена подделки - -_Экономическая заинтересованность в оптимизации необходимых компьютерных алгоритмов -Модель распределения, которая привлекает технически грамотных пользователей -Создание надежной сети с малой временной задержкой_ - -В отличие от традиционного майнинга, временные интервалы на производство блока и выполнение доказательства работой разнесены. Когда решение, которое соответствует заданной трудности в сети, найдено, транзакция попадает в сеть и включается в текущий блок на производство. Для включения в блок ДР (POW) должно быть получено с использованием данных заголовка текущего блока. Далее транзакция добавляется в очередь на включение в следующий раунд. Заданная сложность становится функцией длины очереди. Простой алгоритм требует, чтобы количество начальных нулевых битов хэша POW равнялось бы количеству производителей в очереди. - -При заданном времени производства блока (3 секунды) майнер ДР (POW) должен работать на ноде (узле) с минимальной задержкой, чтобы получать заголовок блока как можно оперативнее и транслировать результат вычислений в сеть с временным запасом, достаточным для получения этих данных следующим производителем блока. Использование майнинговых пулов значительно увеличивает временную задержку и соответственно существенно сокращает время доступное на вычисление (ДР). - - -###Алгоритм майнинга - -Несмотря на то, что использоваться может любой алгоритм майнинга, представленный ниже алгоритм имеет несколько полезных свойств. При этом данный алгоритм требует подтверждение майнером факта владения приватным ключом от учетной записи, с которой в конечном счете будет произведен блок и куда будет зачислено вознаграждение. Алгоритм также требует от пользователя произвести верификацию подписи с помощью эллиптической кривой, оптимизация которой положительно скажется на проверке (валидация) всех транзакций и снизит расходы на эксплуатацию сети в долгосрочной перспективе. - -Пусть HASH = надёжная хэш-функция (SHA256 или лучше) -Пусть H = заголовок блока ID -Пусть Н2 = HASH (H + NONCE) -Пусть PRI = приватный ключ производителя -Пусть PUB = публичный ключ производителя -Пусть S = SIGN (PRI, HASH (H)) -Пусть K = RECOVER_PUBLIC_KEY (H2, S) -Пусть POW = HASH (K) - - - -Для того, чтобы быть действительным POW должно быть меньше заданной трудности, и RECOVER_PUBLIC_KEY (H2, S) должно равняться PUB. Случайность задается майнером либо за счёт случайного выбора NONCE, либо при генерации подписи методом эллиптической кривой. Это в сочетании с выбором приватного ключа должно обеспечить, что каждый майнер работает над своим вычислением. - -Начиная и заканчивая POW с криптографически защищенной хэш-функцией мы можем гарантировать, что любые уязвимости или вычислительные сокращения, которые могут существовать в алгоритме RECOVER_PUBLIC_KEY или алгоритме SIGN, в конечном счете вернут алгоритм POW к простому POW, основанному на хэш-функции. - -###Атака двойного расхода - -Двойное расходование средств может произойти в любой момент, когда при реорганизации блокчейна исключаются ранее включенные транзакции. Это может произойти при разрыве связи. При делегируемом доказательстве работы (DPOW) вероятность разрыва связи и проведения двойной атаки очень низка. - -Сеть способна мониторить свое состояние, и любой разрыв связи сразу обнаруживается, поскольку майнеры не могут производить блоки по расписанию. Когда это происходит, пользователям необходимо подождать до тех пор, пока половина майнеров не подтвердит их транзакции, что может занять до 42 секунд. - -###Транзакции в качестве доказательства владения - -Каждая транзакция в сети может дополнительно включать хэш недавнего блока. Если это имеет место быть, то подписант транзакции может быть уверен в том, что его транзакция принадлежит основному блокчейну. Побочным эффектом этого процесса является то, что со временем все заинтересованные стороны начинают напрямую подтверждать целостность реестра транзакций. - -###Реорганизация блокчейна - -_Поскольку подавляющее большинство майнеров выбираются, подотчетны и получают временной слот для майнинга, ситуация, когда существуют параллельные блокчейны, маловероятна. Время от времени из-за задержек в сети майнеры не будут вовремя получать предыдущий блок. При такой ситуации последующий майнер разрешает эту проблему путем майнинга с использованием первого блока из предыдущих, который он получил. После 14 подтверждений (около 42 секунд) транзакция подтверждается 2/3 активных майнеров, что означает невозможность отката назад блокчейна без ручного вмешательства._ - -Несмотря на то, что система устойчива к естественному переструктурированию, существует вероятность создания конкурирующих цепочек в один или два блока путем использования специализированного программного обеспечения, разрывов в сети или действий некомпетентных или злонамеренных майнеров. Система всегда будет выбирать цепочку блоков, над созданием которой работает максимальное количество майнеров. Майнер, который работает на себя, сможет производить только один блок за раунд. Соответственно, его блокчейн будет всегда иметь более низкий уровень участия, чем альтернативный блокчейн. Майнер или небольшая группа майнеров не смогут создать блокчейн, где будет задействовано больше майнеров, чем в основном блокчейне. Уровень участия рассчитывается путем сравнения числа блоков, ожидаемого к производству за определенный период времени, и фактического количества произведенных блоков. - -###Максимальная децентрализация - -В случае с делегируемым доказательством работы (DPOW) все заинтересованные стороны имеют возможность влиять на процесс производства блоков пропорционально своей доле. Каждый, кто желает участвовать в майнинге, может произвести блок без участия в гонке за голоса избирателей. Любая другая существующая система консенсуса исключает подавляющее большинство интересантов от участия в процессе майнинга. Исключение происходит по-разному: некоторые блокчейны имеют встроенный механизм участия «только по приглашениям», другие исключают, создав системы при которых стоимость участия превышает возможный заработок. Есть системы, которые технически позволяют каждому участвовать в процессе майнинга, но эти участники игнорируются несколькими крупными игроками, которые производят подавляющее большинство всех блоков. Только механизм делегированного доказательства работы гарантирует равномерное распределение майнинга среди большинства и позволяет каждому влиять на выбор майнеров. - - diff --git a/golosd/mechanics/dynamic_account_permissons.md b/golosd/mechanics/dynamic_account_permissons.md deleted file mode 100644 index 1e12f39e..00000000 --- a/golosd/mechanics/dynamic_account_permissons.md +++ /dev/null @@ -1,89 +0,0 @@ -# Динамические права -> Система динамической выдачи прав доступа учётным записям - -###Управление учетными записями - -В Голосе права доступа привязаны к пользователям, что облегчает их использование. Каждая учетная запись может управляться через средневзвешенную комбинацию других учётных записей и приватных ключей. В результате формируется иерархическая структура прав доступа, соответствующая тем, что существуют в реальной жизни, которая позволяет облегчить многопользовательское управление средствами. Многопользовательское управление существенно повышает безопасность системы и при правильном использовании исключает риск кражи при хакерской атаке. - -###Основа - -Использование нескольких цифровых подписей для чувствительных операций на блокчейне - важная составляющая безопасности блокчейн-систем. В то время как единственный ключ может быть скомпрометирован, множество ключей, сохранённые в разных местах, обеспечивают избыточную защиту, что повышает безопасность использования систем. - -Традиционно блокчейн-системы имеют следующие недостатки: - -- Модель М из N не соответствует иерархии принятия решений во многих реальных организациях. - -- Равномерное распределение весов на M ключей не позволяет перенести на блокчейн асимметричное владение учетной записью. - -- Координацию и подписание требуется проводить за пределами основной системы. - -- Ключи нельзя изменить без координации со всеми задействованными участниками. - -- Подпись нельзя отозвать в процессе ожидания подписания от других участников. - -###Пример использования - -Технология мультиподписи - технология о правах доступа, и распределение прав доступа должно соответствовать реальным жизненным ситуациям и реальным управленческим структурам. Представим, что существует компания, управляемая тремя индивидуумами: Алисой, Марком, Иваном. Алиса и Марк каждый владеют 40% акций компании, Иван - 20%. Для проведения операции по списанию средств в этой компании требуется подтверждения расходов от 2 из 3 владельцев. Можно для данной компании рассмотреть вариант с приватными ключами и использование мультиподписи 2 из 3. При этом Алиса может захотеть, например, управлять своей учетной записью через двухфакторную аутентификацию, поскольку это обеспечивает большую безопасность как Алисе, так и компании. Как сделать так, чтобы Алиса смогла использовать двухфакторную аутентификацию без внесения изменений в структуру прав доступа. - -###Решение -В Голосе используется новый подход к правам доступа, основанный на том, что учетным записям присваиваются глобальные уникальные идентификаторы (ID). -При такой системе возможно создать учетную запись, которая не имеет собственных приватных ключей, но зависит от одобрения других учётных записей. Другие учетные записи, в свою очередь, могут зависеть от одобрения ещё каких-либо учётных записей. Таким образом формируется иерархическая система учётных записей, которые выдают права доступа. При этом разрешительная система каждой учетной записи может быть изменена независимо от других учётных записей в иерархической структуре. Это делать систему прав доступа динамической. - -Для каждой учетной записи может быть определена система прав доступа через набор ключей и (или) другие учётные записи, к каждому (ой) из которых соответствуют весовые коэффициенты, назначенные владельцем учетной записи. Если суммарный вес ключей и (или) сторонних учётных записей превышает уровень, установленный владельцем данной учетной записи, то право доступа выдаётся. - -Другое решение заключается в трансляции частично подписанных транзакций и разрешения на публикацию транзакций других учётных записей, которые могут одобрять или не одобрять первоначальную транзакцию. Это упрощает координацию подписания транзакций, позволяет пользователям передумать и принять в работу транзакцию сразу после финального одобрения. - - -Описанный вариант требует структурирования процесса мультиподписания следующим образом: -- Кто-то предлагает транзакцию и одобряет её со своей учетной записи -- Другие пользователи добавляют "да", "нет" к транслируемой транзакции -- После того, как изначальная транзакция получает одобрение всех учётных записей, она подтверждается - -###Владелец и активные ключи -Каждая учетная запись имеет два вида управления: владелец и активный участник. -Система управления представляет собой набор из ключей и (или) учётных записей, каждому (ой) из который присвоен свой весовой коэффициент. В каждой системе устанавливается свой "весовой" уровень, которые должен быть преодолён для совершения операции. -Вид управления “владелец” создан для управления холодным хранением, и его первостепенная роль - назначение активных участников или изменение владельца. -Вид управления “активный участник” предназначен для "горячего" (ежедневного) управления и может совершать все операции за исключением смены владельца. - - -В описанном примере 2-х факторная аутентификация осуществляется с помощью со-подписанта в режиме активного участника. При таком подходе пользователь может быть уверен, что его учетная запись всегда будет под контролем, при том, что контролированием будет осуществляться в режиме владельца и соответственно будет хранится так, что его невозможно будет взломать. Это означает, например, что для действий с использованием учетной записи компании требуется одобрение членов совета директоров, каждый из которых может использовать 2-х факторную аутентификацию. - -###Сбор подписей - -Одна из причин, по которой использование мультиподписания было затруднено в прошлом, - это то, что требовался ручной сбор подписей через специальную инфраструктуру. При этом отсутствовала возможность отмены действия после подписания транзакции. Соответственно, последний подписывающий имел небольшое преимущество перед предыдущими подписантами. При иерархических структурах управления сбор подписей становится все более сложным. - -Для его упрощения на блокчейн должен управляться процесс сбора подписей посредством слежения за частично одобренными транзакциями. При таком процессе каждая учетная запись может добавлять (удалять) права доступа на транзакцию автоматически без использования внешней системы координации. Это особенно актуально для многоуровневых иерархических структур. - -Для обеспечения связности в блокчейне транзакция распространяется только на 2 уровня в глубину. При большем количестве уровней принятия решений, учетная запись должна запустить транзакцию на одобрение предложения (другой транзакции). Когда первая транзакция одобрена, тогда право доступа выдаётся на предложение (вторую транзакцию). При таком подходе каждый индивидуум вносит плату за транзакцию только когда одобряет действие (транзакцию), и каждая транзакция проходит максимум 1 верификацию сетью. Это позволяет создавать многоуровневые иерархические системы, нивелируя риск выдачи разрешений в системе, где операции не связаны друг с другом. - - - -###Масштабирование -В теории учетные записи могут формировать иерархические структуры любой глубины, и проведение транзакций через такие структуры может длится неопределенное количество времени. На практике вероятность того, что транзакция потребует одобрение более чем с двух уровней иерархической структуры, мала. Соответственно, это обеспечивает связность вычислений. Во все решения, принятие которых потребует одобрение более, чем с двух уровней иерархической структуры, будет вовлечено много людей. Соответственно, вероятность их подписания будет низкой. При этом такие транзакции могут проходить через сеть благодаря системе отслеживания частично одобренных транзакций. - - - -При таком подходе член совета директоров может предложить транзакцию на одобрение. Это может соответствовать предложению или предложению к учетной записи на одобрение. В процессе одобрения данной транзакции оплата будет собираться по мере выдачи разрешений всеми вовлечёнными в процесс. При этом не потребуется выделять время на несвязанные вычисления. - -###Цикличность -В системе возможна реализация функции запроса на одобрение транзакции друг у друга двумя учётными записями -Представьте, создана учетная запись X, которая подтверждается учётными записями A и Y. Представьте далее, что создана учетная запись Y, которая подтверждается с учётных записей B и X. Символьно это можно записать как: - - - A -> X <-> Y - B -> Y <-> X - -А предлагает X потратить 1 единицу и ждёт одобрения Y. B предлагает Y одобрить предложение A и ждёт одобрения от X. -Данную ситуацию невозможно разрешить в стандартной ситуации индивидуального одобрения транзакций по следующим причинам: - -- Ни одна из учётных записей не может совершить действие без одобрения другой, соответственно, транзакция не может пройти -- Цикличность может быть гораздо более сложной и запутанной, чем в представленном примере -- При возникновении зацикливания в режиме активного участника возможно использование режима владельца для того, чтобы разорвать цикл. Однако, при возникновении зацикливания в режимах владельца и активного участника разрыв цикла невозможен. На практике ПО клиента может отслеживать ситуации зацикливания и не допускать их возникновения. - -###Вывод -Использование системы динамической выдачи прав доступа при мультиподписании воссоздать естественные системы управления организациями на блокчейн. Этот подход облегчает использование системы, делает её более безопасной по сравнению с действующими решениями. - -###Благодарности -Вики Риппл содержит описание идентичного подхода к мультиподписанию, который был открыт создателями Стимит. - - diff --git a/golosd/mechanics/median-props.md b/golosd/mechanics/median-props.md deleted file mode 100644 index 2461bdd2..00000000 --- a/golosd/mechanics/median-props.md +++ /dev/null @@ -1,49 +0,0 @@ -# Медианные параметры - -Ряд параметров блокчейна являются голосуемыми, т.е. делегаты подают свои значения, из которых потом формируются некие консенсусные значения. - -# Медианный курс GBG/GOLOS - -Данный курс отвечает за внутренние конвертации GBG-GOLOS и начисления вознаграждений. - -В исходных текстах установление медианного курса происходит в `void database::update_median_feed()` в database.cpp. - -Обновление курса происходит 1 раз за период `STEEMIT_FEED_INTERVAL_BLOCKS` (1 час на момент 0.17.0). При этом: - -1. Происходит вычисление текущего медианного курса следующим образом: - 1. Проверяется количество опубликованных ценовых фидов в текущем раунде подписи блоков. Дальнейшая обработка продолжается, только если опубликовано не менее чем `STEEMIT_MIN_FEEDS` (7 на момент 0.17.0) - 2. Список фидов сортируется по значению. - 3. Берётся курс, который оказался в середине отсортированного списка. См. статью [Медиана](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%BD%D0%B0_\(%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0\)). -2. Текущее значение медианного курса попадает в условную таблицу медианных курсов, которая хранит курсы за промежуток времени `STEEMIT_FEED_HISTORY_WINDOW` (3.5 дня на момент 0.17.0). -3. Таблица с этими курсами сортируется и уже из неё берётся значение, которое находится в середине. -4. Проверяется, что получившееся значение не меньше минимально возможной цены GBG/GOLOS, которая является ограничителем размера долга GBG. Минимальная цена вычисляется по формуле `min_price = 9 * sbd_supply.amount / current_supply.amount` -4. Это значение (либо min_price) и становится текущим действующим медианным курсом, по которому происходят все операции конвертаций и прочие. - -## Некоторые следствия - -* Делегаты с устаревшими или сильно завышенными/заниженными прайсфидами мало влияют на медианный курс, так как оказываются по краям отсортированного списка -* Медианный курс меняется плавно, в течении 3.5 дней -* Можно условно предсказать, куда стремится медиана, глядя на самое последние значение из истории опубликованных медиан (можно получить с помощью `get_feed_history`) - -# Другие медианные параметры - -Помимо курса, делегаты голосуют и за другие параметры. В них используется более простой механизм: - -1. Берутся все значения параметра, опубликованные делегатами в текущем раунде подписи блоков. -2. Список сортируется по значению параметра. -3. Берётся значение, которое оказалось в середине отсортированного списка. -4. Получившееся значение вступает в силу немедленно. - -Список прочих голосуемых параметров: - -## account\_creation\_fee - -Устанавливает количество токенов GOLOS, которые перейдут в Силу Голоса нового аккаунта во время создания аккаунта от создателя. - -## maximum\_block\_size - -Устанавливает максимально допустимый размер блока в сети. - -## sbd\_interest\_rate - -Устанавливает размер годового процента по GBG, выплачиваемого держателям. Значение 1000 соответствует 10%. \ No newline at end of file diff --git a/golosd/mechanics/performance_and_scalability.md b/golosd/mechanics/performance_and_scalability.md deleted file mode 100644 index 00e29f58..00000000 --- a/golosd/mechanics/performance_and_scalability.md +++ /dev/null @@ -1,112 +0,0 @@ -## Производительность и масштабируемость - -_Голос способен поддерживать работу в системе большего количества пользователей, чем Реддит._ - -_В 2015 году 8,7 миллионов пользователей Реддит создавали в среднем 23 комментария в секунду, что соответствовало 83 комментариям в год на одного пользователя. Количество постов верхнего уровня равнялось 73 миллионам, то есть в среднем появлялось 2 новых поста в секунду. Количество отданных за посты голосов составляло около 7 млрд, что соответствовало 220 голосам в секунду. Учитывая все сказанное, работа Реддита на блокчейн потребовала бы в среднем 250 транзакций в секунду. Голос способен обрабатывать 1000 транзакций в секунду._ - -###Общая информация - - - Голос построен на той же технологии, что и блокчейн BitShares (который способен обрабатывать 1000 транзакций в секунду). - - -- Нижеприведенный текст является адаптацией документации BitShares. - -
        - -Для достижения указанной производительности разработчики системы опирались на систему LMAX Exchange, которая способна обрабатывать 6 миллионов транзакций в секунду. Ключевыми являются следующие пункты: - -- Сохранять все в памяти. -- Держать основную бизнес-логику в одном потоке (треде). -- Держать криптографические операции (хэши и подписи) вне ключевой бизнес-логики. -- Разделять проверку на зависимую от статуса и независимую от статуса. -- Использовать объектно- ориентированную модель данных. - -Следуя этим простым правилам, Голос способен обрабатывать 10000 транзакций в секунду без каких-либо значительных усилий на оптимизацию. - -###Теория - -Блокчейн представляет собой глобальный реестр транзакций, при внесении в который в определенный момент времени каждая транзакция определенным образом изменяет состояние реестра. Порядок обработки транзакций может изменить статус других транзакций. Например, невозможно снять деньги с банковского счета до тех пор, пока поступления не этот счет не прошли клиринг. Невозможно подтвердить валидность транзакции до тех пор, пока все предшествующие ей транзакции, в которые вовлечена учётная запись, не обработаны. - -_Теоретически, транзакции с двух несвязанных учетных записей могут быть обработаны одновременно при условии, что они не связаны друг с другом. На практике задача на установление независимости транзакций в реестре, управляемом через умные контракты с произвольными условиями, является неразрешимой. Единственный способ удостовериться в том, что две транзакции действительно независимы - учет их в отдельных реестрах и периодический обмен данными между ними. Аналогией может быть компромисс по производительности между архитектурой неравномерного доступа к памяти (NUMA) и архитектурой равномерного доступа к памяти (UMA)._ - - - На практике UMA намного проще и дешевле разработать. - -NUMA, как правило, используется как вынужденное решение при создании суперкомпьютеров или гигантских кластеров. - -В среде компьютерщиков является установленным фактом, что масштабирование производительности через параллельное выполнение операций далеко не так легко реализовать, как это было на заре компьютерной эры, когда требовалось только увеличить тактовую частоту процессора. Именно по этой причине конструкторы ЦПУ стараются максимизировать производительность в одном потоке до предела до перехода на параллельные потоки. Кластерный подход к организации вычислений используется только в том случае, когда недостаточно параллельных потоков. - -Многие в криптоэкономике пытались решить проблему масштабируемости путем немедленного перехода к кластерному решению без детального изучения того, что технологически возможно создать на одном ядре одного компьютера. - -####LMAX - -*LMAX представляет собой кейс для изучения архитектуры с высокой масштабируемостью и производительностью, показывая, что может быть достигнуто в рамках одного потока. LMAX является розничной торговой площадкой, которая стремится стать самой быстрой биржей в мире. Они оказались удивительно щедрыми и публично поделились своими наработками.* - -#####_Вот краткий обзор архитектуры LMAX:_ - -Процессор бизнес-логики - место, где обрабатываются все последовательные транзакции и происходит подбор пар на покупку и продажу. Это единственный поток, в котором обрабатываются миллионы ордеров в секунду. Эта архитектура легко переносима на блокчейн-системы. - -Роль системы ввода в LMAX - сбор ордеров от пользователей из разных источников и присвоение заданных порядковых номеров. После назначения порядковых номеров ордера дублируются, заносятся, транслируются на многие процессоры бизнес-логики. Задачи ввода являются параллельными и легко отдаются на откуп кластеру компьютеров. - -После того как процессор бизнес-логики обрабатывает входящий поток, система вывода уведомляет всех, кому важно знать результат. Это также является параллельной задачей. - -В конечном счете LMAX смог обрабатывать 6 миллионов транзакций в секунду в процессоре бизнес-логики с использованием одного ядра обычного ЦПУ с помощью виртуальной машины Ява (Java). Если LMAX смог достичь 6 миллионов транзакций в секунду, то нет необходимости использовать в блокчейн-системах кластерные решения в случаях, когда они не обрабатывают и 10 транзакций в секунду. - -##Высокопроизводительные блокчейны - -Для достижения высокой производительности в Голосе используются наработки LMAX. При этом несколько важных моментов должны быть соблюдены: - -- Сохранение всей информации в памяти. -- Минимизация операций по синхронизации примитивов (?) -- Сведение к минимуму ненужных вычислений в процессоре бизнес-логики. - -Память становится дешевле с каждым днем в результате того, что является параллельной. Объем памяти необходимый для отслеживания баланса учетной записи и разрешений каждого человека в Интернете составляет меньше, чем 1 терабайт оперативной памяти, которую можно приобрести менее чем за $ 15000 и установить на обычные (высококлассные) материнские платы серверов. Задолго до того, как 3 млрд человек начнут использовать Голос, такой объем оперативной памяти будет установлен на каждом среднестатистическом компьютере. - -Узким местом для блокчейн-систем является не оперативная память, а пропускная способность. При 1 млн транзакций в секунду и 256 байтах на одну транзакцию требуется пропускная способность сети в 256 мегабайт в секунду (1 Гбит / сек). Такая пропускная способность не является широко распространенной. Однако, этот уровень составляет долю от 100 Гбит / сек, по которым подключены к Интернет более чем 210 учебных заведений США, 70 американских корпораций и 45 американских некоммерческих и государственных учреждений. - -Соответственно, при правильном проектировании блокчейн-система может легко держать всю информацию в оперативной памяти и масштабироваться таким образом, чтобы обрабатывать миллионы транзакций в секунду. - -Использование идентификаторов вместо хэш-функций - -В однопотоковых системах циклы процессора являются дефицитным ресурсом, который нужно экономно расходовать. Традиционно блокчейн-системы используют криптографические хэши для создания глобально уникальных идентификаторов, которые гарантированно никогда не будут пересекаться. Проблема использования хэшей в том, что они требуют значительно больше памяти и больше циклов ЦПУ для обработки. Для поиска учетной записи по хэшу требуется значительно больше процессорного времени, чем в случае использования прямого индекса массива данных. 64-битные целые числа проще сравнивать и использовать, чем 160-битные идентификаторы. Использование хэш-идентификаторов ведет к уменьшению места в кэше процессора и требует больше оперативной памяти при обработке. В современных операционных системах редко используемая оперативная память оптимизируется за счет сжатия, но хэш-идентификаторы являются случайными данными, которые не могут быть сжаты. - -К счастью, блокчейны позволяют присваивать уникальные глобальные идентификаторы, которые не пересекаются друг с другом. Соответственно, можно полностью избавиться от хэш-идентификаторов (биткоин-адресов) для обозначения учетной записи, баланса, или разрешения. - -###Проведение операции проверки подписи вне процессора бизнес-логики - -Все транзакции в блокчейн сети зависят от криптографических подписей, по которым проверяются права доступа. В общем случае права доступа могут быть изменены в результате других транзакций. Это означает, что права доступа должны быть определены таким образом, чтобы не требовалось криптографических вычислений внутри процессора бизнес-логики. - -Для этого каждому публичному ключу должен быть присвоен уникальный и неизменяемый идентификатор. После того, как идентификатор назначен, система ввода проверяет, что подпись совпадает с присвоенным идентификатором. Соответственно, к моменту, когда транзакция попадает в процессор бизнес-логики, единственный оставшийся шаг – проверка идентификатора. - -Этот же метод может быть использован для сокращения проверки предварительного условия для любого неизменного объекта со статическим идентификатором. - -###Создание транзакций со статической проверкой - -Многие свойства транзакций могут быть проверены статически без доступа к текущему состоянию блокчейн-системы. Эти проверки включают в себя проверку диапазона параметров, де-дублирование входных значений, порядок сортировки массивов и т.д. Вообще говоря, многие проверки могут быть выполнены, если транзакция содержит данные о «предполагаемом» глобальном состоянии системы. После того как проверки выполнены, от процессора бизнес-логики требуется только убедиться, что "предположения" о состоянии системы по-прежнему верны, что может быть сведено к проверке отметки о времени создания объектов, на которые ссылается транзакция, со временем подписания транзакции.(???) - -###Умные контракты - -Во многих блокчейн-системах для описания всех операций используется скриптовый язык общего назначения. В конечном итоге это ведет к тому, что процессор бизнес-логики представляет собой виртуальную машину, а все операции являются скриптами этой виртуальной машины. Этот подход натыкается на ограничения однопоточного исполнения кода на реальном ЦПУ, и усугубляет их путем проведения всех операций через виртуальный процессор. Виртуальный процессор, даже в случае с JIT-компиляцией всегда медленнее, чем реальный ЦПУ, но скорость расчетов – это не единственная проблема при подходе, когда все является скриптом. - -При определении транзакций на таком низком уровне большая часть статических проверок и криптографических операций обрабатывают процессором бизнес-логики, и соответственно общая пропускная способность системы падает. Криптографическую проверку подписи нужно не на скриптовом движке проводить, нечего его нагружать - -_Исходя из данных по LMAX, мы знаем, что виртуальная машина для блокчейн должна быть разработана как однопоточная система. Это означает, что она изначально должна быть оптимизирована для JIT компиляции, и что наиболее часто используемые умные контракты должны изначально поддерживаться блокчейном. Только редко используемые пользовательские контракты должны обрабатываться через запуск на виртуальной машине. Эти пользовательские контракты должны быть оптимизированы под максимизацию производительности, что означает ограничение на использование адресуемой памяти при возможности обработки в кэше процессора._ - -###Объектно-ориентированная модель данных - -Одним из преимуществ сохранения всей информации в оперативной памяти является то, что программное обеспечение может имитировать реальные взаимоотношения между данными. Это означает, что процессор бизнес-логики может легко использовать указатели на данные, размещенные в памяти, а не посылать запросы к базе данных. Это также означает, что данные могут быть доступны без копирования и оперативно изменены. Эта оптимизация предполагает увеличение на порядок производительности системы по сравнению с подходом, при котором идет работа с базой данных. - -###Размер транзакций - -Блокчейн, который обрабатывает 100000 транзакций каждую секунду, создаёт большое количество данных. Средний размер транзакции на Риппл и Биткоин составляет около 250 байт. Подобная транзакция в Голосе занимает в среднем 100 байт. Другими словами, конкурирующие системы требуют в 2,5 раза больше полосы пропускания для прохождения одинакового количество транзакций. При пропускной способности 1 гигабит/секунду, передача блока с 100000 транзакций займет около 0,1 секунды. В указанных выше системах на это потребуется 0,25 секунды. Принимая во внимание другие задержки, свойственные пиринговым сетям - становится ясно, что размер транзакции прямо влияет на интервал блока и задержку подтверждения. - -Размер транзакций часто является показателем количества данных, которые процессор должен обработать. Таким образом, он служит указанием на то, как скоро однопотоковый ЦПУ будет полностью загружен. - -Некоторые оптимизации возможны во всех протоколах, если они предполагают, что все узлы получают информацию обо всех транзакциях, и требуется только передать упорядоченный список идентификаторов транзакций. - -###Вывод - -Проектирование высокопроизводительного блокчейна не является чем-то сверхъестественным и не требует ни детального знания протоколов, ни распараллеливания процесса обработки транзакций. Вместо этого, для высокопроизводительного блокчейна требуется перенести все расчеты, которые не являются критическими, из ядра бизнес-логики, и разработать протокол, который облегчает такую оптимизацию. Это то, что реализовано в Голосе. - - - - diff --git a/golosd/mechanics/trx-expiration.md b/golosd/mechanics/trx-expiration.md deleted file mode 100644 index 78532ee5..00000000 --- a/golosd/mechanics/trx-expiration.md +++ /dev/null @@ -1,15 +0,0 @@ -# Устаревание транзакций - -Транзакция, отправляемая на golos-ноду, должна содержать поле expiration, указывающее момент времени, до которого транзакция является валидной. Если по каким-то причинам транзакция не будет включена в блок за это время, то она устареет и будет просто удалена нодой. - -# Что происходит при форках сети - -В некоторых случаях происходит такая ситуация, при которой блок генерируется одновременно двумя делегатами, и некоторое короткое время параллельно существуют две цепи блоков. При обнаружении такой ситуации нода просматривает цепочку в обратном порядке до нахождения last irreversible block. Самая длинная цепочка в итоге становится основной. При этом читаются все транзакции из блоков и опять попадают в очередь на включение в блоки (см. libraries/chain/database.cpp `void database::pop_block()`). - -Чтобы исключить потерю транзакций во время форков сети, следует задавать expiration больше чем время до `last_irreversible_block`, например 60 секунд. - -# Связь с TaPoS - -В транзакции так же имеются поля `ref_block_num` и `ref_block_prefix`, которые как бы указывают, что "данная транзакция является валидной, если она находится в цепи, в которой имеется блок с номером X и с префиксом Y", см. [Транзакции как доказательство долей](/4-documentation/belaya-bumaga-po-dpos.html#транзакции-как-доказательство-долей-transactions-as-proof-of-stake---tapos) - -Соответственно, если транзакция ссылается на блок, который присутствует только в побочной цепи, данная транзакция будет отброшена нодой в любом случае. \ No newline at end of file diff --git a/golosd/mix/riski-izmenenija-GBG.md b/golosd/mix/riski-izmenenija-GBG.md deleted file mode 100644 index 99a26b6f..00000000 --- a/golosd/mix/riski-izmenenija-GBG.md +++ /dev/null @@ -1,51 +0,0 @@ -# GOLOS·CORE - -## Риски увеличения отклонения токена GBG от его номинальной стоимости - -В этой статье приведена зависимость токенов в актуальной версии блокчейна GolosChain, а также обозначены риски увеличения стоимости токена GBG без увеличения его общей массы. Основанием для написания статьи послужила возникшая дискуссия делегатов по изменению гарантированного долга системы, а также появление задачи [№817][link_1] для разработчиков программного кода. - -В системе блокчейна GolosChain токен GBG (англ. Gold Backed by Golos) имеет прямую аналогию с токеном Steem Dollar, но, в отличие от последнего, имеет привязку не к доллару, а к одному миллиграмму золота. Привязка токена к золоту по замыслу должна обеспечить токен GBG большей стабильностью и большим доверием со стороны пользователей блокчейна. - -Основным токеном, используемым в расчетах в системе GolosChain, является GOLOS, курс которого по отношению к GBG может изменяться со временем. По замыслу токен GBG должен был выполнять роль стабильного токена и не являться “спекулятивным” в отличие от токена GOLOS. - -В системе GolosChain действует ранее введенное ограничение (правило) на устанавливаемую делегатами стоимость токена GBG (при обмене GBG на GOLOS внутри системы), требующее выполнение следующего условия: - * общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, не должна превышать 10 % от стоимости всех токенов GBG и GOLOS. - -*Какие последствия могут быть в случае изменения или полного отказа от порогового значения*.1 -Эти два вида токена взаимосвязаны в системе таким образом, что в случае возникновения резкого снижения курса токена GOLOS следует значительный спрос на токен GBG. Реализованный (“зашитый”) в блокчейне алгоритм препятствует удовлетворению возрастающего спроса на GBG без его дополнительной эмиссии (случай возникновения “задолженности” системы в GBG). Эмиссия GBG может являться как одним из вариантов удовлетворения спроса на этот вид токена. Недостатком этого варианта является отклонение реальной стоимости токена GBG от его номинальной, а также риск дискредитации идеи стабильного актива. - -Общая стоимость всех токенов GBG, рассчитанная по заложенной в системе цене, не должна превышать 10 % от стоимости всех токенов GBG и GOLOS. Выполнение этого условия позволяет обеспечить актив номиналом, но не позволяет полностью удовлетворить резкий спрос на токен GBG. Существующее в системе процентное соотношение этих токенов в виде диаграммы показано на рис. 1. - -![Соотношение_токенов](https://raw.githubusercontent.com/GolosChain/wiki/master/_images/tokens.png) - -Рис. 1 — Процентное соотношение токенов в системе - -Позиция делегатов — увеличить стоимость токена GBG без увеличения его общей массы. Для этого следует либо отменить действующее правило по ограничению на стоимость токена GBG, либо изменить в нем условие процентного соотношения с 10 до 20 %. - -Реализация такого решения связана с большими рисками и может вызвать падение стабильности курса GBG и, как следствие, утрату доверия к этому виду криптовалюты (более подробно изложено в [статье][link_2] от litrbooh). - -Функционирование блокчейна следует установленным правилам, заложенными в программном коде финансовых инструментов. Реализация в блокчейне принятых изменений в правилах означает не только выпуск очередной версии блокчейна, но также выпуск качественно нового продукта. Перед выпуском очередной версии блокчейна все его пользователи предварительно оповещаются, а также уведомляются о каждом изменении в правилах. После этого каждый из пользователей принимает для себя решение, следует ли ему продолжать использовать блокчейн с измененными правилами или отказаться от него вообще. - -Внесение предлагаемого делегатами изменения в правило может по разному отразиться на ожидаемых результатах пользователей, а также на выстроенных ими планах на долгосрочную перспективу в соответствии с заранее оговоренными правилами. - -В случае изменения порогового значения для курса токена с 10 до 20 % у одной части пользователей блокчейна в силу сложных финансовых причин может появиться дополнительный (неожиданный) выигрыш, в то время как другие пользователи почувствуют убытки. Такое изменение порогового значения, возможно, повысит функциональную ценность продукта. Тогда следует полагать, что выигрыш этой части пользователей будет обеспечен за счет именно добавленной ценности. С другой стороны, странно было бы полагать, что изменение одного параметра в тексте программы продукта может обеспечить выигрыш пользователям. Более правильное обоснование получения выигрыша у одной части пользователей объясняется именно понесенными убытками другой части пользователей. И, следовательно, настойчивое желание внести подобное изменение в правила будет рассматриваться как неуважение к той другой части пользователей. - -Внесение изменения в правило не является сложным и легко реализуемо. Тем не менее, такое изменение связано с рисками и может вызвать негативные последствия, в том числе: -— потеря части клиентов из-за отказа дальнейшего ими использования блокчейна; -— дискредитация идеи стабильности актива; -— недоверие к принимаемым правилам, в соответствии с которыми функционирует блокчейн. - -На данный момент принятие решения по изменению порогового значения курса GOLOS по отношению к GBG является недостаточно обоснованным и требует дальнейших обсуждений. Следует также заметить, что не все делегаты согласны с принятием этого решения. - -К примеру, следует также рассмотреть вариант, основанный на обмене токенов GOLOS-GBG на внутренней бирже, реализованной на Golos.io. Если текущий гарантированный системой курс обмена GBG на GOLOS не устраивает, то только в этом случае следует проводить обмен на внешней бирже. - -1 *Эта строка добавлена в текст после поднявшейся дискуссии о якобы имеющем место отклонении стоимости GBG в системе больше порогового. Возможно некоторые читатели восприняли следующую часть текста как уже существующее поведение системы. На самом деле далее описываются всего лишь возможные последствия в случае изменения или удаления 10-типроцентного порогового значения.* - - -[link_1]: https://github.com/GolosChain/golos/issues/817 "№817" -[link_2]: https://golos.io/ru--golos/@litrbooh/ru-pochemu-delegaty-podryvayut-ideyu-stabilxnogo-aktiva-ili-pochemu-nuzhno-ubratx-proczenty-po-gbg "статье" -[link_3]: https://raw.githubusercontent.com/GolosChain/wiki/master/_images/golos_logo.png - - -**** - diff --git a/golosd/reference/cli_wallet.md b/golosd/reference/cli_wallet.md deleted file mode 100644 index fa79af69..00000000 --- a/golosd/reference/cli_wallet.md +++ /dev/null @@ -1,579 +0,0 @@ -# CLI кошелек - - - -См. также статью [Создание пользователя (cli_wallet)](https://wiki.golos.io/3-guides/stati/sozdanie-polzovatelya-ispolzuya-cliwallet.html) -### cli_walletCommands - -#### about() - -Returns info such as client version, git version of graphene/fc, version of -boost, openssl. -Returns compile time info and client and dependencies versions -cancel_order(string owner, uint32_t orderid, bool broadcast) - - Cancel an order created with create_order - -Parameters: - owner: The name of the account owning the order to cancel_order (type: - string) - orderid: The unique identifier assigned to the order by its creator - (type: uint32_t) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### convert_sbd(string from, asset amount, bool broadcast) - -This method will convert SBD to STEEM at the current_median_history price -one week from the time it is executed. This method depends upon there being -a valid price feed. - -Parameters: - from: The account requesting conversion of its SBD i.e. "1.000 SBD" - (type: string) - amount: The amount of SBD to convert (type: asset) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### create_account(string creator, string new_account_name, string json_meta, bool broadcast) - -This method will generate new owner, active, and memo keys for the new -account which will be controlable by this wallet. There is a fee associated -with account creation that is paid by the creator. The current account -creation fee can be found with the 'info' wallet command. - -Parameters: - creator: The account creating the new account (type: string) - new_account_name: The name of the new account (type: string) - json_meta: JSON Metadata associated with the new account (type: string) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### create_account_with_keys(string creator, string newname, string json_meta, public_key_type owner, public_key_type active, public_key_type posting, public_key_type memo, bool broadcast) - -This method is used by faucets to create new accounts for other users which -must provide their desired keys. The resulting account may not be -controllable by this wallet. There is a fee associated with account -creation that is paid by the creator. The current account creation fee can -be found with the 'info' wallet command. - -Parameters: - creator: The account creating the new account (type: string) - newname: The name of the new account (type: string) - json_meta: JSON Metadata associated with the new account (type: string) - owner: public owner key of the new account (type: public_key_type) - active: public active key of the new account (type: public_key_type) - posting: public posting key of the new account (type: public_key_type) - memo: public memo key of the new account (type: public_key_type) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### create_order(string owner, uint32_t order_id, asset amount_to_sell, asset min_to_receive, bool fill_or_kill, uint32_t expiration, bool broadcast) - -Creates a limit order at the price amount_to_sell / min_to_receive and will -deduct amount_to_sell from account - -Parameters: - owner: The name of the account creating the order (type: string) - order_id: is a unique identifier assigned by the creator of the order, - it can be reused after the order has been filled (type: uint32_t) - amount_to_sell: The amount of either SBD or STEEM you wish to sell - (type: asset) - min_to_receive: The amount of the other asset you will receive at a - minimum (type: asset) - fill_or_kill: true if you want the order to be killed if it cannot - immediately be filled (type: bool) - expiration: the time the order should expire if it has not been filled - (type: uint32_t) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### get_account(string account_name) - -Returns information about the given account. - -Parameters: - account_name: the name of the account to provide information about - (type: string) - -Returns - the public account data stored in the blockchain -#### get_account_history(string account, uint32_t from, uint32_t limit) - -Account operations have sequence numbers from 0 to N where N is the most -recent operation. This method returns operations in the range [from-limit, -from] - -Parameters: - account: - account whose history will be returned (type: string) - from: - the absolute sequence number, -1 means most recent, limit is - the number of operations before from. (type: uint32_t) - limit: - the maximum number of items that can be queried (0 to 1000], - must be less than from (type: uint32_t) -#### get_active_witnesses() - -Returns the list of witnesses producing blocks in the current round (21 -Blocks) -get_block(uint32_t num) - -Returns the information about a block - -Parameters: - num: Block num (type: uint32_t) - -Returns - Public block data on the blockchain -#### get_conversion_requests(string owner) - -Returns conversion requests by an account - -Parameters: - owner: Account name of the account owning the requests (type: string) - -Returns - All pending conversion requests by account -#### get_feed_history() - -Return the current price feed history - -Returns - Price feed history data on the blockchain -#### get_inbox(string account, fc::time_point newest, uint32_t limit) - -No help defined for method get_inbox -get_miner_queue() - -Returns the queue of pow miners waiting to produce blocks. -#### get_order_book(uint32_t limit) - -Gets the current order book for STEEM:SBD - -Parameters: - limit: Maximum number of orders to return for bids and asks. Max is - 1000. (type: uint32_t) -#### get_outbox(string account, fc::time_point newest, uint32_t limit) - -No help defined for method get_outbox -#### get_private_key(public_key_type pubkey) - -Get the WIF private key corresponding to a public key. The private key must already be in the wallet. -#### get_private_key_from_password(string account, string role, string password) - -Parameters: - role: - active | owner | posting | memo (type: string) -#### get_prototype_operation(string operation_type) - -Returns an uninitialized object representing a given blockchain operation. - -This returns a default-initialized object of the given type; it can be used during early development of the wallet when we don't yet have custom commands for creating all of the operations the blockchain supports. - -Any operation the blockchain supports can be created using the transaction builder's 'add_operation_to_builder_transaction()' , but to do that from the CLI you need to know what the JSON form of the operation looks like. -This will give you a template you can fill in. It's better than nothing. - -Parameters: - operation_type: the type of operation to return, must be one of the - operations defined in 'steemit/chain/operations.hpp' (e.g., - "global_parameters_update_operation") (type: string) - -Returns - a default-constructed operation of the given type -#### get_state(string url) - -Returns the state info associated with the URL -#### get_transaction(transaction_id_type trx_id) - -Returns transaction by ID. -#### get_witness(string owner_account) - -Returns information about the given witness. - -Parameters: - owner_account: the name or id of the witness account owner, or the id - of the witness (type: string) - -Returns - the information about the witness stored in the block chain -#### gethelp(const string & method) - -Returns detailed help on a single API command. - -Parameters: - method: the name of the API command you want help with (type: const - string &) - -Returns - a multi-line string suitable for displaying on a terminal -#### help() - -Returns a list of all commands supported by the wallet API. - -This lists each command, along with its arguments and return types. For -more detailed help on a single command, use 'get_help()' - -Returns - a multi-line string suitable for displaying on a terminal -#### import_key(string wif_key) - -Imports a WIF Private Key into the wallet to be used to sign transactions -by an account. - -example: import_key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 - -Parameters: - wif_key: the WIF Private Key to import (type: string) -#### info() - -Returns info about the current state of the blockchain -#### is_locked() - -Checks whether the wallet is locked (is unable to use its private keys). - -This state can be changed by calling 'lock()' or 'unlock()'. - -Returns - true if the wallet is locked -#### is_new() - -Checks whether the wallet has just been created and has not yet had a -password set. - -Calling 'set_password' will transition the wallet to the locked state. - -Returns - true if the wallet is new -#### list_accounts(const string & lowerbound, uint32_t limit) - -Lists all accounts registered in the blockchain. This returns a list of all -account names and their account ids, sorted by account name. - -Use the 'lowerbound' and limit parameters to page through the list. To -retrieve all accounts, start by setting 'lowerbound' to the empty string -'""', and then each iteration, pass the last account name returned as the -'lowerbound' for the next 'list_accounts()' call. - -Parameters: - lowerbound: the name of the first account to return. If the named - account does not exist, the list will start at the account that - comes after 'lowerbound' (type: const string &) - limit: the maximum number of accounts to return (max: 1000) (type: - uint32_t) - -Returns - a list of accounts mapping account names to account ids -#### list_keys() - -Dumps all private keys owned by the wallet. - -The keys are printed in WIF format. You can import these keys into another -wallet using 'import_key()' - -Returns - a map containing the private keys, indexed by their public key -#### list_my_accounts() - -Gets the account information for all accounts for which this wallet has a -private key -list_witnesses(const string & lowerbound, uint32_t limit) - -Lists all witnesses registered in the blockchain. This returns a list of -all account names that own witnesses, and the associated witness id, sorted -by name. This lists witnesses whether they are currently voted in or not. - -Use the 'lowerbound' and limit parameters to page through the list. To -retrieve all witnesss, start by setting 'lowerbound' to the empty string -'""', and then each iteration, pass the last witness name returned as the -'lowerbound' for the next 'list_witnesss()' call. - -Parameters: - lowerbound: the name of the first witness to return. If the named - witness does not exist, the list will start at the witness that - comes after 'lowerbound' (type: const string &) - limit: the maximum number of witnesss to return (max: 1000) (type: - uint32_t) - -Returns - a list of witnesss mapping witness names to witness ids -#### load_wallet_file(string wallet_filename) - -Loads a specified Graphene wallet. - -The current wallet is closed before the new wallet is loaded. - -Parameters: - wallet_filename: the filename of the wallet JSON file to load. If - 'wallet_filename' is empty, it reloads the existing wallet file - (type: string) - -Returns - true if the specified wallet is loaded -#### lock() - -Locks the wallet immediately. -#### network_add_nodes(const vector & nodes) - -No help defined for method network_add_nodes -#### network_get_connected_peers() - -No help defined for method network_get_connected_peers -#### normalize_brain_key(string s) - -Transforms a brain key to reduce the chance of errors when re-entering the -key from memory. - -This takes a user-supplied brain key and normalizes it into the form used -for generating private keys. In particular, this upper-cases all ASCII -characters and collapses multiple spaces into one. - -Parameters: - s: the brain key as supplied by the user (type: string) - -Returns - the brain key in its normalized form -#### post_comment(string author, string permlink, string parent_author, string parent_permlink, string title, string body, string json, bool broadcast) - -Post or update a comment. - -Parameters: - author: the name of the account authoring the comment (type: string) - permlink: the accountwide unique permlink for the comment (type: - string) - parent_author: can be null if this is a top level comment (type: - string) - parent_permlink: becomes category if parent_author is "" (type: string) - title: the title of the comment (type: string) - body: the body of the comment (type: string) - json: the json metadata of the comment (type: string) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### publish_feed(string witness, price exchange_rate, bool broadcast) - -Post or update a comment. - -Parameters: - author: the name of the account authoring the comment (type: string) - permlink: the accountwide unique permlink for the comment (type: - string) - parent_author: can be null if this is a top level comment (type: - string) - parent_permlink: becomes category if parent_author is "" (type: string) - title: the title of the comment (type: string) - body: the body of the comment (type: string) - json: the json metadata of the comment (type: string) - broadcast: true if you wish to broadcast the transaction (type: bool) - -unlocked >>> gethelp publish_feed -gethelp publish_feed - -A witness can public a price feed for the STEEM:SBD market. The median -price feed is used to process conversion requests from SBD to STEEM. - -Parameters: - witness: The witness publishing the price feed (type: string) - exchange_rate: The desired exchange rate (type: price) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### save_wallet_file(string wallet_filename) - -Saves the current wallet to the given filename. - -Parameters: - wallet_filename: the filename of the new wallet JSON file to create or - overwrite. If 'wallet_filename' is empty, save to the current - filename. (type: string) -#### send_private_message(string from, string to, string subject, string body, bool broadcast) - -No help defined for method send_private_message -#### serialize_transaction(signed_transaction tx) - -Converts a signed_transaction in JSON form to its binary representation. - -TODO: I don't see a broadcast_transaction() function, do we need one? - -Parameters: - tx: the transaction to serialize (type: signed_transaction) - -Returns - the binary form of the transaction. It will not be hex encoded, this - returns a raw string that may have null characters embedded in it -#### set_password(string password) - -Sets a new password on the wallet. - -The wallet must be either 'new' or 'unlocked' to execute this command. -set_voting_proxy(string account_to_modify, string proxy, bool broadcast) - -Set the voting proxy for an account. - -If a user does not wish to take an active part in voting, they can choose -to allow another account to vote their stake. - -Setting a vote proxy does not remove your previous votes from the -blockchain, they remain there but are ignored. If you later null out your -vote proxy, your previous votes will take effect again. - -This setting can be changed at any time. - -Parameters: - account_to_modify: the name or id of the account to update (type: - string) - proxy: the name of account that should proxy to, or empty string to - have no proxy (type: string) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### sign_transaction(signed_transaction tx, bool broadcast) - -Signs a transaction. - -Given a fully-formed transaction that is only lacking signatures, this -signs the transaction with the necessary keys and optionally broadcasts the -transaction - -Parameters: - tx: the unsigned transaction (type: signed_transaction) - broadcast: true if you wish to broadcast the transaction (type: bool) - -Returns - the signed version of the transaction -#### suggest_brain_key() - -Suggests a safe brain key to use for creating your account. -'create_account_with_brain_key()' requires you to specify a 'brain key', a -long passphrase that provides enough entropy to generate cyrptographic -keys. This function will suggest a suitably random string that should be -easy to write down (and, with effort, memorize). - -Returns - a suggested brain_key -#### transfer(string from, string to, asset amount, string memo, bool broadcast) - -Transfer funds from one account to another. STEEM and SBD can be -transferred. - -Parameters: - from: The account the funds are coming from (type: string) - to: The account the funds are going to (type: string) - amount: The funds being transferred. i.e. "100.000 STEEM" (type: asset) - memo: A memo for the transactionm, encrypted with the to account's - public memo key (type: string) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### transfer_to_vesting(string from, string to, asset amount, bool broadcast)\ - -Transfer STEEM into a vesting fund represented by vesting shares (VESTS). -VESTS are required to vesting for a minimum of one coin year and can be -withdrawn once a week over a two year withdraw period. VESTS are protected -against dilution up until 90% of STEEM is vesting. - -Parameters: - from: The account the STEEM is coming from (type: string) - to: The account getting the VESTS (type: string) - amount: The amount of STEEM to vest i.e. "100.00 STEEM" (type: asset) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### unlock(string password) - -The wallet remain unlocked until the 'lock' is called or the program exits. - -Parameters: - password: the password previously set with 'set_password()' (type: - string) -#### update_account(string accountname, string json_meta, public_key_type owner, public_key_type active, public_key_type posting, public_key_type memo, bool broadcast) - -This method updates the keys of an existing account. - -Parameters: - accountname: The name of the account (type: string) - json_meta: New JSON Metadata to be associated with the account (type: - string) - owner: New public owner key for the account (type: public_key_type) - active: New public active key for the account (type: public_key_type) - posting: New public posting key for the account (type: public_key_type) - memo: New public memo key for the account (type: public_key_type) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### update_account_auth_account(string account_name, authority_type type, string auth_account, weight_type weight, bool broadcast) - - -#### update_account_auth_key(string account_name, authority_type type, public_key_type key, weight_type weight, bool broadcast) - -This method updates the key of an authority for an exisiting account. -Warning: You can create impossible authorities using this method. The -method will fail if you create an impossible owner authority, but will -allow impossible active and posting authorities. - -Parameters: - account_name: The name of the account whose authority you wish to - update (type: string) - type: The authority type. e.g. owner, active, or posting (type: - authority_type) - key: The public key to add to the authority (type: public_key_type) - weight: The weight the key should have in the authority. A weight of 0 - indicates the removal of the key. (type: weight_type) - broadcast: true if you wish to broadcast the transaction. (type: bool) -#### update_account_auth_threshold(string account_name, authority_type type, uint32_t threshold, bool broadcast) - -This method updates the weight threshold of an authority for an account. -Warning: You can create impossible authorities using this method as well as -implicitly met authorities. The method will fail if you create an -implicitly true authority and if you create an impossible owner authoroty, -but will allow impossible active and posting authorities. - -Parameters: - account_name: The name of the account whose authority you wish to - update (type: string) - type: The authority type. e.g. owner, active, or posting (type: - authority_type) - threshold: The weight threshold required for the authority to be met - (type: uint32_t) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### update_account_memo_key(string account_name, public_key_type key, bool broadcast) - -This method updates the memo key of an account - -Parameters: - account_name: The name of the account you wish to update (type: string) - key: The new memo public key (type: public_key_type) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### update_account_meta(string account_name, string json_meta, bool broadcast) - -This method updates the account JSON metadata - -Parameters: - account_name: The name of the account you wish to update (type: string) - json_meta: The new JSON metadata for the account. This overrides - existing metadata (type: string) - broadcast: ture if you wish to broadcast the transaction (type: bool) -#### update_witness(string witness_name, string url, public_key_type block_signing_key, const chain_properties & props, bool broadcast) - -Update a witness object owned by the given account. - -Parameters: - witness_name: The name of the witness's owner account. Also accepts the - ID of the owner account or the ID of the witness. (type: string) - url: Same as for create_witness. The empty string makes it remain the - same. (type: string) - block_signing_key: The new block signing public key. The empty string - makes it remain the same. (type: public_key_type) - props: The chain properties the witness is voting on. (type: const - chain_properties &) - broadcast: true if you wish to broadcast the transaction. (type: bool) -#### vote(string voter, string author, string permlink, int16_t weight, bool broadcast) - -Vote on a comment to be paid STEEM - -Parameters: - voter: The account voting (type: string) - author: The author of the comment to be voted on (type: string) - permlink: The permlink of the comment to be voted on. (author, - permlink) is a unique pair (type: string) - weight: The weight [-100,100] of the vote (type: int16_t) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### vote_for_witness(string account_to_vote_with, string witness_to_vote_for, bool approve, bool broadcast) - -Vote for a witness to become a block producer. By default an account has -not voted positively or negatively for a witness. The account can either -vote for with positively votes or against with negative votes. The vote -will remain until updated with another vote. Vote strength is determined by -the accounts vesting shares. - -Parameters: - account_to_vote_with: The account voting for a witness (type: string) - witness_to_vote_for: The witness that is being voted for (type: string) - approve: true if the account is voting for the account to be able to be - a block produce (type: bool) - broadcast: true if you wish to broadcast the transaction (type: bool) -#### withdraw_vesting(string from, asset vesting_shares, bool broadcast) - -Set up a vesting withdraw request. The request is fulfilled once a week -over the next two year (104 weeks). - -Parameters: - from: The account the VESTS are withdrawn from (type: string) - vesting_shares: The amount of VESTS to withdraw over the next two - years. Each week (amount/104) shares are withdrawn and depositted - back as STEEM. i.e. "10.000000 VESTS" (type: asset) - broadcast: true if you wish to broadcast the transaction (type: bool) \ No newline at end of file diff --git a/hardfork-dokumentatsiya.md b/hardfork-dokumentatsiya.md deleted file mode 100644 index 6383cf74..00000000 --- a/hardfork-dokumentatsiya.md +++ /dev/null @@ -1,9 +0,0 @@ -# Документация по HardFork - -* [HF18: Изменения в API](/golosd/HardFork/New_HardFork-HF18.md) -* [HF18: Релиз-кандидат RC2](/golosd/HardFork/RC2-HF18.md) -* [HF18: Новые возможности блокчейна](/golosd/HardFork/HF18_ReleaseNotice-rus.md) -* [HF18: Изменения в cli_wallet](/golosd/HardFork/HF18_cli_wallet_changes-rus.md) -* [HF18: Руководство по установке](/golosd/HardFork/HF18_BuildInstruction-rus.md) -* [SF-0.18.4: Новые возможности СофтФорка](golosd/HardFork/SF-0.18.4_ReleaseNotice-rus.md) - diff --git a/hardfork19-dokumentatsiya.md b/hardfork19-dokumentatsiya.md deleted file mode 100644 index 57851bbc..00000000 --- a/hardfork19-dokumentatsiya.md +++ /dev/null @@ -1,3 +0,0 @@ -# Документация по HardFork-19 - -* [HF19: Новые возможности блокчейна](golosd/HardFork/HF19_ReleaseNotice-rus.md) diff --git a/hardfork20-dokumentatsiya.md b/hardfork20-dokumentatsiya.md deleted file mode 100644 index ceef844b..00000000 --- a/hardfork20-dokumentatsiya.md +++ /dev/null @@ -1,3 +0,0 @@ -# Документация по HardFork-20 - -* [HF20: Устранение критического бага в блокчейне](golosd/HardFork/HF20_ReleaseNotice-rus.md) diff --git a/instruktsii.md b/instruktsii.md deleted file mode 100644 index bb6622ea..00000000 --- a/instruktsii.md +++ /dev/null @@ -1,13 +0,0 @@ -# 💯 Экономика Голоса - -> Расчет вознаграждений за разные виды деятельности на Голосе - -* [Постинг \(публикация\)](2-rewards/posting_rewards.md) -* [Курирование \(лайки\)](2-rewards/curation_rewards.md) -* [Инвестирование](2-rewards/commitment_rewards.md) -* [Сбережения](2-rewards/savings_rewards.md) -* [Делегатство](2-rewards/delegatstvo.md) -* [Майнинг](2-rewards/mining_rewards.md) - - - diff --git a/istoriya.md b/istoriya.md deleted file mode 100644 index ac4c38f6..00000000 --- a/istoriya.md +++ /dev/null @@ -1,43 +0,0 @@ -### Голос и Стим - -#### Это отдельный блокчейн или он связан со Стимом? -Отдельный блокчейн, скопированный с блокчейна Стима. - -#### Планируются ли в Голосе уникальные, отличные от Стима функции? -Да. - -#### У меня есть аккаунт на Стимит, нужно ли мне перерегистрироваться в сети Голоса? [УСТАРЕЛО] -В случае, если вы являетесь активным пользователем сети Стимит (имеете не менее 7 (SP + STEEM) и сделали хотя бы одно действие в сети или просто имеете более 100 (STEEM + SP)), то вам не придется регистрировать новую учетную запись в Голосе. Вы сможете зайти в Голос, используя логин и пароль вашего аккаунта на Стимит. При этом на ваш баланс в Голосе будут начислено вознаграждение, пропорциональное тому балансу, который у вас был в сети Стимит на момент копирования (29 сентября 2016 г.). -Это условия действительно до запуска сети. На данном этапе требуется дополнительная регистрация. - -#### Снепшот сети Стимит (так называемый снэпшот)? Какие данные были учтены? -Копия Стимита была сделана 29 сентября 2016 г. 12:00 GMT. Биржевые балансы не были учтены. - -#### Почему был проведен краудсейл вместо предварительного майнинга? -Краудсейл проводился с целью обеспечить максимально широкую дистрибьюцию токенов Силы Голоса, чтобы привлечь на платформу большее число пользователей, заинтересованных в развитии сети как ресурса с качественным контентом. -Для майнеров было зарезервировано 3% токенов Силы Голоса. - -#### Какая сумма была собрана на краудсейле? Сколько участников? -Было собрано чуть более 600 биткоинов. В краудсейле приняло участие чуть более 9000 человек. - -#### По каким критериям было проведено начисление 10% токенов пользователям Стимит? -Пользователям имеющим баланс более 7 (SP + STEEM) и curation rewards более 0 или баланс более 100 (SP + STEEM). - -#### Так как Сила голоса была начислена пользователям Стим пропорционально их балансам, то киты Стим стали китами Голоса, так ли это? -Нет. На всех пользователей Стим было распределено 10% от всех выпущенных СГ. При этом примерно 6% досталось техническому аккаунту @steemit. Таким образом, все пользователи Стима в Голосе стали держателями менее 4%. - -#### Сохранилась ли репутация, заработанная на Стиме? -Репутация не была сохранена. Пользователи Стима, учетные записи которых были скопированы, получили на свой аккаунт только токены Силы Голоса. - -#### Какие токены продавались во время краудфандинга? -Сила Голоса (СГ) - токены, которые необходимы для полноценного участия в социальной сети: регистрации в сети, влиянии при голосовании за размещенные посты, комментарии, обеспечении майнинга и пр. - -#### Почему вы сделали копию блокчейна Стима на таком раннем этапе? -Считаем, что сделали это вовремя. Для того, чтобы “поженить” языковые сообщества в Стиме в рамках одной валюты, необходимо существенным образом изменить консенсус-алгоритм (алгоритм распределения токенов). Мы не думаем, что это возможно в ближайшее время. Мы рассматривали возможность имплементации блокчейн-ответвлений, но поняли что это возможно реализовать лишь в горизонте одного года. За это время можно сильно продвинуться в развитии русскоязычного сообщества. Мы не исключаем того, что в будущем в случае необходимости (и если сообщество будет на это согласно) мы сделаем глубокий технический редизайн проекта (например, имплементацию в виде блокчейн-ответвления) при соотвествующем развитии экосистемы Graphene. - -#### Зачем вы внесли раскол в сообщество Стимита? -Как показала практика раскола не произошло. - -Мы хотим изменений, которые благоприятным образом отразятся на развитии разных языковых сообществ. В нашем приоритете сделать так, чтобы языковые сообщества могли эффективно взаимодействовать в рамках двух (и более) блокчейнов из одного клиента (приложения). Никаких фундаментальных сложностей для этого нет. Но для того, чтобы подтолкнуть к решению этой задачи требуется сильная экономическая мотивация. - -Отдельная криптовалюта со своей системой делегатов - это то, что надо. Мы планируем придерживаться единого протокола. При этом русскоязычное сообщество сможет выступать независимым участником развития протокола для блокчейнов на базе технологии Graphene. diff --git a/kak-bistro-otblagodarit-avtorov-ponravivshihsya-postov-i-otvetov.md b/kak-bistro-otblagodarit-avtorov-ponravivshihsya-postov-i-otvetov.md deleted file mode 100644 index 45ab27c8..00000000 --- a/kak-bistro-otblagodarit-avtorov-ponravivshihsya-postov-i-otvetov.md +++ /dev/null @@ -1,18 +0,0 @@ -В конце декабря 2017 года на платформе [golos.io](https://golos.io) появилась возможность быстро отблагодарить автора понравившегося вам поста или ответа. Так называемые донаты, пожертвования. -Кнопка "**Отблагодарить**" находится под всеми постами в нижней правой части, и если зайти в любой ответ на свои комментарии. Смотрите скриншоты: - -![knop.png](https://i.imgur.com/DLjKEgk.png) - -![otvet.png](https://i.imgur.com/z3pKT5b.png) - -При нажатии на эту кнопку появляется всплывающее окно, аналогичное тому, которое используется при переводах в кошельке. Единственное отличие лишь в том, что тут сразу заполнено поле с ником получателя. Вам нужно лишь ввести нужную сумму перевода в поле "**Количество**" и затем нажать на кнопку "**Передать**". - -**ОБРАТИТЕ ВНИМАНИЕ:** Если вы нажмете на строчку "Баланс: X ХХХ", тогда в строке "количество" будет указана вся сумма на вашем балансе и есть риск перевести все свои сбережения другому пользователю. - -Также, можно выбрать, что именно хотите передать - GBG или Golos токены. Скриншот: - -![okno.png](https://i.imgur.com/DT3UrC1.png) - -Затем, нужно лишь подтвердить свой перевод, введя свой пароль или приватный активный ключ (WIF) от Голоса. - -Вот таким быстрым способом можно отблагодарить автора понравившегося вам поста или ответа. Раньше, чтобы сделать тоже самое, приходилось заходить в свой кошелёк и вводить ник автора вручную, либо копировать ник из ссылки, что не очень удобно. diff --git a/kak-pozhalovatsya-na-polzovatelya-ili-ego-posti.md b/kak-pozhalovatsya-na-polzovatelya-ili-ego-posti.md deleted file mode 100644 index 7ccf7411..00000000 --- a/kak-pozhalovatsya-na-polzovatelya-ili-ego-posti.md +++ /dev/null @@ -1,19 +0,0 @@ -Иногда на медиа платформе Голос возникают конфликтные ситуации между разными участниками, которые проявляются в множественных оскорблениях, нецензурных выражениях, намеренных преследованиях и т.п. -Мы хотим, чтобы на Golos.io царила атмосфера открытости, разнообразия, безопасности и уюта. - -#### Для устранения конфликтных ситуаций на Golos.io мы создали Систему жалоб. - -Для того, чтобы воспользоваться Системой жалоб напишите на почту abuse@golos.io письмо с описанием вашей жалобы на какой-либо пост/комментарий и ссылкой на него. - -Если пост или комментарий нарушают один из пунктов «**Правил использования**» или «**Политики конфиденциальности**» он будет скрыт с сайта Golos.io. - -**Жалоба должна быть подана непосредственно от человека или организации, упомянутых в материалах или их законного представителя.** - -Каждая жалоба будет рассмотрена в течение трёх рабочих дней. - -В дальнейшем Система жалоб [будет внедрена в каждый пост](https://github.com/GolosChain/tolstoy/issues/497) как системный элемент. Данное внедрение подразумевает возможность жалобы на неуместный материал с обязательным указанием причины подачи жалобы. - - - -[Источник](https://golos.io/@golosio/golos-io-o-vzaimnom-uvazhenii/). - diff --git a/kickback-scripts.md b/kickback-scripts.md deleted file mode 100644 index dddfc9cc..00000000 --- a/kickback-scripts.md +++ /dev/null @@ -1,28 +0,0 @@ -На этой странице собраны скрипты для раздачи дополнительных кураторских вознаграждений по программам Голоса "апвот 50/50" и "апвот100". - -Подробнее о программах читайте в статье: . - -## otkat (@ropox) - -* [Репозиторий](https://bitbucket.org/gropox/otkat) -* [Анонс](https://golos.io/ru--golos/@ropox/otkat-skript) - -Оригинальный скрипт. Написан на node.js. Отсутствует контроль ошибок и повторная отправка. - -## Криптобабушка (@kvg) - -* [Репозиторий](https://github.com/kv-gits/cryptobabushka) -* [Веб-интерфейс](https://kv-gits.github.io/cryptobabushka/dist/) - -Представляет собой веб-страницу с js. Предназначен для использования "обычными пользователями". Имеется контроль неудачных транзакций. - -## otkat-py (@vvk) - -* [Репозиторий](https://github.com/bitfag/golos-otkat-py) -* [Анонс](https://golos.io/ru--otkrytyij-kod/@vvk/otkat-py) - -Особенности: - -* Написан на python -* Есть контроль ошибок транзакций, возможна доотправка -* Есть отсечка кураторов, проголосовавших позже закрытия 1-го окна выплат. \ No newline at end of file diff --git a/kontakti.md b/kontakti.md deleted file mode 100644 index 6eebfe48..00000000 --- a/kontakti.md +++ /dev/null @@ -1,11 +0,0 @@ -# Контактная информация - -#### Обратная связь -- Почта GolosWiki [goloswiki@gmail.com](mailto:goloswiki@gmail.com) -- GolosWiki на Голосе [@goloswiki](https://golos.io/@goloswiki) - -Обращайтесь с вопросами или предложениями к боту @goloswiki. -Для этого достаточно упомянуть Вики Голоса в своем посте или комментарии. Вот так: @goloswiki. Бот прибежит к вам в комментарии и постарается ответить на ваш запрос. - -- Редактор вики [@vadbars](https://golos.io/@vadbars) - diff --git a/mekhanika.md b/mekhanika.md deleted file mode 100644 index a94dd1b1..00000000 --- a/mekhanika.md +++ /dev/null @@ -1,12 +0,0 @@ -# Механика - -* [Алгоритм консенсуса](/golosd/mechanics/consensus_algorithm.md) - -* [Динамические права аккаунта](/golosd/mechanics/dynamic_account_permissons.md) - -* [Производительность и масштабируемость](/golosd/mechanics/performance_and_scalability.md) - -* [Устаревание трансакций](/golosd/mechanics/trx-expiration.md) - - - diff --git a/node_modules/gitbook-plugin-collapsible-chapters/.npmignore b/node_modules/gitbook-plugin-collapsible-chapters/.npmignore deleted file mode 100644 index ab49093a..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/npm-debug.log diff --git a/node_modules/gitbook-plugin-collapsible-chapters/.project b/node_modules/gitbook-plugin-collapsible-chapters/.project deleted file mode 100644 index 761d3947..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/.project +++ /dev/null @@ -1,7 +0,0 @@ - - - gitbook-plugin-collapsible-chapters - - - - diff --git a/node_modules/gitbook-plugin-collapsible-chapters/LICENSE b/node_modules/gitbook-plugin-collapsible-chapters/LICENSE deleted file mode 100644 index 8f71f43f..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/node_modules/gitbook-plugin-collapsible-chapters/README.md b/node_modules/gitbook-plugin-collapsible-chapters/README.md deleted file mode 100644 index 2189cc78..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/README.md +++ /dev/null @@ -1,39 +0,0 @@ -#Collapsable chapters for GitBook -============== - -This is a fork of `gitbook-plugin-expandable-chapters`. This provides smaller, less in-the-face icons - ---- - -This plugin adds an icon to each chapter, that has a child and css states for the child list to collapse/expand ones. - -### How to use it? - -Add it to your `book.json` configuration: - -``` -{ - plugins: ["collapsible-chapters"] -} -``` - -Install your plugins using: - -``` -$ gitbook install -``` - -### Configuration - -There is no configuration needed at the moment, can be left empty. - -``` -{ - "pluginsConfig": { - "collapsible-chapters":{} - } -} -``` - -### See also -Maybe you will find https://github.com/poojan/gitbook-plugin-toggle-chapters also useful? diff --git a/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.css b/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.css deleted file mode 100644 index 73170e36..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.css +++ /dev/null @@ -1,28 +0,0 @@ -.book .book-summary .chapter > .articles { - overflow: hidden; - max-height: 0px; -} - -.book .book-summary .chapter.expanded > .articles { - max-height: 9999px; -} - -.book .book-summary .exc-trigger { - position: absolute; - left: 12px; - top: 12px; -} - -.book .book-summary ul.summary li a, -.book .book-summary ul.summary li span { - padding-left: 30px; -} - -.book .book-summary .exc-trigger:before { - content: "\f0da"; -} - -.book .book-summary .expanded > a .exc-trigger:before, -.book .book-summary .expanded > span .exc-trigger:before { - content: "\f0d7"; -} diff --git a/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.js b/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.js deleted file mode 100644 index a415d553..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/book/collapsible-chapters.js +++ /dev/null @@ -1,68 +0,0 @@ -require(['gitbook', 'jQuery'], function(gitbook, $) { - var TOGGLE_CLASSNAME = 'expanded', - CHAPTER = '.chapter', - ARTICLES = '.articles', - TRIGGER_TEMPLATE = '', - LS_NAMESPACE = 'expChapters'; - var init = function () { - // adding the trigger element to each ARTICLES parent and binding the event - $(ARTICLES) - .parent(CHAPTER) - .children('a,span') - .append( - $(TRIGGER_TEMPLATE) - .on('click', function(e) { - e.preventDefault(); - e.stopPropagation(); - toggle($(e.target).closest(CHAPTER)); - }) - ); - expand(lsItem()); - //expand current selected chapter with it's parents - var activeChapter = $(CHAPTER + '.active'); - expand(activeChapter); - expand(activeChapter.parents(CHAPTER)); - - - } - var toggle = function ($chapter) { - if ($chapter.hasClass('expanded')) { - collapse($chapter); - } else { - expand($chapter); - } - } - var collapse = function ($chapter) { - if ($chapter.length && $chapter.hasClass(TOGGLE_CLASSNAME)) { - $chapter.removeClass(TOGGLE_CLASSNAME); - lsItem($chapter); - } - } - var expand = function ($chapter) { - if ($chapter.length && !$chapter.hasClass(TOGGLE_CLASSNAME)) { - $chapter.addClass(TOGGLE_CLASSNAME); - lsItem($chapter); - } - } - var lsItem = function () { - var map = JSON.parse(localStorage.getItem(LS_NAMESPACE)) || {} - if (arguments.length) { - var $chapters = arguments[0]; - $chapters.each(function (index, element) { - var level = $(this).data('level'); - var value = $(this).hasClass(TOGGLE_CLASSNAME); - map[level] = value; - }) - localStorage.setItem(LS_NAMESPACE, JSON.stringify(map)); - } else { - return $(CHAPTER).map(function(index, element){ - if (map[$(this).data('level')]) { - return this; - } - }) - } - } - gitbook.events.bind('page.change', function() { - init() - }); -}); diff --git a/node_modules/gitbook-plugin-collapsible-chapters/index.js b/node_modules/gitbook-plugin-collapsible-chapters/index.js deleted file mode 100644 index 7b36f68d..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/index.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - // Extend website resources and html - website: { - assets: "./book", - js: [ - "collapsible-chapters.js" - ], - css: [ - "collapsible-chapters.css" - ] - } -}; diff --git a/node_modules/gitbook-plugin-collapsible-chapters/package.json b/node_modules/gitbook-plugin-collapsible-chapters/package.json deleted file mode 100644 index a9295ab6..00000000 --- a/node_modules/gitbook-plugin-collapsible-chapters/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_args": [ - [ - { - "name": "gitbook-plugin-collapsible-chapters", - "raw": "gitbook-plugin-collapsible-chapters@0.1.8", - "rawSpec": "0.1.8", - "scope": null, - "spec": "0.1.8", - "type": "version" - }, - "/Users/xhipster/github/golos-wiki" - ] - ], - "_from": "gitbook-plugin-collapsible-chapters@0.1.8", - "_id": "gitbook-plugin-collapsible-chapters@0.1.8", - "_inCache": true, - "_installable": true, - "_location": "/gitbook-plugin-collapsible-chapters", - "_nodeVersion": "4.2.4", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/gitbook-plugin-collapsible-chapters-0.1.8.tgz_1470851250824_0.5219925630372018" - }, - "_npmUser": { - "email": "contact@vihan.org", - "name": "vihanb" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "gitbook-plugin-collapsible-chapters", - "raw": "gitbook-plugin-collapsible-chapters@0.1.8", - "rawSpec": "0.1.8", - "scope": null, - "spec": "0.1.8", - "type": "version" - }, - "_requiredBy": [ - "#USER" - ], - "_resolved": "https://registry.npmjs.org/gitbook-plugin-collapsible-chapters/-/gitbook-plugin-collapsible-chapters-0.1.8.tgz", - "_shasum": "77155c61cac1951721d8bf44b3f226a61a1e65c5", - "_shrinkwrap": null, - "_spec": "gitbook-plugin-collapsible-chapters@0.1.8", - "_where": "/Users/xhipster/github/golos-wiki", - "bugs": { - "url": "https://github.com/vihanb/gitbook-plugin-collapsible-chapters/issues" - }, - "dependencies": {}, - "description": "Collapsable chapters for convenient navigation within a gitbook", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "77155c61cac1951721d8bf44b3f226a61a1e65c5", - "tarball": "https://registry.npmjs.org/gitbook-plugin-collapsible-chapters/-/gitbook-plugin-collapsible-chapters-0.1.8.tgz" - }, - "engines": { - "gitbook": ">=0.4.6" - }, - "gitHead": "8bb51c64d4f1762fef01909aaf19fd31fcd3e435", - "homepage": "https://github.com/vihanb/gitbook-plugin-collapsible-chapters", - "license": "Apache 2", - "main": "index.js", - "maintainers": [ - { - "email": "contact@vihan.org", - "name": "vihanb" - } - ], - "name": "gitbook-plugin-collapsible-chapters", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/vihanb/gitbook-plugin-collapsible-chapters.git" - }, - "scripts": {}, - "version": "0.1.8" -} diff --git a/novichkam.md b/novichkam.md deleted file mode 100644 index 0fd84e5f..00000000 --- a/novichkam.md +++ /dev/null @@ -1,11 +0,0 @@ -# 🚀 Новичкам - -> Основная информация для начинающих - -* [Начни отсюда](1-introduction/welcome.md) -* [Терминология](1-introduction/terminologiya.md) -* [Вопросы и ответы](1-introduction/faq.md) -* [Видео-материалы](1-introduction/kak_polzovatsya_platformoi_golos.md) - - - diff --git a/params.json b/params.json deleted file mode 100644 index 10b44600..00000000 --- a/params.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Wiki", - "tagline": "", - "body": "# Добро пожаловать в вики проекта Голос\r\n- [Драфт бумаги про Голос](https://github.com/GolosChain/wiki/blob/master/%D0%91%D1%83%D0%BC%D0%B0%D0%B3%D0%B0%20%D0%BF%D1%80%D0%BE%20%D0%93%D0%BE%D0%BB%D0%BE%D1%81.md)\r\n\r\n## Установка Голоса\r\n- [Ubuntu](https://github.com/GolosChain/wiki/blob/master/Install%20on%20Ubuntu.md)\r\n- [OS X](https://github.com/GolosChain/wiki/blob/master/Steem%20Install%20OS%20X.md)\r\n\r\n## Разработка\r\n- [Конфиг для продуктива](https://github.com/GolosChain/wiki/blob/master/config.hpp)\r\n- [Конфиг для тестнета](https://github.com/GolosChain/wiki/blob/master/config-test.hpp)\r\n- [Прогнозирование Эмиссии](https://github.com/GolosChain/wiki/blob/master/Inflation%20plot.md)\r\n- [Дорожная Карта](https://github.com/GolosChain/wiki/blob/master/Roadmap.md)\r\n- [Правила лейблов](https://github.com/GolosChain/wiki/blob/master/labels.md)\r\n- [Гайдлайны](https://github.com/GolosChain/wiki/blob/master/Github-guidelines.md)\r\n- [Снэпшот](https://github.com/GolosChain/wiki/blob/master/snapshot.json)\r\n- [Конфигурационный файл](https://github.com/GolosChain/wiki/blob/master/config.hpp)\r\n- [Всячина](https://github.com/GolosChain/wiki/blob/master/%D0%92%D1%81%D1%8F%D1%87%D0%B8%D0%BD%D0%B0.md)\r\n- [Гайд по работе с переводами] (https://github.com/GolosChain/golos.io/blob/develop/app/locales/README.md#how-to-work-with-translations)\r\n\r\n## Документы\r\n### Переводы Марины - линки на документы в гуглдоках\r\n- [Curation Rewards](https://docs.google.com/document/d/1XQzz9tt_wlvOE42Gek-AHT7ewhQXYWSsuJp4lOHVe1A/edit#)\r\n- [Documentation](https://docs.google.com/document/d/1UgtHr46Da_LearwgX5fDqcDw2QDCmPMxIeffRlOnNQs/edit#heading=h.gjdgxs)\r\n- [High Performance and Scalability](https://docs.google.com/document/d/1ibAj8CUjrUVSaTkCFfd572e8IBEJEjKV65UTNRSEKGE/edit)\r\n- [Consensus ALgorithm](https://docs.google.com/document/d/15hgCXUeU3X7-qZvWaH40MRIHhRS1T_fB4n4e42qmzXA/edit)\r\n- [Market Maker Rewards](https://docs.google.com/document/d/1ADHHRenK92-BUNyBo5qfIJW8sflOZyH5Vb-U5YgBQmo/edit)\r\n- [Mining Rewards](https://docs.google.com/document/d/1nQxEctSMytVgcLnBnDjBjhnkE98tBON2SqeBetSNBk4/edit)\r\n- [Savings Rewards](https://docs.google.com/document/d/1soV4g6l07lKxZbHWTTRXFL0GY7tnHiTTbc_VDFdG8_A/edit)\r\n- [Commitment Rewards](https://docs.google.com/document/d/1bZ4AfuwIVXADC9Zc64A0uPTI6YaM6gwVS3U9jpx7smk/edit)\r\n- [Posting Rewards](https://docs.google.com/document/d/1gvWeFIl38VnLIU1NLe6vrDJhMT2F8lmlEZgPnb7OWI0/edit#heading=h.gjdgxs)", - "note": "Don't delete this file! It's used internally to help with page regeneration." -} \ No newline at end of file diff --git a/pervie-shagi.md b/pervie-shagi.md deleted file mode 100644 index 84d7548f..00000000 --- a/pervie-shagi.md +++ /dev/null @@ -1,15 +0,0 @@ -### 🚀 Первые шаги - -> Основные знания для начинающих. - -Имейте в виду, что статьи отражают позицию их авторов и не являются безусловной рекомендацией. Описание не всегда может соответствовать последним изменениям в интерфейсе golos.io - -* [Регистрация](/1-introduction/registratsiya.md) -* [Заполнение профиля](/1-introduction/zapolnenie-profilya.md) -* [Интерфейс личного блога](/1-introduction/interfeis-lichnogo-bloga.md) -* [Интерфейс платформы golos.io](/1-introduction/interfeis-golosio.md) -* [Публикация в блоге](/1-introduction/posting.html) -* [Кошелек, ключи, выплаты](/1-introduction/koshelek-klyuchi-viplati.md) - - - diff --git a/poleznoe.md b/poleznoe.md deleted file mode 100644 index 3c081046..00000000 --- a/poleznoe.md +++ /dev/null @@ -1,12 +0,0 @@ -# 💡 Полезное - -> Различная полезная информация - -* [Участие в вики Голоса](/uchastie-v-viki-golosa.md) -* [Контакты](/kontakti.md) -* [История](/istoriya.md) - -# 💯 📉 📈🔪 💔⚖️🎯⚙️📘 🚀📌💰✈💳✔💻💡📷👍 - - - diff --git a/raznoe.md b/raznoe.md deleted file mode 100644 index 22b19bcb..00000000 --- a/raznoe.md +++ /dev/null @@ -1,3 +0,0 @@ -# Разное - -* [Обсуждаемое](/golosd/mix/riski-izmenenija-GBG.md) diff --git a/razrabotchikam.md b/razrabotchikam.md deleted file mode 100644 index 53500f71..00000000 --- a/razrabotchikam.md +++ /dev/null @@ -1,17 +0,0 @@ -## РАЗРАБОТЧИКАМ - -* [Архитектура](/arhitektura.md) -* [Администрирование](/administrirovanie.md) -* [Механика](/mekhanika.md) -* [API-документация](/api-dokumentatsiya.md) -* [API-документация для HF18](/api-hf18-dokumentatsiya.md) -* [Разработка](/razrabotka.md) -* [Справочные данные](/spravochnie-dannie.md) -* [Руководства \(HOWTO\)](/rukovodstva-howto.md) -* [HardFork HF18](/hardfork-dokumentatsiya.md) -* [HardFork HF19](/hardfork19-dokumentatsiya.md) -* [HardFork HF20](/hardfork20-dokumentatsiya.md) -* [SoftFork in English](/sf-documentation.md) -* [Разное](/raznoe.md) - - diff --git a/razrabotka.md b/razrabotka.md deleted file mode 100644 index 8e89add5..00000000 --- a/razrabotka.md +++ /dev/null @@ -1,6 +0,0 @@ -# Разработка - -* [Руководство по контрибьютингу](/golosd/devel/guideline.md) - - - diff --git a/rukovodstva-howto.md b/rukovodstva-howto.md deleted file mode 100644 index 6402fa02..00000000 --- a/rukovodstva-howto.md +++ /dev/null @@ -1,17 +0,0 @@ -## Руководства \(HOWTO\) - -* [Скрипт регистрации аккаунтов](/golosd/howto/vik-registration-service.md) -* [Как использовать мультиподписи](/golosd/howto/multisig.md) -* [Как объединять операции в одну транзакцию](/golosd/howto/ops-merging.md) -* [Создание аккаунта через cli\_wallet](/golosd/howto/cli_wallet-create-account.md) -* [Кэширование API](/golosd/howto/api-cache.md) -* [Установка ноды делегата](/golosd/howto/witness-node.md) -* [Запуск golos ноды в контейнере docker](/golosd/howto/zapusk-golos-nodi-v-konteinere-docker.md) -* [Генерация графика эмиссии](/golosd/howto/emission_chart.md) -* [Мониторинг транзакций аккаунта](/golosd/howto/transactions-monitoring.md) -* [Пример запуска тестовой сети \#1](/golosd/howto/testnet1.md) -* [Пример запуска тестовой сети \#2](/golosd/howto/testnet2.md) -* [Генерация ключей аккаунта](/golosd/howto/generate-keys.md) - - - diff --git a/sf-documentation.md b/sf-documentation.md deleted file mode 100644 index 90f537ce..00000000 --- a/sf-documentation.md +++ /dev/null @@ -1,6 +0,0 @@ -# SoftFork documentation in english - -* [SF-0.18.4 Release Notice](/golosd/SoftFork/SF-0.18.4-Release_Notice.md) -* [SF-0.18.5 Release Notice](/golosd/SoftFork/SF-0.18.5-Release_Notice.md) - - diff --git a/spravochnie-dannie.md b/spravochnie-dannie.md deleted file mode 100644 index d048d658..00000000 --- a/spravochnie-dannie.md +++ /dev/null @@ -1,6 +0,0 @@ -# Справочные данные - -* [Cli\_wallet](/golosd/reference/cli_wallet.md) - - - diff --git a/stati.md b/stati.md deleted file mode 100644 index 388874ff..00000000 --- a/stati.md +++ /dev/null @@ -1,19 +0,0 @@ -### ⚖️ Статьи - -> Подробнее о разных аспектах Голоса. -> -> Имейте в виду, что статьи отражают позицию их авторов и не являются безусловной рекомендацией. - -* [Способы заработка](/1-introduction/zarabotok.md) -* [Просто о блокчейне](/1-introduction/prosto-o-blokcheine.md) -* [КриптоТермины](/1-introduction/kriptotermini.md) -* [Смайлики на Голосе](/1-introduction/smailiki-na-golose.md) -* [Сервис steemul.ru](1-introduction/steemulru.md) -* [Сервис golos.cf/history](golos.cf/history) -* [Сила при голосовании](/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md) -* [Выбор силы при голосовании](/1-introduction/chto-takoe-sila-golosovaniya-i-skolko-postov-mozhno-laikat-za-sutki.md) -* [Линейка и квадрат](tekuschaya-ekonomicheskaya-model-viplat-za-posti-na-golose.md) -* [Бенефициарство](1-introduction/benefitsiarstvo.md) - - - diff --git a/stylesheets/github-light.css b/stylesheets/github-light.css deleted file mode 100644 index 0c6b24d8..00000000 --- a/stylesheets/github-light.css +++ /dev/null @@ -1,124 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2016 GitHub, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -*/ - -.pl-c /* comment */ { - color: #969896; -} - -.pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */, -.pl-s .pl-v /* string variable */ { - color: #0086b3; -} - -.pl-e /* entity */, -.pl-en /* entity.name */ { - color: #795da3; -} - -.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */, -.pl-s .pl-s1 /* string source */ { - color: #333; -} - -.pl-ent /* entity.name.tag */ { - color: #63a35c; -} - -.pl-k /* keyword, storage, storage.type */ { - color: #a71d5d; -} - -.pl-s /* string */, -.pl-pds /* punctuation.definition.string, string.regexp.character-class */, -.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, -.pl-sr /* string.regexp */, -.pl-sr .pl-cce /* string.regexp constant.character.escape */, -.pl-sr .pl-sre /* string.regexp source.ruby.embedded */, -.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ { - color: #183691; -} - -.pl-v /* variable */ { - color: #ed6a43; -} - -.pl-id /* invalid.deprecated */ { - color: #b52a1d; -} - -.pl-ii /* invalid.illegal */ { - color: #f8f8f8; - background-color: #b52a1d; -} - -.pl-sr .pl-cce /* string.regexp constant.character.escape */ { - font-weight: bold; - color: #63a35c; -} - -.pl-ml /* markup.list */ { - color: #693a17; -} - -.pl-mh /* markup.heading */, -.pl-mh .pl-en /* markup.heading entity.name */, -.pl-ms /* meta.separator */ { - font-weight: bold; - color: #1d3e81; -} - -.pl-mq /* markup.quote */ { - color: #008080; -} - -.pl-mi /* markup.italic */ { - font-style: italic; - color: #333; -} - -.pl-mb /* markup.bold */ { - font-weight: bold; - color: #333; -} - -.pl-md /* markup.deleted, meta.diff.header.from-file */ { - color: #bd2c00; - background-color: #ffecec; -} - -.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ { - color: #55a532; - background-color: #eaffea; -} - -.pl-mdr /* meta.diff.range */ { - font-weight: bold; - color: #795da3; -} - -.pl-mo /* meta.output */ { - color: #1d3e81; -} - diff --git a/stylesheets/normalize.css b/stylesheets/normalize.css deleted file mode 100644 index 30366a6e..00000000 --- a/stylesheets/normalize.css +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css deleted file mode 100644 index b5f20c23..00000000 --- a/stylesheets/stylesheet.css +++ /dev/null @@ -1,245 +0,0 @@ -* { - box-sizing: border-box; } - -body { - padding: 0; - margin: 0; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 1.5; - color: #606c71; } - -a { - color: #1e6bb8; - text-decoration: none; } - a:hover { - text-decoration: underline; } - -.btn { - display: inline-block; - margin-bottom: 1rem; - color: rgba(255, 255, 255, 0.7); - background-color: rgba(255, 255, 255, 0.08); - border-color: rgba(255, 255, 255, 0.2); - border-style: solid; - border-width: 1px; - border-radius: 0.3rem; - transition: color 0.2s, background-color 0.2s, border-color 0.2s; } - .btn + .btn { - margin-left: 1rem; } - -.btn:hover { - color: rgba(255, 255, 255, 0.8); - text-decoration: none; - background-color: rgba(255, 255, 255, 0.2); - border-color: rgba(255, 255, 255, 0.3); } - -@media screen and (min-width: 64em) { - .btn { - padding: 0.75rem 1rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .btn { - padding: 0.6rem 0.9rem; - font-size: 0.9rem; } } - -@media screen and (max-width: 42em) { - .btn { - display: block; - width: 100%; - padding: 0.75rem; - font-size: 0.9rem; } - .btn + .btn { - margin-top: 1rem; - margin-left: 0; } } - -.page-header { - color: #fff; - text-align: center; - background-color: #159957; - background-image: linear-gradient(120deg, #155799, #159957); } - -@media screen and (min-width: 64em) { - .page-header { - padding: 5rem 6rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .page-header { - padding: 3rem 4rem; } } - -@media screen and (max-width: 42em) { - .page-header { - padding: 2rem 1rem; } } - -.project-name { - margin-top: 0; - margin-bottom: 0.1rem; } - -@media screen and (min-width: 64em) { - .project-name { - font-size: 3.25rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .project-name { - font-size: 2.25rem; } } - -@media screen and (max-width: 42em) { - .project-name { - font-size: 1.75rem; } } - -.project-tagline { - margin-bottom: 2rem; - font-weight: normal; - opacity: 0.7; } - -@media screen and (min-width: 64em) { - .project-tagline { - font-size: 1.25rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .project-tagline { - font-size: 1.15rem; } } - -@media screen and (max-width: 42em) { - .project-tagline { - font-size: 1rem; } } - -.main-content :first-child { - margin-top: 0; } -.main-content img { - max-width: 100%; } -.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { - margin-top: 2rem; - margin-bottom: 1rem; - font-weight: normal; - color: #159957; } -.main-content p { - margin-bottom: 1em; } -.main-content code { - padding: 2px 4px; - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 0.9rem; - color: #383e41; - background-color: #f3f6fa; - border-radius: 0.3rem; } -.main-content pre { - padding: 0.8rem; - margin-top: 0; - margin-bottom: 1rem; - font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; - color: #567482; - word-wrap: normal; - background-color: #f3f6fa; - border: solid 1px #dce6f0; - border-radius: 0.3rem; } - .main-content pre > code { - padding: 0; - margin: 0; - font-size: 0.9rem; - color: #567482; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; } -.main-content .highlight { - margin-bottom: 1rem; } - .main-content .highlight pre { - margin-bottom: 0; - word-break: normal; } -.main-content .highlight pre, .main-content pre { - padding: 0.8rem; - overflow: auto; - font-size: 0.9rem; - line-height: 1.45; - border-radius: 0.3rem; } -.main-content pre code, .main-content pre tt { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; } - .main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after { - content: normal; } -.main-content ul, .main-content ol { - margin-top: 0; } -.main-content blockquote { - padding: 0 1rem; - margin-left: 0; - color: #819198; - border-left: 0.3rem solid #dce6f0; } - .main-content blockquote > :first-child { - margin-top: 0; } - .main-content blockquote > :last-child { - margin-bottom: 0; } -.main-content table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; } - .main-content table th { - font-weight: bold; } - .main-content table th, .main-content table td { - padding: 0.5rem 1rem; - border: 1px solid #e9ebec; } -.main-content dl { - padding: 0; } - .main-content dl dt { - padding: 0; - margin-top: 1rem; - font-size: 1rem; - font-weight: bold; } - .main-content dl dd { - padding: 0; - margin-bottom: 1rem; } -.main-content hr { - height: 2px; - padding: 0; - margin: 1rem 0; - background-color: #eff0f1; - border: 0; } - -@media screen and (min-width: 64em) { - .main-content { - max-width: 64rem; - padding: 2rem 6rem; - margin: 0 auto; - font-size: 1.1rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .main-content { - padding: 2rem 4rem; - font-size: 1.1rem; } } - -@media screen and (max-width: 42em) { - .main-content { - padding: 2rem 1rem; - font-size: 1rem; } } - -.site-footer { - padding-top: 2rem; - margin-top: 2rem; - border-top: solid 1px #eff0f1; } - -.site-footer-owner { - display: block; - font-weight: bold; } - -.site-footer-credits { - color: #819198; } - -@media screen and (min-width: 64em) { - .site-footer { - font-size: 1rem; } } - -@media screen and (min-width: 42em) and (max-width: 64em) { - .site-footer { - font-size: 1rem; } } - -@media screen and (max-width: 42em) { - .site-footer { - font-size: 0.9rem; } } diff --git a/tekuschaya-ekonomicheskaya-model-viplat-za-posti-na-golose.md b/tekuschaya-ekonomicheskaya-model-viplat-za-posti-na-golose.md deleted file mode 100644 index df1a800a..00000000 --- a/tekuschaya-ekonomicheskaya-model-viplat-za-posti-na-golose.md +++ /dev/null @@ -1,22 +0,0 @@ -##Текущая экономическая модель выплат за посты на Голосе - -Автор: @aleos - -Начиная с 4 апреля 2018 года \(когда был принят Хардфорк 0.17\) - блокчейн Голос перешёл на **линейную функцию** распределения при расчёте авторских вознаграждений \(наград\) за посты и комменты. В народе линейную функцию распределения наград называют "линейка". При переходе на "линейку" изменилась и экономическая модель на Голосе, в этой небольшой заметке поговорим на эту тему. - -Есть общий пул наград, он делится между всеми постами по сумме их **rshares**. Если говорить о том, что такое rshares - то простым языком это можно объяснить как ваша СГ \(Сила Голоса\), с которой вы проголосовали за пост, ваша доля \(или акции\). При расчёте rshares учитывается и ваш уровень заряда "батарейки", и то, [с каким процентом вашей СГ](https://wiki.golos.io/1-introduction/The%20choice%20of%20the%20Power%20of%20the%20vote.html) вы проголосовали. - -#### Как было раньше - при квадратичной функции распределения авторских наград. - -Допустим, что в общем пуле наград есть 100 условных единиц наград. Вася и Петя опубликовали по 1 посту. За Васин пост проголосовали суммарно с силой \(rshares\) 10, за Петин пост - с силой \(rshares\) 100. Вася получит долю пула эквивалентную **10 \* 10 = 100**, а Петя **100 \* 100 = 10 000**. То есть, разница в 10 раз в суммарной силе голоса проголосовавших, превратилась в 100-кратную разницу в итоге. Вот так рассчитывалась квадратичная функция \("квадрат"\) начислений авторских наград. -Условно говоря, из пула Васе досталось за свой пост ~~хрен без соли~~ всего 1, а Пете 99. Это примерные вычисления, округлённые до ровных чисел и значений. - -Можно ещё добавить, что при "квадрате" пул частенько концентрировался в местах возрастающей ценности на удельную единицу СГ \(на самых "жирных" по потенциальной выплате постах, грубо говоря\), а "тощие" посты становились ещё более тощими. - -#### Как стало при введении линейной функции распределения авторских наград. - -Допустим, что в общем пуле наград есть 100 условных единиц наград. Вася и Петя опубликовали по 1 посту. За Васин пост проголосовали суммарно с силой \(rshares\) 10, за Петин пост - с силой \(rshares\) 100. Вася за свой пост получит долю пула эквивалентную **10**, а Петя за свой пост - эквивалентную **100**. То есть, из пула Васе досталось примерно 10, Пете - примерно 90. Это примерные вычисления, округлённые до ровных чисел и значений. - -Как мы видим из этих вычислений - при "линейке" Вася начал получать за свой пост примерно в 10 раз больше (эта разница зависит от разных факторов), чем он получал при "квадрате", а у Пети выплаты за пост немного снизились. -Проще говоря, линейная функция распределения наград более справедлива, чем квадратичная функция, по отношению к новичкам и авторам с низкой и средней Силой Голоса, которые получают не очень много внимания (сумму rshares) за свои посты/комменты. - diff --git a/uchastie-v-viki-golosa.md b/uchastie-v-viki-golosa.md deleted file mode 100644 index af79534a..00000000 --- a/uchastie-v-viki-golosa.md +++ /dev/null @@ -1,115 +0,0 @@ -# Как участвовать в вики Голоса - - -## Исходный текст - -Исходный текст wiki находится на GitHub: [https://github.com/GolosChain/wiki](https://github.com/GolosChain/wiki), основным языком разметки является markdown. - -Вы можете сообщать о неточностях в [issues](https://github.com/GolosChain/wiki/issues), или предложить изменения с помощью Pull Request. - -Рендеринг страниц wiki производится с помощью инструментария [GitBook](https://www.gitbook.com). - -## Участие в Вики Голоса с помощью github и gitbook. - -Участвовать в вики Голоса можно несколькими разными способами. Подробно рассмотрим один из наиболее эффективных способов, который позволяет сразу предлагать новые статьи и вносить изменения в уже существующие статьи **с помощью gitbook и pull request на github**. - -### Создание аккаунта на Github и интеграция с Gitbook. - -**1**. Прежде всего, вам нужно создать аккаунт на [https://github.com](https://github.com). - -**2**. После создания аккаунта заходим на страничку [https://github.com/GolosChain/wiki](https://github.com/GolosChain/wiki) и делаем форк репозитория вики. Для этого вам нужно нажать на кнопку **Fork** в правом верхнем углу и подождать несколько секунд, чтобы копия форка установилась в ваш гитхаб аккаунт. Скриншот: - -![fork](https://i.imgur.com/QsxyqoG.png) - -**3**. Затем заходим на сайт на [https://www.gitbook.com](https://www.gitbook.com) и авторизуемся там через гитхаб аккаунт. Скриншоты: - -![login](https://i.imgur.com/QkiJi3Z.png) - -![login2](https://i.imgur.com/P4BRMK7.png) - -**4**. Теперь нужно сделать интеграцию, чтобы github и gitbook взаимодействовали друг с другом. В левом окне выбираем в качестве шаблона **GITHUB**, а в правом окне нажимаем на кнопку **Install Github integration**. Скриншот: - -![kniga](https://i.imgur.com/t3uygwf.png) - -В следующем окне нужно указать репозиторий для установки в книгу Gitbook. Нажимаем на кнопку **Only select repositories** и в поле начинаем писать название репозитория вики Голоса. Для этого достаточно ввести первые 2-3 буквы \(например wi\) и сразу должен появится выбор для установки. Скриншот: - -![kniga2](https://i.imgur.com/pjINVLg.png) - -В нашем случае, это клон репозитория wiki. Нужно выбрать его и затем нажать на кнопку Install. Скриншот: - -![kniga3](https://i.imgur.com/teDWMSU.png) - -Если всё сделаете верно, то вас автоматически вернут на Гитхаб и наверху странички должно всплыть сообщение об успешной установке Gitbook. Скриншот: - -![kniga4](https://i.imgur.com/dZkRmKn.png) - -### Создание книги на Gitbook. - -Теперь нужно создать новую книгу, с помощью которой можно будет делать новые статьи и правки в вики Голоса. -**1**. Заходим на сайт [https://www.gitbook.com/](https://www.gitbook.com/) и в уже знакомом окне выбираем в левой части пункт **GITHUB**, а в правой части заполняем поля. В поле **Title** пишем любое название вашей книги \(например: testviki, golosbook, viki-test и т.п.\), в поле **Description** можно написать краткое описание вашей будущей книги \(это не обязательно\). Через менюшку **Select a Repository** выбираем форкнутый ранее клон вики и затем нажимаем на кнопку **Create Book**. Скриншот: - -![kniga5](https://i.imgur.com/AHGmdkg.png) - -На следующей страничке нужно нажать на кнопку **Continue editing** и должен открыться интерфейс редактора вики Голоса. Скриншоты: - -![kniga6](https://i.imgur.com/wN2gWQF.png) -![kniga7](https://i.imgur.com/A425qTU.png) - -**Примечание**: Ваша книга будет доступна по ссылке: [https://www.gitbook.com/book/имя\_аккаунта\_гитхаб/название\_книги](https://www.gitbook.com/book/имя_аккаунта_гитхаб/название_книги) - -**2**. Теперь вы можете добавлять новые статьи и делать правки уже существующих статей через интерфейс Gitbook. -Чтобы предложить новую статью в вики, нужно нажать в левой колонке на менюшку **Add an article** и заполнить поле **Title** с названием статьи. Ваша новая статья появится в левой колонке, нужно зайти в неё и приступить к написанию. Когда статья будет готова, нужно её опубликовать нажав кнопку **Publish** в правом верхнем углу. -Чтобы делать делать правки уже существующих статей - нужно выбрать любую статью из левой колонки, внести в неё изменения и нажать нажать на кнопку **Publish**. - -Если нажать в левой колонке на вашу статью правой кнопкой мыши, то можно отредактировать её название или удалить статью полностью. Скриншот: - -![kniga8](https://i.imgur.com/5wFnaEf.png) - -### Создание запроса на изменение Вики Голоса. - -Ну а теперь самое интересное. После того, как вы закончили свою статью или отредактировали уже имеющиеся, нужно создать новый pull request \(запрос на изменения в вики\). Для этого заходим снова на github в свой форк вики Голоса. Адрес страницы должен быть такого вида: -[https://github.com/имя\_вашего\_аккаунта\_гитхаб/wiki](https://github.com/имя_вашего_аккаунта_гитхаб/wiki) - -Нажимаем на кнопку **New pull request**. Скриншот: - -![pull](https://i.imgur.com/V5Z1xnh.png) - -Откроется страница на которой будет видно, какие именно изменения вы предлагаете внести. Нажимаем на зелёную кнопку **Create pull request**, заполняем поле Article с названием вашего pull request \(название должно как-то отражать тему вашей статьи\), а в поле Write пишите комментарий к вашему pull request - о чём он и т.д. Затем нужно нажать на зеленую кнопку **Create pull request** и ваш pull request будет добавлен на рассмотрение. Скриншоты: - -![pull2](https://i.imgur.com/2FTlXb4.png) -![pull3](https://i.imgur.com/5fXOFfF.png) - -Когда ваш pull request будет рассмотрен командой goloscore - будет принято решение о внесении вашей статьи в вики Голоса или закрытии вашего pull request. На принятие решения может уйти несколько дней. - -**Примечание.** Пока ваш pull request не получит статус **merged** \("слитый", "слившийся" - это означает, что он принят и ваша статья или правки вошли в Вики Голоса\) или **closed** \(закрытый\) - не нужно создавать новые pull request\*ы, ибо все последующие правки или новые статьи созданные через gitbook будут добавляться в виде **commits** в тот же самый pull request. То есть, в один и тот же pull request автоматически добавляются все последующие правки и статьи, пока он открыт и не слился \(merged\) с Вики Голоса. - -**commits** - переводится как совершение, осуществление. В контексте Гитхаба это означает совершение каких-либо правок в коде, в статье и т.д. - -#### Commit messages - -По умолчанию gitbook сам генерирует commit messages. Если вы хотите писать их самостоятельно, в интерфейсе редактирования книги в правом нижнем углу надо нажать на "?" и зайти в Settings, там в разделе "git" можно отключить автоматический текст коммитов. - -## Альтернативный workflow - -В связи с тем, что инструментарий gitbook недостаточно гибок и удобен \(читайте подробно в статье [Недостатки инструментария wiki Голоса или обзор gitbook](https://golos.io/goldvoice/@vvk/gitbook)\), можно использовать более простой способ правки статей. - -#### Встроенный редактор github - -* Создаётся форк репозитория wiki на github -* Страницы редактируются непосредственно через встроенный редактор на github - -#### Локальный редактор - -* Создаётся форк репозитория wiki на github -* Форкнутый репо клонируется на локальную машину -* Статьи редактируются вашим любимым текстовым редактором. Имеет смысл использовать специализированные markdown-редакторы типа [ghostwriter](https://wereturtle.github.io/ghostwriter/). - -## Обратная связь - -* Почта [support@golos.io](mailto:support@golos.io) -* Группа в telegram: [https://t.me/goloswikigroup](https://t.me/goloswikigroup) - -## Баунти! - -За участие в наполнении Вики Голоса вы можете [получить поощрение](/0-aktualnoe/baunti.md). - diff --git a/useful_links.md b/useful_links.md deleted file mode 100644 index ce47c3ac..00000000 --- a/useful_links.md +++ /dev/null @@ -1,245 +0,0 @@ -# Полезные ссылки - - -### На русском языке -#### О Голосе в целом: что это такое и как работает -[Бумага о Голосе](https://golos.io/ru--golos/@golos/golos-russkoyazychnaya-socialno-mediinaya-blokchein-platforma) - -[Бумага про Стим](https://steemit.com/ru/@hipster/bumaga-pro-stim-chast-1) - -[Голос: русскоязычная социально-медийная блокчейн-платформа](https://golos.io/ru--golos/@golos/golos-russkoyazychnaya-socialno-mediinaya-blokchein-platforma) - -[Голос: общественное медиа как база для социальной активности](https://golos.io/ru--golos/@marina/golos-obshestvennoe-media-kak-baza-dlya-socialnoi-aktivnosti) -https://goldvoice.club/@marina/golos-obshestvennoe-media-kak-baza-dlya-socialnoi-aktivnosti/ - -[План развития блокчейн Голос и клиента Golos.io](https://docs.google.com/document/d/1WQF1xxmCMxzEA95Gnxw4FHViX_6pjVoUlBnItCepOmE/edit?usp=sharing) - -[Делегаты и их роль на платформе Голос](https://golos.io/ru--golos/@on0tole/delegaty-i-ikh-rol-na-platforme-golos) - -[Аккаунт команды Голоса](https://golos.io/@golos) - -[Как сохранять свои ключи (пароли)](https://golosdb.com/ru--golos/@aleco/sokhrani-svoi-klyuchi-sovet-novichkam-po-registracii-v-golose) - -[Как на Голосе работает ограничение на четыре заметки в день](https://golos.io/ru--golos/@oxygendependant/kak-na-golose-rabotaet-ogranichenie-na-chetyre-zametki-v-den) - -#### Публикация и оформление постов в Голосе -[Как создать пост на платформе Голос?](https://golos.io/ru--knigagolos/@aleksandraz/kniga-pro-golos-kak-sozdat-post-na-platforme-golos) - -[Основы оформления постов на Голосе + полный курс по работе с Markdown](https://golos.io/ru--golos/@on0tole/osnovy-oformleniya-postov-na-golose-polnyi-kurs-po-rabote-s-markdown) - -[Дополнительные мультимедийные возможности Голоса: музыка и видео в ваших записях](https://golos.io/ru--golos/@primus/dopolnitelnye-multimediinye-vozmozhnosti-golosa-muzyka-i-video-v-vashikh-zapisyakh) - - -[Этика поведения. О чём и как писать?](https://golos.io/ru--knigagolos/@katrin/etika-povedeniya-o-chyom-i-kak-pisat) - -[Где брать картинки для своих публикаций: базы изображений для коммерческого использования](https://golos.io/ru--golos/@awispa/gde-brat-kartinki-dlya-svoikh-publikacii-bazy-izobrazhenii-dlya-kommercheskogo-ispolzovaniya) - -[Повышаем культуру публикаций](https://golos.io/ru--akademiya/@lesnik/povyshaem-kulturu-publikacii-yunikod) - -[Флаг: как и в каких случаях стоит использовать](https://golos.io/ru--knigagolos/@aleksandraz/kniga-pro-golos-flag-kak-i-v-kakikh-sluchayakh-stoit-ispolzovat) - -#### Биржи для торговли токенами Голоса -**Bittrex**: [GOLOS/BTC](https://www.bittrex.com/Market/Index?MarketName=BTC-GOLOS) и [GBG/BTC](https://bittrex.com/Market/Index?MarketName=BTC-GBG) - -**Livecoin**: [GOLOS](https://www.livecoin.net/ru/trade/orderbook) - -**Kuna** (биржа для жителей Украины): [GBG/UAH](https://kuna.io/markets/gbguah) - -**RuDEX**: [GOLOS/RUBLE](https://market.rudex.org/#/market/RUDEX.GOLOS_RUBLE), [GBG/RUBLE](https://market.rudex.org/#/market/RUDEX.GBG_RUBLE), [GOLOS/USD](https://market.rudex.org/#/market/RUDEX.GOLOS_USD), [GBG/USD](https://market.rudex.org/#/market/RUDEX.GBG_USD) - ---- -**Несколько статей на тему бирж и обмена**: - -[RuDEX начинает торги Golos и GBG](https://golos.io/golos/@dusikasss/prodazha-golos-gbg-na-birzhe-rudex-za-rubli) - -[Внутренний рынок](https://wiki.golos.io/1-introduction/vnutrennii-rinok.html) - обмен GBG на GOLOS и наоборот - -[Как вывести из Голоса выплаты?](https://golos.io/ru--golos/@qqc/kak-vyvesti-iz-golosa-vyplaty-sovety-ot-qqc) - -[Пошаговая инструкция как вывести заработанные деньги из Голоса через биржу Livecoin](https://golos.io/ru--akademiya/@mrwww/poshagovaya-instrukciya-kak-vyvesti-zarabotannye-dengi-iz-golosa-cherez-birzhu-livecoin) - -[Выводим Голос в рубли. Подробный мануал для новичков](https://golos.io/ru--golos/@mishka/vyvodim-golos-v-rubli-podrobnyi-manual-dlya-novichkov) -#### Экономика Голоса для авторов, кураторов, инвесторов и всех остальных (некоторая информация в этих статьях не актуальна после введения 0.17 хардфорка) -[Руководство для новичков: Как чёрт возьми это работает?](https://steemit.com/ru-help/@lehard/rukovodstvo-dlya-novichkov-steemit-kak-chyort-vozmi-eto-rabotaet) - -[Как рассчитывается вознаграждение за пост?](https://golos.io/ru--golos/@lehard/kak-rasschityvaetsya-voznagrazhdenie-za-post) - -[Кураторство на Голосе. Как это работает?](https://golos.io/ru--golos/@haster100/kuratorstvo-na-golose-kak-eto-rabotaet-sait-golos-steemstats-com) - -[Что такое репутация на Голосе и как она работает?](https://golos.io/ru--golos/@arcange/chto-takoe-reputaciya-na-golose-i-kak-ona-rabotaet) -#### Экономика Голоса после 0.16 хардфорка (архивные статьи, не актуальные после введения 0.17 хардфорка) -[Новая экономика Голоса. 1 часть: расчёты и анализ. Что изменится?](https://golos.io/ru--golos/@lehard/novaya-ekonomika-golosa-raschyoty-i-analiz-chto-izmenitsya-itogi-konkursa) - -[Новая экономика Голоса. 2 часть: Централизация или Децентрализация?](https://golos.io/ru--golos/@lehard/novaya-ekonomika-golosa-2-chast-centralizaciya-ili-decentralizaciya) - -[Новая Экономическая Модель ГОЛОСа: перевод поста @hipster на язык простых смертных:)](https://golos.io/ru--golos/@natasha/novaya-ekonomicheskaya-model-golosa-perevod-posta-hipster-na-yazyk-prostykh-smertnykh) - -[Новая экономика Голоса в простых цифрах: что ждёт авторов, инвесторов и делегатов?](https://golos.io/ru--golos/@primus/novaya-ekonomika-golosa-v-prostykh-cifrakh-chto-zhdyot-avtorov-investorov-i-delegatov) - -#### Промо-материалы: баннеры, картинки, креатив про Голос -[Комплекты баннеров для рекламы Голоса на ваших сайтах и в социальных сетях](https://golos.io/ru--golos/@primus/komplekty-1-i-2-bannerov-dlya-reklamy-golosa-na-vashikh-saitakh-i-v-socialnykh-setyakh) - -[Еще один баннер 728х90](https://golos.io/ru--golos/@acidsun/prosto-myslishki-chego-ne-khvataet-na-golose) - -[Принты для футболок #1](https://golos.io/ru--golos/@konti/printy-dlya-futbolok-or-golos) - -[Принты для футболок #2](https://golos.io/ru--golos/@konti/novye-originalnye-printy-dlya-futbolok-or-golos-or-doska-pocheta) - -[Изображения Голоса, которые можно использовать для оформления ваших постов](https://golos.io/ru--golos/@acidsun/eshe-parochka-izobrazhenii-dlya-oformleniya-postov-na-golose) - -[О рекламе, позиционировании и продвижении ГОЛОСа](https://golos.io/ru--golos/@sheriff/informaciya-o-perenose-oficialnogo-zapuska-veb-klinta-bm-na-20-fevralya) -#### Видео о Голосе -Youtube канал [ГОЛОС.ФОНД](https://www.youtube.com/channel/UCL_XlALJ-2cERfY8m6s8uEA) - видео о Голосе, прямые эфиры с разработчиками, делегатами и пользователями Голоса. - -[Токены Голос, Сила Голоса и Золотой - как с ними работать и как зарабатывать в Голосе](https://www.youtube.com/watch?v=PxpXHVA1OYA) - -[Интервью Валерия Литвина, блокчейн-разработчика CyberFund и сооснователя соц.сети Golos](https://www.youtube.com/watch?v=oGXHAH68dXg) - -[ICO/Краудсейл "Голоса": оценка стоимости, перспективы курса токенов и этапы инвестирования](https://www.youtube.com/watch?v=k1O-53a8VXA) -#### Полезные сайты -[GolosTools](http://golostools.com/) - обзор инструментов и сервисов для Голоса - -Блок эксплореры Голоса: [golosd.com](http://golosd.com/) и [golosdb.com](http://golosdb.com/) - -[Steemul](http://steemul.ru/) - разнообразные рейтинги, ТОПы и отзывы пользователей Голоса друг о друге. [Мобильная версия](https://golos.io/ru--golos/@rassen/stream-golos-prezentaciya-pervogo-mobilnogo-prilozheniya) - - -[Доска почёта Голоса](http://golosboard.com/) - геймификация достижений пользователей - -[Golos@Steemstats](http://golos.steemstats.com/) - мониторинг активности аккаунтов Голос. На текущий момент (май 2018 года) - не работает. - -[Калькулятор GBG => RUB](http://steemul.ru/gbg/) - расчет различных вариантов конвертации GBG в рубли, курсы токенов Голоса, золота и рубля -#### Полезные скрипты -[GOLOS NOTIFY](https://golos.io/ru--golos/@on0tole/dolgozhdannyi-anons-golos-notify-bot-uvedomlenii-dlya-golos-io-v-telegram) - Бот уведомлений для golos.io в Telegram - -[GolosNotify](https://golos.io/ru--golos/@on0tole/anons-golosnotify-rasshirenie-dlya-brauzera-google-chrome-s-uvedomleniyami-dlya-golos-io) - расширение для браузера Google Chrome с уведомлениями для golos.io - -[Закладка в браузере](https://golos.io/ru--golos/@anyx/zakladka-v-brauzere-dlya-pereklyucheniya-mezhdu-eksplorerom-platformoi-dlya-golosa-i-stimit-nichego-ne-nuzhno-skachivat), для переключения между эксплорером/платформой для Голоса и Стимит - -[Пользовательские скины, плагины и виджеты для Голоса](https://golos.io/ru--golos/@vik/vstrechaem-polzovatelskie-skiny-plaginy-i-vidzhety-dlya-golosa) -#### Альтернативные web-клиенты блокчейна Голос -Mapala.net - портал для самостоятельных путешественников -Битва "Бизнес Молодости" -Flacoin.io -(VGolose - анонс альтернативного веб-клиента для блокчейна Golos) -(Анонс siski.io) - -Обзор клиентских программ для Голоса: -[Часть 1.](https://golos.io/golos/@vadbars/obzor-klientskikh-programm-dlya-golosa-chast-1) Клиент дозревает, будь готов! - Усегда готов! -[Часть 2.](https://golos.io/golos/@vadbars/obzor-klientskikh-programm-dlya-golosa-chast-2) Клиент всегда прав -[Часть 3.](https://golos.io/golos/@vadbars/obzor-klientskikh-programm-dlya-golosa-chast-3) Клиентов много, я одна - -#### Альтернативные каналы общения пользователей Голоса -[Официальный чат](https://chat.golos.io/home) - -[Канал Telegram](https://t.me/golos_io) - -[Голосовой чат на Discord](https://discordapp.com/channels/253590962381520897/253590962381520897) - -[Голос во Вконтакте](https://vk.com/golos_io) - -[Голос на форуме Bitcointalk.org](https://bitcointalk.org/index.php?topic=1624364.0) - -[Голос на форуме Bitcoinfo.ru](http://forum.bitcoinfo.ru/viewtopic.php?f=13&t=26742) - -#### Полезная статистика -[Результаты ICO: кто и сколько купил ГОЛОСов](http://www.steeme.ru/gf.html) - -[Статистика эффективности работы кураторов в Голосе](https://golos.io/ru--statistika/@primus/2017-01-30-2017-02-05-statistika-kto-samyi-effektivnyi-kurator-v-golose) за январь - февраль 2017 г. - -[Сравнительная статистика 100 первых дней Голоса и Steem](https://golos.io/ru--golos/@ontofractal/sravnitelnaya-statistika-100-pervykh-dnei-golosa-i-steem) - -Периодические обзоры: -[Ежедневная статистика по новым пользователям, постам и комментариям](https://golos.io/@arcange/) - -[Статистика по распределению токенов GOLOS и объему торгов](https://golos.io/@ukrainian) - -[Статистика активности делегатов за неделю](https://golos.io/@sancho.malyutin) - -[Ежедневный отчет о кураторстве](https://golos.io/@naminutku) - -[Книга рекордов Голоса. Кого больше всего лайкают](https://golos.io/@veritas) - -#### Майнерам и делегатам -[Настройка нод майнера и делегата для работы в Голосе: рабочие конфиги и пояснения по установке](https://golos.io/ru--golos/@primus/nastroika-nod-mainera-i-delegata-dlya-raboty-v-golose-rabochie-konfigi-i-poyasneniya-po-ustanovke) - -[Как использовать PoW майнинг-аккаунт для работы в Голосе](https://golos.io/ru--golos/@primus/kak-ispolzovat-pow-maining-akkaunt-dlya-raboty-v-golose) - -[Список всех доступных скриптов обновления цены](https://golos.io/ru--delegaty/@primus/delegatam-cena-zolotogo-na-osnove-birzhi-livecoin-i-spisok-vsekh-dostupnykh-skriptov-obnovleniya-ceny) -#### Автоматизация работы в Голосе и список полезных библиотек -[Разработка персональных ботов для Голоса](https://golos.io/ru--golos/@ontofractal/razrabotka-personalnykh-botov-dlya-golosa-urok-3) - -[Piston](https://golos.io/golos/@chainsquad/pysteempiston-support-for-golos-has-been-added) - Python библиотека для работы с блокчейном Голоса на уровне протокола - -[Golos.js](https://golos.io/ru--golos/@dark.sun/golos-js-legkii-sposob-sozdavat-prilozheniya-dlya-golos) - JavaScript библиотека для работы с блокчейном Голоса - -[GolosSQL](https://golos.io/ru--golos/@arcange/golossql-baza-dannykh-sql-so-vsemi-dannymi-blokchein) - База данных SQL со всеми данными блокчейн - -[Golos.NET](https://golos.io/ru--golos/@arcange/golos-net-a-microsoft-net-library-for-golos-api) - Библиотека .NET library для API Голоса - -[Опенсорс JSONRPC клиент для Голоса на Elixir/Erlang](https://golos.io/ru--golos/@ontofractal/reliz-exgolos-v0-1-open-sors-jsonrpc-klient-dlya-golosa-na-elixir-erlang) - -[Инициатива кибер•Фонда по поддержке открытого исходного кода в Голосе](https://golos.io/ru--otkrytyij-kod/@hipster/iniciativa-kiber-fonda-po-podderzhke-otkrytogo-iskhodnogo-koda-v-golose) - -#### Действующие боты сети Голоса -[radogost](https://golos.io/ru--golos/@radogost/privet-mir-ya-radogost-i-ya-rozhdyon-chtoby-sdelat-golos-gostepriimnym-mestom) - бот, приветствующий новичков, владелец [@phenom](https://golos.io/@phenom) - -[cheetah](https://golos.io/ru--desyatxfaktovobomne/@cheetah/10-faktov-obo-mne-estafeta-ot-dhrms) - бот, преследующий за плагиат и копипасту, владелец [@anyx](https://golos.io/@anyx). Действует в рамках проекта @kulturagolosa - о плагиате и нарушениях в контентной политике - -[Голос-Лото](https://golos.io/@golos.loto) - автоматическая лотерея на Голосе - -#####Закрыты или временно не работают: - -[Лотобот](https://golos.io/@lotobot) - автоматическая лотерея на Голосе, владелец [@ropox](https://golos.io/@ropox) - -[mention.bot](https://golos.io/ru--golos/@mention.bot/pozvolte-predstavitsya-ya-bot-kotoryi-uvedomlyaet-vas-ob-upominaniyakh-v-chuzhikh-postakh) - бот, который уведомляет вас об упоминаниях в чужих постах, владелец [@phenom](https://golos.io/@phenom) - -[alcotester](https://golos.io/ru--golos/@primus/vy-eshe-ne-poluchili-flag-za-svoi-post-ochen-zhal-flag-kheitera-prinosit-tolko-polzu-obyasnenie-raboty-moego-bota) - бот, компенсирующий флаги хейтеров, владелец [@primus](https://golos.io/@primus) - -[seraph](https://golos.io/golos/@seraph/privet-ya-serafim-strazhnik) - бот, компенсирующий флаги хейтеров, владелец [@anyx](https://golos.io/@anyx) - -
        -##### Использованы материалы: -- [Самый полный FAQ о Голосе](https://golos.io/ru--golos/@bitcoinfo/samyi-polnyi-f-a-q-o-golose-spisok-luchshykh-postov-raskryvayushikh-vse-aspekty-proekta-bonusy-v-vide-kreativa) от @bitcoinfo -- [Подборка статей для прочтения новичкам](https://golos.io/ru--golos/@aleco/podborka-statei-dlya-novichkov-rekomendovano-kazhdomu-dlya-prochteniya) от @aleco -- [Подборка статей. Рекомендовано новичкам!](https://golos.io/ru--golos/@aleco/podborka-statei-o-platforme-mediablokchein-golos-3-rekomendovano-novichkam) от @aleco -- [Спецприёмчики для новичков](https://golos.io/ru--obrazovanie/@ladyzarulem/specpriemchiki-dlya-novichkov-chast-1) от @ladyzarulem -
        - -### На английском языке: - -[Awesome Steem](https://steemit.com/awesome/@hipster/awesome-steem) - -[[piston] How to use it for multisignature accounts](https://steemit.com/piston/@xeroc/piston-how-to-use-it-for-multisignature-accounts) - -[Building a high availability steemd node for web apis](https://steemit.com/steem/@jesta/building-a-high-availability-steemd-node-for-web-apis) - -[The Complete Guide to Setup Steem Development Environment in Ubuntu](https://steemit.com/steem/@woung717/the-complete-guide-to-setup-steem-development-environment-in-ubuntu) - -[Developers Guide to Steem's Blockchain](https://steemit.com/steem/@furion/developers-guide-to-steem-s-blockchain) - -[Docker - Steem images are updated to version 0.12.2](https://steemit.com/steem/@teego/docker-steem-images-are-updated-to-version-0-12-2) - -[project: bullfrog-system | Mine STEEM with ease](https://steemit.com/steemit/@kilrathi/project-bullfrog-system) - -[Using Ubuntu's Upstart to Make Steem a Service](https://steemit.com/steemhelp/@steemed/use-ubuntu-upstart-for-steem-service) - -[steemdb 0.2.0 - rshares allocation browser, new data api's and some minor improvements](https://steemit.com/steemdb/@jesta/steemdb-0-2-0-rshares-allocation-browser-new-data-api-s-and-some-minor-improvements) - -[Steem Command Line Guide Part 1 - A Learner's Guide to Using cli_wallet](https://steemit.com/steemhelp/@pfunk/a-learner-s-guide-to-using-steem-s-cliwallet-part-1) - -[A Full Steemit User's Guide to Steem Witnesses](https://steemit.com/steemit-guides/@pfunk/a-full-steemit-user-s-guide-to-steem-witnesses) - -[Steem Mining - Comprehensive Guide](https://steemit.com/steem/@geoffrey/steem-mining-comprehensive-guide) - -[[Experimental] Python Trading without cli-wallet](https://steemit.com/bitshares/@xeroc/experimental-python-trading-without-cli-wallet) - -[Essential Guide to Becoming a Steem Witness](https://steemit.com/steemhelp/@steemed/become-a-steem-witness-essentials) - -[How to start a test network](https://steemit.com/steem/@dantheman/how-to-start-a-test-network) - -[cli_wallet commands v0.5.9 - A Quick Reference](https://steemit.com/steemhelp/@hannixx42/cliwallet-commands-v0) - -[steem.ws - The public steem api cluster](https://steemit.com/steemws/@jesta/steem-ws-the-public-steem-api-cluster) - -[Steemit vote Bot like @wang for introduceyourself](https://steemit.com/hacking/@seagul/steemit-vote-bot-like-wang-for-introduceyourself) \ No newline at end of file diff --git a/users/faq.md b/users/faq.md new file mode 100644 index 00000000..9095f27c --- /dev/null +++ b/users/faq.md @@ -0,0 +1,76 @@ +# Вопросы и ответы + +## **Что такое Голос?** + +Говоря простыми словами, Голос - это социальная платформа. То есть место для общения пользователей. В Голосе вы можете опубликовать свою статью о том, что вы любите, можете поделиться своими фотографиями, а можете просто вести свой блог. + +Другими словами, Голос чем-то похож на смесь социальной сети наподобие Фейсбука и более комплексной платформы для блогеров, наподобие Живого Журнала. + +В Голосе нет приоритета для тех или иных материалов, но чем интереснее материал/контент, который вы публикуете, тем больше шансов получить благодарность в виде токенов от других пользователей + +## **В чем уникальность Голоса?** + +Медиа-платформа с токенами - не инновационное решение. Но у Голоса есть особенности. + +Во-первых, это первый проект, ориентированный на русскоязычную аудиторию. + +Во-вторых, цель этого проекта - дать возможность блогерам и всем пользователям размещать контент, не опасаясь блокировки и цензуры. В ситуации, когда право на свободу слова декларируется, но блокируется, важно иметь ресурс, где это право всегда можно реализовать. + +В-третьих, это межстрановая платформа, работа которой будет поддерживаться во всех странах, где проживает русскоязычное население. + +## **Чем Голос отличается от финансовой пирамиды?** + +Голос - социальная сеть, построенная на публичном блокчейне. Вознаграждение пользователей осуществляется за счет дополнительной эмиссии токенов. При этом распределением токенов управляют все пользователи сети. Отличие от финансовых пирамид фундаментально: + +* открытый программный код; +* прозрачность всех операции; +* отсутствие конечного выгодоприобретателя; +* отсутствие обязательств на выплату фиксированного дохода; +* отсутствие центрального администратора. + +Блокчейн - децентрализованный реестр сплошного учета транзакций со встроенными экономическими стимулами для участников сети, которые задаются математическим алгоритмом. + +Для поддержания децентрализации предусмотрена система мотивации участников сети токенами. Токены эмитируются в соответствии с математическим алгоритмом и распределяются в качестве вознаграждения участникам сети. + +Стоимость токенов определяется спросом на токены на открытом рынке. Спрос зависит от популярности сети. + +## **Как эмитируются токены в Голосе?** + +Согласно параметрам выбранным делегатами проекта по состоянию на февраль 2020 г. эмитируемые токены Голоса распределяются в следующей пропорции: + +* 75% - поступают текущим держателям Силы Голоса \(и с них у каждого пользователя есть возможность поддержать понравившийся контент\), +* 15% - поступает делегатам блокчейна на обеспечение технической поддержки фукнционирования сети, +* 10% - поступает в фонд воркеров, т.е. на дальнейшее развитие функциональности, приложений, маркетинг и прочее.. + +## **На каких биржах торгуются токены?** + +На данный момент проект поддержан биржами: [RuDEX](https://rudex.org/), [Kuna](https://kuna.io/), [Steem-Engine](https://steem-engine.com/?p=market&t=GOLOSP). + +Также возможна продажа токенов Голос на токены Золотой и обратно [на внутреннем рынке](https://golos.io/market). + +## **Как обеспечивается работоспособность сети?** + +Голос - это социальная сеть, работа которой изначально поддерживается во всех странах, где проживает русскоязычное население. Такая децентрализация позволяет обеспечить устойчивость сети к атакам и блокировкам. Сайт Golos.id только выводит данные из децентрализованной сети блокчейна, и дает пользователям с ним взаимодействовать. + +Если по какой-то причине Golos.id будет заблокирован, то вопрос предоставления доступа пользователям Голоса к сети будет решаться путем создания зеркал сайта. + +В планах запуск десктоп-клиента который не будет зависеть от доменов и сможет подключаться к любой доступной публичной ноде блокчейна Голос. + +## **Почему введен Золотой, обеспеченный золотом \(GBG\)?** + +В Стиме существует токен Стимдоллар - это долговое обязательство этого блокчейна выплатить 1 американский доллар в Стимах в течении периода конвертации по среднему курсу. + +В блокчейне Голос действует аналогичный токен Золотой \(GBG\), но он привязан к цене 1 миллиграмма золота. Это долговое обязательство блокчейна Голос выплатить стоимость 1 миллиграмма золота в ГОЛОСАХ в течении периода конвертации \(3.5 дня\) по среднему курсу. + +Считаем историческая стабильность курса на золото делает токен, привязанный к его цене, отличным инструментом для сбережений и расчетов. + +## **Что такое децентрализация?** + +Простыми словами, децентрализация - это когда отсутствует центральный орган управления. То есть это нечто, что управляется не одним человеком / командой / органом, а сразу многими. Эти "многие" для управления добиваются консенсуса \(об этом ниже\). + +Простой пример - положив свои деньги в банк, вы доверяете банку \(точнее руководству этого банка\) ими управлять. То есть эти деньги, по сути, контролирует центральный орган управления банка. Это централизованная площадка. + +Допустим у вас и еще у 100 человек есть свой бизнес \(в котором вы все являетесь владельцами в зависимости от кол-ва токенов\). Прежде чем вы что-то будете вместе делать, предстоит это обсудить с представителями сообщества в лице делегатов, крупными держателями акций проекта и т.д. Это и есть децентрализация, когда решение принимается многими участниками в обсуждениях, голосованиях... + +Википедия: **децентрализация** это - _процесс перераспределения, рассеивания функций, сил, власти, людей или вещей от центрального местоположения или управляющего органа_. + diff --git a/users/posts/README.md b/users/posts/README.md new file mode 100644 index 00000000..0b4d0a30 --- /dev/null +++ b/users/posts/README.md @@ -0,0 +1,6 @@ +# Полезные посты + +* [Внутренняя биржа](market.md) +* [Сервис поиска по БЧ](golos-history.md) +* [Кошелёк и ключи](wallet.md) + diff --git a/users/posts/golos-history.md b/users/posts/golos-history.md new file mode 100644 index 00000000..55edff20 --- /dev/null +++ b/users/posts/golos-history.md @@ -0,0 +1,20 @@ +# Сервис поиска по БЧ + +Автор: [@vik](https://golos.id/@vik) + +**Автономный инструмент для сканирования истории** [**golos.cf/history**](https://golos.cf/history/)\*\*\*\* + +Его главное преимущество - автономность. Все вычисления происходят на стороне браузера, а значит вы можете просто скопировать html страницу и использовать ее даже если домен будет отключен. + +![](https://img.golos.io/proxy/https://i.imgur.com/8TsLyRd.gif) + +Приложение позволяет работать в нескольких режимах: + +* Просмотр всей истории аккаунта +* Просмотр недавних операций +* Поиск недавних или всех операций содержащих ключевое слово +* Поиск недавних или всех операций строго содержащих все указанные ключевые слова +* Поиск по множеству типов операций + +Более подробнее в посте автора - [https://golos.io/@vik/explorer-guide](https://golos.io/@vik/explorer-guide) + diff --git a/users/posts/market.md b/users/posts/market.md new file mode 100644 index 00000000..47dd1a43 --- /dev/null +++ b/users/posts/market.md @@ -0,0 +1,39 @@ +# Внутренняя биржа + +Если нужно поменять токены GOLOS на GBG и наоборот, это всегда можно сделать на [внутренней бирже](https://golos.id/market). + +![](https://imgp.golos.io/0x0/https://s5.postimg.org/6jgbtfi47/%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%BF%D0%BB%D0%B0%D0%BD.jpg) + +Слева вы видите графики, а справа - последние сводки на торговлю: последняя цена, объём, покупка, продажа и разница. + +* **Последняя цена** + * стоимость последней сделки +* **Объём** + * суммарный объём всех сделок за последние 24 часа +* **Покупка** + * последняя цена на покупку GBG +* **Продажа** + * последняя цена на продажу GBG +* **Разница** + * разница между покупкой и продажей, выраженная в процентах + +Далее две таблицы: **КУПИТЬ ГОЛОС** и **ПРОДАТЬ ГОЛОС**. + +* В таблице “КУПИТЬ ГОЛОС” можно приобрести голос за имеющиеся в вашем кошельке Золотые. Гиперссылка “доступно” автоматически вобьёт в графу GBG ваше количество золотых, а гиперссылка “лучшая цена продажи” выберет самую актуальную цену на данный момент. Затем останется только нажать кнопку “купить голос”. +* В таблице “продать голос” всё тоже самое, только наоборот. + +Ниже можно увидеть ещё две таблицы: **ЗАКАЗЫ НА ПОКУПКУ** и **ЗАКАЗЫ НА ПРОДАЖУ.** + +![](https://imgp.golos.io/0x0/https://s5.postimg.org/c6coqwkmv/%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B.jpg) + +* В первой - наиболее актуальные ордера на покупку Голоса за GBG +* Во второй - наиболее актуальные ордера на продажу Голоса за GBG + + Вы также можете выставить свой ордер и ожидать его исполнения с той ценой, которая, по вашему мнению/расчёту, может быть в ближайшее время или поставить ордер на долгий срок. + +#### Ещё ниже большая таблица: **ИСТОРИЯ СДЕЛОК.** + +![](https://imgp.golos.io/0x0/https://s5.postimg.org/rdsob9chj/%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F.jpg) + +В ней можно увидеть список последних сделок на внутреннем рынке, а в табличке ещё ниже \(она обычно пустая\), могут быть Ваши ордера на покупку/продажу, если, конечно, вы выставляли ордера со своей ценой, а не предлагаемой рынком. Нужно отметить здесь, что при выставления цены рынка ордер срабатывает почти мгновенно, а при выставлении своей цены будет нужно ожидать. + diff --git a/users/posts/wallet.md b/users/posts/wallet.md new file mode 100644 index 00000000..cde07fc4 --- /dev/null +++ b/users/posts/wallet.md @@ -0,0 +1,73 @@ +# Кошелёк и ключи + +### Балансы + +1. **Балансы** - это первая вкладка кошелька. Здесь вы видите общую оценку стоимости своего аккаунта и историю транзакций. + +![](https://imgp.golos.io/0x0/https://s19.postimg.org/qvrw5py37/image.png) + +В кошельке существует 3 типа валют: **Голос, Сила Голоса и Золотой**. + + +**Голос / GOLOS** - свободно перемещаемый токен, торгуется на внутренней и на внешних биржах. Это такая же криптомонета, как и остальные. С тем отличием, что ценность токена Голос растёт пропорционально интересу, популярности и полезности платформы golos.id и других клиентов с этой криптовалютой. + +Голоса можно: +**Передать** - Голоса передаются на другой аккаунт или на биржу. Для этого надо правильно заполнить появившуюся форму \(при переводе на биржу в заметку вставляется мемо\) и авторизироваться для проведения транзакции. + +**Перевести в сейф** - это делается для безопасности и сохранности ваших средств, если есть подозрения, что пароль мог быть скомпрометирован. Токены в сейф попадают мгновенно, а обратный вывод проводится 3 дня. Можно перевести не только в свой сейф, но и другому пользователю, кликнув на РАСШИРЕННЫЕ ОПЦИИ. + +**Увеличить Силу Голоса** - эта функция позволяет перевести Голоса на долгий срок в СГ, чтобы увеличить ваш вес на платформе и получать больший процент. + +**Купить или продать** - кликнув на эту кнопку, вы сразу попадёте на внутреннюю биржу, где можете провести желаемые транзакции. + +* **Сила Голоса** - это те же токены Голос, только не перемещаемые. Количество Голосов, вложенное в ваш аккаунт на долгосрочное хранение и есть Сила голоса. Чем выше СГ, тем больший процент от эмиссии новых токенов вы получаете и тем больше можете вознаграждать понравившийся контент других пользователей. + +Сила голоса показывает Ваш “вес” на платформе. Не путайте с репутацией. Сила Голоса, говоря иносказательно, это акции платформы, и каждый пользователь имеет свою долю, свой “вес”. Причём при долгосрочном хранении Голосов в Силе Голоса их количество увеличивается. Вдобавок к тому, что ценность и курс токена Голос со временем может значительно вырасти. + +Из Силы Голоса токены Голос тоже можно вывести. Для этого надо **Уменьшить Силу Голоса**. Однако это долгий процесс, происходящий в течение 13 недель. И Голоса будут выводиться раз в неделю равными долями от той суммы, что была при нажатии на кнопку понижение. + +* **Золотой / GBG** - это свободно перемещаемый токен, приравненный к 1 мг золота. Эта цена токена внутри системы, на внешних рынка цена разная и зависит от соотношения спроса и предложения. + +Золотые можно: +**Передать** - Золотые передаются пользователю на другой аккаунт или на биржу. Аналогично токенам Голос. + +**Перевести в сейф** - перевод работает так же, как и с Голосами. + +**Купить или продать** - кликнув на эту кнопку, вы сразу попадёте на внутреннюю биржу, где можете провести желаемые транзакции с Золотыми. + +**Перевести в Голос** - перевод Золотых в Голос занимает три с половиной дня. Конвертация осуществляется по среднему курсу в течение этих дней. + +### Разрешения + +2. **Разрешения** - вторая вкладка в меню кошелька - хранилище ваших ключей. + +![](https://imgp.golos.io/0x0/https://s19.postimg.org/bobwld68j/image.png) + +Нажимая эту кнопку, вы видите набор шифров - публичных, которые можно прочитать с экрана, они расположены слева и начинаются с “GLS”, и приватных ключей - они расположены справа и спрятаны за прямоугольниками, начинаются с цифры 5. + +Для безопасности, ключи хранятся в зашифрованном виде, так как эти наборы цифр может посмотреть любой желающий! Поэтому приватные ключи зашифрованы и блокчейн производит расшифровку этих цифр с применением вашего основного пароля. + +{% hint style="info" %} +Ключи - это основа основ управления вашим аккаунтом! Настоятельно рекомендуется хранить их в нескольких местах. +{% endhint %} + +* **приватный Постинг ключ** отвечает за голосование/постинг. Используя этот ключ, вы сможете размещать информацию в своем блоге с любого устройства, даже с чужого компьютера пользоваться ботами, сторонними приложениями, не рискуя своим балансом. + +Если вы планируете ближайшее время заниматься только написанием контента и голосованием, то рекомендуется зайти в аккаунт не через основной пароль, а используя приватный постинг ключ. Так ваши средства будут в ещё большей безопасности. Это же стоит делать, если вы заходите с чужого компьютера или пользуетесь групповым аккаунтом. + +* **приватный Активный ключ** - ключ, отвечающий за перевод средств. + +Публичные ключи транслируются в блокчейн. Приватные ключи - это подтверждение вашей личности. Восстановить их невозможно, они генерируются блокчейном, но не хранятся в нём. + +* **ключ Владельца** - это главный ключ имеющий все функции предыдущих. Он нужен для генерирования нового пароля \(самого же себя\) в случае если есть подозрения, что пароль скомпрометирован. Приватный ключ вам не открывается в разделе разрешений. + +**Важно!** Никогда не вводите приватные ключи в поле, предназначенное для заметки. Любые ключи, только при запросе проверенной системы, которой можно доверять. + +#### Пароль + +3. Нажимая на вкладку **Пароль**, вы видите следующую страницу: + +![](https://imgp.golos.io/0x0/https://s19.postimg.org/6f4klezir/image.png) + +Эта вкладка вам понадобится только в том случае, если аккаунт был создан не вами и для сохранности своих средств и репутации нужно сменить пароль. Или в том случае, если ваш пароль узнали посторонние лица. + diff --git a/users/registration.md b/users/registration.md new file mode 100644 index 00000000..5ffe35fc --- /dev/null +++ b/users/registration.md @@ -0,0 +1,21 @@ +# Способы регистрации + +Для получения полного доступа к медиаблокчейну Голос необходимо зарегистрироваться. Существует несколько точек доступа \(сайтов или программ\), которые предоставляют такую возможность. Полученные при регистрации логин и пароль можно использовать для входа в Голос через все другие точки доступа. + +* Надежно сохраните полученные логин, пароль и ключи. Утраченные данные невозможно восстановить. +* Не пользуйтесь для регистрации и входа непроверенными сайтами и сервисами. + +### Способы регистрации: + +* **Сайт** [Golos.id](https://golos.id) \(зеркало [golos.in](https://golos.in)\) +* **Сайт** [Memestagram.io](https://memestagram.io/) +* **Через ВК** - [vk.com/reg\_golos\_ru](https://vk.com/reg_golos_ru) +* **Страница на** [golos.cf](https://golos.cf/reg/) + + Зайдите на страницу, укажите логин и активный ключ регистратора, желаемые логин и пароль для нового аккаунта. Отправка или получение смс не требуется. + + Ограничения: + + * Вы сможете создать новый аккаунт только при помощи своего существующего аккаунта. + * Вам необходимо иметь на счету \(не в силе голоса\) минимум 3 GOLOS. При создании аккаунта они будут переведены в силу голоса нового аккаунта. + diff --git a/users/welcome.md b/users/welcome.md new file mode 100644 index 00000000..cbcc67e1 --- /dev/null +++ b/users/welcome.md @@ -0,0 +1,106 @@ +# Начни отсюда + +## Добро пожаловать на Голос! + +Небольшое, но информативное руководство поможет вам разобраться в платформе Голос. + +Заходим на сайт [golos.id](https://golos.id) \(зеркало [golos.in](https://golos.in)\) , регистрируемся, ЗАПИСЫВАЕМ и сохраняем свой пароль, начинаем пользоваться! + +### Не теряйте свой пароль! + +Регистрируясь на сайте, вы ознакомились с предупреждением хранить свой пароль в безопасности. Пожалуйста, следуйте этому правилу. + +### Какие главные секреты этой "кухни"? + +Самый главный "секрет", это не гнаться за наградой. Публиковать только интересный контент. Не унывать, если что-то не нравится другим пользователям. Пробовать писать другой контент! + +Второй "секрет" - это общение. + +### Возьмут ли с меня деньги за пользование платформой Голос? + +Нет! Чтение, публикация, комментирование и апвоуты \(лайки\) совершенно бесплатны. Более того, Голос помогает получить вознаграждение. + +### Сколько я смогу тут заработать? + +Мы не рекомендуем гнаться за прибылью. Помните, что это социальная площадка для общения с другими участниками и для публикации. Наслаждайтесь временем своего участия на платформе Голос. + +## Что можно делать на платформе Голос? + +### Написание постов + +Для того чтобы создать пост, нажмите на кнопку «Добавить пост» в верхнем правом углу экрана. Обратите внимание, что пост должен содержать: название, категорию, тэги \(ключевые слова\) и текст \(который может включать в себя изображения, видео и прочее\). + +### Комментирование + +Чтобы освоиться на платформе Голос, мы рекомендуем всем участникам комментировать как можно чаще. Высказывайтесь, делитесь своим мнением и находите интересных собеседников. + +Для создания комментария нажмите кнопку «Ответить» после текста поста или комментария. + +### Голос за \(лайки\) + +Чтобы «лайкнуть» чей-то пост или комментарий, нажмите на кнопку в виде стрелочки в кружочке, она расположена под текстом поста или комментария. + +Своим «лайком» вы даете автору знать, что его контент вам понравился, а пост будет выше в выдаче лент актуального и популярного, где возрастает вероятность получить благодарность читателей в виде токенов проекта Голос. + +### Голос против \(дизлайки\) + +«Дизлайк» - это выражение отрицательного отношения другого пользователя к опубликованному посту или комментарию, понижению его в выдаче на сайте. Также «дизлайк» может уменьшить репутацию, если он поставлен участником с более высокой репутацией. + +### Поделиться \(реблог, репост\) + +Если вы хотите поделиться чьим-то постом с вашими подписчиками, нажмите на кнопку «Поделиться» в виде стрелки назад. Этот пост появится в вашем блоге с обозначением "Поделился такой-то". + +### Подписки / лента + +Для того, чтобы подписаться на автора, нажмите на ник автора и в выпадающем окошке нажмите на кнопку «Подписаться». Также можно перейти на страницу его профиля и нажать кнопку «Подписаться» в правом верхнем углу. + +Материал авторов, на которых вы подписались, появится у вас в Ленте \(там появляется только тот материал, который автор опубликовал уже после того, как вы на него подписались\). + +Со временем у вас тоже появятся свои подписчики, если вы будете принимать активное участие в жизни сообщества Голос. + +### Какие монеты есть на Голосе? + +В Голосе 3 вида "токенов" \(монет\): Голос, Сила Голоса и Золотой. + +а\) Голос \(или GOLOS\) - это основная монета. Она используется, чтобы обозначить размер вознаграждения пользователей платформы Голос в удобной для них валюте. + +б\) Сила Голоса \(или СГ\) - определяет "вес" влияния вашего голоса \(на ранжирование контента, на выбор делегатов и конечно на процент который вы получаете за хранение токенов в СГ\). + +с\) Золотой \(или GBG\) - приравнивается к текущему курсу 1 мг золота на рынке драгоценных металлов, выраженному в токенах Голос. + +> GBG расшифровывается как Gold backed by GOLOS \(Золотой, обеспеченный ГОЛОСами\). + +### Выплаты вознаграждения + +Начиная с декабря 2019 года \(когда был принят [22-й хардфорк](../developers/hardforks/hf22_release.md)\) - пользователи самостоятельно принимают решение насколько и что они готовы поддержать полученными как процент на СГ - токенами. Важно воспринимать «донат» именно как благодарсность автору за понравившийся контент, а не какие-то чаевые и прочее. + +### Ввод и вывод токенов + +Полученные токены Голос \(GOLOS\) или Золотой \(GBG\) Вы можете вывести на биржи: [RuDEX](https://rudex.org/), [Kuna](https://kuna.io/), [Steem-Engine](https://steem-engine.com/?p=market&t=GOLOSP). Доступен и обратный процесс получения токенов с ваших аккаунтов на этих биржах. + +Также возможен обмен токенов Голос \(GOLOS\) на токены Золотой \(GBG\) и обратно [через внутренний рынок](https://golos.id/market). + +## Навигация по сайту Golos.id + +### Верхнее меню + +_Лента_ – Материал тех авторов, на которых вы подписаны + +_Новое_ – Новые посты, отсортированы по дате, от нового к старому + +_Актуальное_ – Актуальные посты на данный момент + +_Популярное_ – Самые популярные посты за неделю + +_Промо_ - Посты, продвигаемые за Золотые \(GBG\). + +### Раздел «Профиль» + +_Блог_ – Все ваши посты и реблоги + +_Комментарии_ – Все ваши комментарии + +_Ответы_ – Ответы на ваши комментарии + +_Кошелек_ – Ваши балансы токенов \(Голос, Сила Голоса и Золотой\). + diff --git a/witnesses/basics.md b/witnesses/basics.md new file mode 100644 index 00000000..d0b48239 --- /dev/null +++ b/witnesses/basics.md @@ -0,0 +1,51 @@ +# Делегатство и роли нод + +Термин **делегат** \(который применяется в Голосе\) более полноценно отражает суть данной должности, так как сообщество делегирует некоторым его членам определенные права. + +Алгоритм DPOS \(делегированное доказательство доли\) был предложен Даниэлем Ларимером и впервые был применен в BitShares. + +В его основе лежит голосование, наделяющее пользователей имеющих определенный уровень репутации в сообществе и получивших определенное количество \(вес\) голосов, некоторыми правами \(а если быть точным, то скорее обязанностями\). Данные пользователи \(Делегаты\) используя своё \(арендованное\) оборудование обеспечивают функционирование узлов \(нод\) сети, создают и подписывают новые блоки, обеспечивая безопасность сети. + +В Голосе как и в Стиме используется смешанный консенсус DPOS \(Delegated Proof of Stake\) + POW. + +За один раунд создается 21 блок, с интервалом около 3 секунд. **Топ 19** делегатов из общего списка \(набравшие в сумме наибольший вес голосов за свои кандидатуры\) производят блок в каждом раунде, еще один блок производит делегат, не попавший в топ 19, причем вероятность того, что он произведет блок пропорциональна весу голосов отданных за него \(и соответственно его позиции в листинге\), в сравнении с другими делегатами, не вошедшими в топ. И последний \(21-й\) блок в раунде производит POW - майнер в соответствии с очередью. + +Однако в Голосе задача делегатов не ограничивается одним лишь подписанием блоков. Одной из важнейших задач делегатов является публикация ценовых фидов \(price feed\) \(курс токенов GOLOS в Золотых \(GBG\)\). При этом они напрямую заинтересованы в выставлении корректной стоимости, \(которая в свою очередь регулируется рынком\), ведь получая вознаграждение в виде Силы Голоса они будут нести потери при публикации недостоверных цен. С учетом того, что ценовые фиды устанавливаются делегатами, которые были избраны сообществом, текущая цена, используемая для конверсии является медианным значением выборки ценовых фидов. Из этого следует, что делегаты, имеющие существенное отклонение от медианного значения имеют в свою очередь минимальное влияние на цену конверсии, однако могут терять свою репутацию в сообществе. Кроме того, делегаты устанавливают минимальную комиссию в GP \(Сила Голоса\) за создание аккаунта, и процентную ставку доходности Золотого \(GBG\), а также принимают/либо отклоняют новые релизы сети \(хардфорки\). + +Делегаты получают за свою работу награду с каждого произведенного блока, что мотивирует их поддерживать и развивать сеть в долгосрочной перспективе. + +Одним из важных преимуществ данной системы – является то, что с её помощью все держатели Силы Голоса являются одновременно акционерами платформы, и могут через доверенных лиц \(делегатов\) принимать участие в принятии различных важных для платформы решений. Активное развитие платформ Стима, а теперь и Голоса подтверждают, что данный алгоритм определенно имеет большое будущее, в том числе для развития децентрализованных платформ. + +Для безопасности и устойчивой работы сети они должны держать свои ноды в рабочем состоянии 24 часа в сутки, 7 дней в неделю, 365 дней в году. + +Хотя в принципе, даже если делегат пропускает блок, ничего страшного для сети не произойдет, блок следующего делегата будет содержать пропущенную транзакцию, а время подтверждения составит 6 секунд вместо трех. Вместе с тем, поскольку вся работа делегатов \(в том числе подписание блоков\) публична, их пассивность либо значительное количество пропущенных блоков может быть причиной для их замены на более активных делегатов путем голосования сообщества. + +## Типы и роли нод + +Нода, это сердце блокчейна, программное обеспечение, которое обрабатывает блок за блоком, исполняет все операции и хранит состояние системы. Владелец настраивает ноду, выбирает используемые плагины. От включенных плагинов и их настроек зависит то, какие возможности может предоставлять нода. + +### Witness node + +За формирование блоков отвечают делегаты, поэтому важнейшими нодами являются именно они. С помощью них обмениваются данными с другими нодами, собирают транзакции и когда подходит очередь делегата \(владельца сервера\) сформировать блок — происходит подпись собранного блока и его трансляция другим узлам. Блок должен быть подписан и доставлен за 3 секунды, выделенные на это делегату. Пропуск блока приводит к задержке выполнения транзакций. + +Зачастую делегаты держат две ноды, основную и запасную \(резерв\). Часто они находятся в разных дата-центрах и не зависят друг от друга. Если с основной нодой происходит неполадка, то делегат меняет ключ подписи блоков на резервный и формированием блоков будет заниматься запасная нода. + +### Seed node + +Основа для функционирования любой блокчейн системы — peer-to-peer \(p2p\) соединение и обмен данными. Сид-ноды отличаются тем, что выполняют важную роль — принимают и раздают блоки, разгружая таким образом пропускную способность всей сети и снижая отклик для близких территориально подключений. Нет экономической выгоды держать сид-ноду, так как сервер стоит денег, но не приносит своему владельцу ничего. Поэтому большинство сид-нод запускают делегаты \(witnesses\), если они могут позволить себе это финансово. + +### API node + +Часть плагинов занимаются предоставляем API для разработчиков и их пользователей. Такие ноды часто называют полными, если у них включены все доступные плагины и хранят историю с первого блока. Так как плагины дают доступ не только к состоянию системы, но и формируют свои структуры данных, у них повышенные требования к ресурсам сервера \(особенно к оперативной памяти, так как нода хранит базу данных ChainBase в RAM\). Именно через API ноды происходят запросы на актуальную информацию, статус аккаунтов, историю операций или заявки в комитете. + +Примеры таких плагинов: + +* **network\_broadcast\_api** — отправка транзакции в сеть; +* **database\_api** — основной плагин предоставляющий доступ к состоянию системы, получение данных об аккаунтах, получение информации о блоке, получение параметров сети; +* **account\_history** — получение списка операций связанных с аккаунтом; +* **worker\_api** — получение списка заявок, информации о заявке, получение списка голосов по заявке; +* **operation\_history** — получение информации об операциях в блоке; +* **witness\_api** — получение списка делегатов, очереди делегатов, информации о конкретном делегате и его голосуемых параметрах сети. + +API ноды могут быть как приватными \(когда в настройках указаны параметры доступа по логину и паролю\), так и публичными \(когда обращение к API доступно всем и публично известен адрес ноды\). + diff --git a/witnesses/median-props.md b/witnesses/median-props.md new file mode 100644 index 00000000..97289ccf --- /dev/null +++ b/witnesses/median-props.md @@ -0,0 +1,180 @@ +# Медианные параметры + +Ряд параметров блокчейна являются голосуемыми, т.е. делегаты подают свои значения, из которых потом формируются некие консенсусные значения. + +Медианные параметры сети можно посмотреть на [https://explorer.golos.id](https://explorer.golos.id) или здесь [https://ropox.app/steemjs/api/database\_api/get\_chain\_properties](https://ropox.app/steemjs/api/database_api/get_chain_properties) + +## Курс GBG/GOLOS + +Данный курс отвечает за внутренние конвертации GBG-GOLOS и начисления вознаграждений. + +Обновление курса происходит 1 раз за период `STEEMIT_FEED_INTERVAL_BLOCKS`. + +* Происходит вычисление текущего медианного курса следующим образом: + 1. Проверяется количество опубликованных ценовых фидов в текущем раунде подписи блоков. + 2. Список фидов сортируется по значению. + 3. Берётся курс, который оказался в середине отсортированного списка. +* Текущее значение медианного курса попадает в условную таблицу медианных курсов, которая хранит курсы за промежуток времени `STEEMIT_FEED_HISTORY_WINDOW` \(3.5 дня\). +* Таблица с этими курсами сортируется и уже из неё берётся значение, которое находится в середине. +* Проверяется, что получившееся значение не меньше минимально возможной цены GBG/GOLOS, которая является ограничителем размера долга GBG. Минимальная цена вычисляется по формуле `min_price = 9 * sbd_supply.amount / current_supply.amount` +* Это значение \(либо min\_price\) и становится текущим действующим медианным курсом, по которому происходят все операции конвертаций и прочие. + +#### Некоторые следствия + +* Делегаты с устаревшими или сильно завышенными/заниженными прайсфидами мало влияют на медианный курс, так как оказываются по краям отсортированного списка +* Медианный курс меняется плавно, в течении 3.5 дней +* Можно условно предсказать, куда стремится медиана, глядя на самое последние значение из истории опубликованных медиан \(можно получить с помощью `get_feed_history`\) + +## Начальные параметры + +Помимо курса, делегаты голосуют и за другие параметры. В них используется более простой механизм: + +* Берутся все значения параметра, опубликованные делегатами в текущем раунде подписи блоков. +* Список сортируется по значению параметра. +* Берётся значение, которое оказалось в середине отсортированного списка. +* Получившееся значение вступает в силу немедленно. + +### account\_creation\_fee + +Размер комиссии в токенах GOLOS за создание аккаунта без делегирования. + +### maximum\_block\_size + +Максимально допустимый размер блока в сети \(в байтах\). + +### sbd\_interest\_rate + +Размер годового процента по GBG, выплачиваемого держателям этих токенов. + +### **create\_account\_min\_golos\_fee** + +Размер комиссии в токенах GOLOS, требуемый для создания аккаунта с делегированием. + +### **create\_account\_min\_delegation** + +Минимально возможное количество Силы Голоса при создании аккаунта с делегированием. + +### **create\_account\_delegation\_time** + +Время «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием \(в секундах\). + +### **min\_delegation** + +Минимально возможное количество Силы Голоса для делегирования на аккаунт. + +## Параметры с 19 ХФ + +### **max\_referral\_interest\_rate** + +Макс. процент выплат рефереру от доходов реферала. + +### **max\_referral\_term\_sec** + +Макс. срок получения выплат рефереру. + +### **min\_referral\_break\_fee** + +Мин. сумма выкупа от реферала. + +### **max\_referral\_break\_fee** + +Макс. сумма выкупа от реферала. + +### **posts\_window** + +Длительность интервала/окна для постов в секундах. + +### **posts\_per\_window** + +Количество постов за интервал. + +### **comments\_window** + +Длительность интервала/окна для комментариев в секундах. + +### **comments\_per\_window** + +Количество комментариев за интервал. + +### **votes\_window** + +Длительность интервала/окна для апвоутов в секундах. + +### **votes\_per\_window** + +Количество апвоутов за интервал. + +### **auction\_window\_size** + +Длительность штрафного окна при голосовании \(в секундах\). + +### **max\_delegated\_vesting\_interest\_rate** + +Макс. процент отчислений от кураторских для инвесторов делегирующих свою Силу Голоса. + +### **custom\_ops\_bandwidth\_multiplier** + +Мультипликатор "пропускной способности" для операций custom\_json. + +### **min\_curation\_percent** + +Минимальный размер процента кураторских. + +### **max\_curation\_percent** + +Максимальный размер процента кураторских. + +### **curation\_reward\_curve** + +Кривая кураторского вознаграждения. + +### **allow\_distribute\_auction\_reward** + +Распределение штрафа из штрафного окна в пользу других кураторов. + +### **allow\_return\_auction\_reward\_to\_fund** + +Распределение штрафа из штрафного окна в фонд вознаграждений**.** + +## Параметры с 22 ХФ + +### worker\_reward\_percent + +Процент от эмиссии в пул воркеров. + +### witness\_reward\_percent + +Процент от эмиссии в пул делегатов. + +### vesting\_reward\_percent + +Процент от эмиссии в пул вестинга/на Силу Голоса. + +### worker\_request\_creation\_fee + +Размер платы за подачу заявки воркером. + +### worker\_request\_approve\_min\_percent + +Процент от общей СГ, необходимый для одобрения заявки воркера. + +### sbd\_debt\_convert\_rate + +Процент от общего кол-ва GBG для ежедневной конвертации в GOLOS при долге более 20%. + +### vote\_regeneration\_per\_day + +Степень регенерации батарейки - кол-во полных апвоутов в день. + +### witness\_skipping\_reset\_time + +Срок пропуска блоков, после которого ключ делегата сбрасывается и нода не участвует в подписании \(в секундах\). + +### witness\_idleness\_time + +Срок с подписи последнего блока делегатом, после которого все голоса с него обнуляются \(в секундах\). + +### account\_idleness\_time + +Срок неактивности аккаунта, после которого отменяется делегирование и запускается понижение СГ \(в секундах\). + diff --git a/witnesses/node/README.md b/witnesses/node/README.md new file mode 100644 index 00000000..f86c6f6b --- /dev/null +++ b/witnesses/node/README.md @@ -0,0 +1,18 @@ +# Установка ноды + +* [Подробный гайд](guide.md) по запуску делегатской ноды с вкл. seed-обменом +* [Гайд](guide-api.md) по запуску публичной API-ноды и настройкой Nginx +* [Настройка](https://golos.id/ru--golos/@vik/publichnyi-api-dlya-golosa-dopolnitelnye-nody-i-nastroika-nginx-upstream-load-balancer-balansirovka-nagruzki) Nginx c Upstream \(балансировкой нагрузки\) + +{% hint style="info" %} +Бекап файла блоклогс: +[https://files.rudex.org/golos-classic/blockchain/block\_log](https://files.rudex.org/golos-classic/blockchain/block_log) + +[Список ](https://golos.id/nodes)актуальных seed-нод. + +Скомпилированные бинарники для v0.22.0: + +* cli\_wallet: [https://files.rudex.org/golos-classic/cli\_wallet](https://files.rudex.org/golos-classic/cli_wallet) +* golosd: [https://files.rudex.org/golos-classic/golosd](https://files.rudex.org/golos-classic/golosd) +{% endhint %} + diff --git a/witnesses/node/guide-api.md b/witnesses/node/guide-api.md new file mode 100644 index 00000000..d6a9cdda --- /dev/null +++ b/witnesses/node/guide-api.md @@ -0,0 +1,265 @@ +# Настройка для API-ноды + +Публичные API-ноды важная составляющая для блокчейна, особенно когда есть заинтересованность в развитии приложений \(клиентов, ботов, скриптов, игр и пр.\), которые порой повышают ценность для всего проекта. + +В зависимости от целей, API-ноду можно поднять начиная с 2 ядер процессора, 8 Гб RAM и 80 Гб SSD памяти. Есть провайдеры, где подходящая VPS-ка обойдётся всего в [10$ за месяц](https://contabo.com/?show=configurator&vserver_id=229). + +Ниже описан вариант установки публичной API-ноды для блокчейна GOLOS \(с хранением истории на неделю\). Для такой ноды, оптимальный вариант VPS-ка с 16 Гб RAM памяти. + +## Устанавливаем Docker + +```text +sudo apt-get update +``` + +```text +sudo apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + software-properties-common +``` + +```text +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +``` + +```text +sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" +``` + +```text +sudo apt-get update +``` + +```text +sudo apt-get install docker-ce -y +``` + +## Устанавливаем ноду + +Скачиваем большую часть блоков напрямую с сервера \(чтобы не тратить сутки-двое на их получение и лишнюю нагрузку делегатских seed-нод\). + +```text +sudo wget -P ~/home/blockchain https://files.rudex.org/golos-classic/blockchain/block_log +``` + +Создаем папку и добавляем файл c актуальными seed-нодами. + +```text +mkdir ~/config && echo 'seed1.golos.blckchnd.com:30218 +seed.golos.lexa.host:4243 +95.216.200.20:3001 +seed1.vvk.pp.ru:2001 +seed.aleksw.space:4243 +116.202.162.207:2001 +94.130.24.42:2001 +78.47.150.171:4243 +95.217.7.47:4243 +95.217.133.230:4243' | sudo tee -a ~/config/seednodes +``` + +Добавляем конфиг ноды \(указанные в нём `202800` блоков = неделя\). Какие плагины нужны для ваших целей, можно напр. уточнить в чате делегатов [https://t.me/golos\_witnesses](https://t.me/golos_witnesses) + +```text +echo 'webserver-thread-pool-size = 2 +webserver-http-endpoint = 0.0.0.0:8090 +webserver-ws-endpoint = 0.0.0.0:8091 +read-wait-micro = 500000 +max-read-wait-retries = 2 +write-wait-micro = 500000 +max-write-wait-retries = 3 +single-write-thread = true +enable-plugins-on-push-transaction = false +shared-file-size = 2G +min-free-shared-file-size = 500M +inc-shared-file-size = 2G +block-num-check-free-size = 1000 +plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api witness_api follow social_network tags operation_history account_history market_history account_by_key worker_api +clear-votes-before-block = 4294967295 +history-start-block = 34880000 +comment-title-depth = 202800 +comment-body-depth = 202800 +comment-json-metadata-depth = 202800 +history-blocks = 202800 +replay-if-corrupted = true +skip-virtual-ops = false +enable-stale-production = false +mining-threads = 0 +[log.console_appender.stderr] +stream=std_error +[log.file_appender.p2p] +filename=logs/p2p/p2p.log +[logger.default] +level=debug +appenders=stderr +[logger.p2p] +level=none +appenders=stderr' | sudo tee -a ~/config/config.ini +``` + +Запускаем ноду в докер-контейнере. + +```text +sudo docker run -it -p 127.0.0.1:8090:8090 -p 127.0.0.1:8091:8091 -v ~/config:/etc/golosd -v ~/home/blockchain:/var/lib/golosd/blockchain --name golosd vizlex/golos-classic +``` + +После загрузки докер-образа и реплея \(который занимает несколько часов\), с получением логов вида `handle_block "Got 0 transactions on block 35071930 by ..."` нода готова к работе. + +## Устанавливаем Nginx + +```text +sudo apt-add-repository ppa:nginx/stable -y +``` + +```text +sudo apt-get update +``` + +```text +sudo apt-get install nginx -y +``` + +Добавляем файл для своих настроек Nginx. + +```text +sudo nano /etc/nginx/sites-enabled/node.conf +``` + +Копируем в него правила, предварительно заменив адрес `server_name` на свой субдомен/домен \(не забыв привязать его в настройках DNS к нашему IP сервера\). Бесплатные домены можно зарегистрировать напр. [здесь](http://www.freenom.com/ru/freeandpaiddomains.html). + +```text +server { +listen 80; +server_name test.lexa.host; +location / { +if ($request_method = 'OPTIONS') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +add_header 'Access-Control-Max-Age' 1728000; +add_header 'Content-Type' 'text/plain; charset=utf-8'; +add_header 'Content-Length' 0; +return 204; +} +if ($request_method = 'POST') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} +if ($request_method = 'GET') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} +proxy_http_version 1.1; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Forwarded-Proto $scheme; +proxy_pass http://127.0.0.1:8090; +} +location /ws { +if ($request_method = 'OPTIONS') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Max-Age' 1728000; +add_header 'Content-Type' 'text/plain; charset=utf-8'; +add_header 'Content-Length' 0; +return 204; +} +if ($request_method = 'POST') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} +if ($request_method = 'GET') { +add_header 'Access-Control-Allow-Origin' '*'; +add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; +add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; +add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} +proxy_http_version 1.1; +proxy_set_header Upgrade $http_upgrade; +proxy_set_header Connection "upgrade"; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +proxy_set_header X-Forwarded-Proto $scheme; +proxy_pass http://127.0.0.1:8091; +proxy_read_timeout 3600; +} +} +``` + +Сохраняем изменения `Ctrl+O`, подтверждаем `Enter`, выходим `Ctrl+X`. + +## Устанавливаем Certbot + +```text +sudo apt-get install software-properties-common +``` + +```text +sudo add-apt-repository ppa:certbot/certbot -y +``` + +```text +sudo apt-get update +``` + +```text +sudo apt-get install python-certbot-nginx -y +``` + +После следующей команды потребуется ввести: + +1. E-mail, на который будут отправляться уведомления о необходимости продления сертификата; +2. Согласиться с правилами сервиса введя `A и Enter`; +3. Отказаться от рассылки `N и Enter`; +4. Подтвердить добавление сертификатов к указанным доменам вводом `Enter`; +5. Отказаться от редиректа, введя `1 и Enter`. + +```text +sudo certbot --nginx +``` + +Будут добавлены настройки в файл `node.conf`, которые можно перепроверить командой ниже и найти строки с пометкой `# managed by Certbot` в конце файла. + +```text +sudo nano /etc/nginx/sites-enabled/node.conf +``` + +Выходим из файла `Ctrl+X`. + +Перезапускаем Nginx. + +```text +sudo systemctl restart nginx +``` + +Проверяем статус Nginx. + +```text +sudo systemctl status nginx.service +``` + +Мы запустили публичную API-ноду, к которой можно подключаться как по адресу `https://test.lexa.host` \(RPC\) так и `wss://test.lexa.host/ws` \(WebSockets\). + +При получении письма на e-mail о необходимости обновить сертификат \(раз в 90 дней\), это можно сделать командой: + +```text +sudo certbot renew +``` + +## Есть вопросы? + +Можно уточнить в чате делегатов [https://t.me/golos\_witnesses](https://t.me/golos_witnesses) + diff --git a/witnesses/node/guide.md b/witnesses/node/guide.md new file mode 100644 index 00000000..22c1422a --- /dev/null +++ b/witnesses/node/guide.md @@ -0,0 +1,301 @@ +# Гайд для witness/seed ноды + +Рекомендованные минимальные системные требования: + +* 8 Гб оперативной памяти и 80 Гб SSD накопителя +* Linux-система, напр. Ubuntu 16.04/18.04 + стабильный доступ к интернету + +## Устанавливаем Docker + +```text +sudo apt-get update +``` + +```text +sudo apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + software-properties-common +``` + +```text +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +``` + +```text +sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" +``` + +```text +sudo apt-get update +``` + +```text +sudo apt-get install docker-ce -y +``` + +## Устанавливаем ноду + +Скачиваем большую часть блоков напрямую с сервера \(чтобы не тратить сутки-двое на их получение и лишнюю нагрузку делегатских seed-нод\). + +```text +sudo wget -P ~/home/blockchain https://files.rudex.org/golos-classic/blockchain/block_log +``` + +Создаем папку и добавляем файл c актуальными seed-нодами. + +```text +mkdir ~/config && echo 'seed1.golos.blckchnd.com:30218 +seed.golos.lexa.host:4243 +95.216.200.20:3001 +seed1.vvk.pp.ru:2001 +seed.aleksw.space:4243 +116.202.162.207:2001 +94.130.24.42:2001 +78.47.150.171:4243 +95.217.7.47:4243 +95.217.133.230:4243' | sudo tee -a ~/config/seednodes +``` + +### **Генерируем ключи** + +Для облегчения получения ключей, вместо запуска ноды без них, использования команды `suggest_brain_key` в cli-wallet для генерирования, правки конфига и перезапуска ноды, можно сразу сгенерировать их [здесь](https://control.viz.world/tools/keys/). + +![](https://lh6.googleusercontent.com/CiBEBEORRNyJRZDLDmgrPpqZ8k0yG6NR0doq88h26YaRpH5ioh-eOcFFT-ztCMgVA9u2PAAYnnBBOJ8wkKo10N2NYRPC7e5H3EZrdZiZOIQw_Az1lmUl6Tlut17nbMc5AroXUR5g) + +Только в Public-key \(публичном ключе\) заменить три начальных символа `VIZ` на `GLS`. Этот ключ нам понадобится для объявления себя делегатом позднее, а Private-key \(приватный ключ\) уже на следующем шаге. + +### **Загружаем конфиг** + +Предварительно заменив значения `witness` и `private-key` на свои. +****В качестве `witness` запишем **логин без @** от своего аккаунта на Голосе**,** `private-key` тот что сгенерировали на шаге выше. + +```text +echo 'p2p-endpoint = 0.0.0.0:4243 +webserver-thread-pool-size = 1 +webserver-http-endpoint = 0.0.0.0:8090 +webserver-ws-endpoint = 0.0.0.0:8091 +read-wait-micro = 500000 +max-read-wait-retries = 2 +write-wait-micro = 500000 +max-write-wait-retries = 3 +single-write-thread = true +enable-plugins-on-push-transaction = false +shared-file-size = 2G +min-free-shared-file-size = 500M +inc-shared-file-size = 2G +block-num-check-free-size = 1000 +plugin = chain p2p json_rpc webserver network_broadcast_api witness database_api witness_api +clear-votes-before-block = 4294967295 +store-account-metadata = false +store-memo-in-savings-withdraws = false +replay-if-corrupted = true +skip-virtual-ops = true +enable-stale-production = false +witness = "ЛОГИН-ДЕЛЕГАТА" +private-key = ПРИВАТНЫЙ-КЛЮЧ-НОДЫ +mining-threads = 0 +[log.console_appender.stderr] +stream=std_error +[log.file_appender.p2p] +filename=logs/p2p/p2p.log +[logger.default] +level=debug +appenders=stderr +[logger.p2p] +level=none +appenders=stderr' | sudo tee -a ~/config/config.ini +``` + +### **Запускаем контейнер** + +```text +sudo docker run -it -p 4243:4243 -v ~/config:/etc/golosd -v ~/home/blockchain:/var/lib/golosd/blockchain -v ~/w/:/golosd/ --name golosd vizlex/golos-classic +``` + +Начнётся загрузка образа ноды и реплей \(наполнение файла оперативных данных `shared_memory.bin` из блоков\), который будет продолжаться от пары часов до суток \(в зависимости от производительности вашего сервера\). + +Можно оставить окно терминала или закрыть его, подключившись позднее и зайдя в логи ноды командой: + +```text +sudo docker logs -f --tail 50 golosd +``` + +С появлением в логах ноды подобных сообщений о получении блоков, окно терминала можно закрыть \(всё в порядке\). + +![](https://lh4.googleusercontent.com/xfrNK9kKgadic6F7mAiZ3notwNTdG1IxzMwWWtybsdox6VtV9HrXU5LLkQyLBWHPb-GLgKcv39spoG9Heavv4yTQItEQRyc01aJjCi21BfGorCxs6aGyPyYTxgkzea_8iv6QAFzd) + +## **Работа с cli-wallet** + +{% hint style="info" %} +Эти действия нужны лишь для первого запуска ноды. +{% endhint %} + +Заходим в cli\_wallet ноды. + +```text +sudo docker exec -it golosd cli_wallet -w /golosd/wallet.json -s ws://localhost:8091 +``` + +Добавляем свой пароль к cli\_wallet \(запишите его и сохраните\): + +```text +set_password 123456789 +``` + +Разблокируем доступ: + +```text +unlock 123456789 +``` + +Импортируем в cli\_wallet наш приватный активный ключ аккаунта-делегата \(ключ, который смотреть тут [https://golos.id/@ЛОГИН/permissions](https://golos.id/@%D0%9B%D0%9E%D0%93%D0%98%D0%9D/permissions), начинается с цифры 5\)**.** + +```text +import_key 5Js............ +``` + +Объявляем себя делегатом, с публичным ключом GLS \(который мы сгенерировали ранее в паре к приватному ключу для конфига ноды\)**.** + +Нужно заменить логин, ссылку на пост/аккаунт делегата + публичный ключ. + +```text +update_witness "ЛОГИН" "https://golos.id/@ЛОГИН" GLS............. true +``` + +Публикуем свой первый прайс-фид, заменив на свой логин-делегата. + +```text +publish_feed ЛОГИН {"quote":"1.000 GOLOS", "base":"0.500 GBG"} true +``` + +Для выхода из cli\_wallet вводим команду: + +```text +quit +``` + +## **Публикация прайсфидов** + +Запускаем в докере ещё один контейнер, подробнее об этом удобном скрипте можно прочитать [здесь](../price-feed.md). + +```text +sudo docker run -it -e NODE=ws://localhost:8091 -e WITNESS=ЛОГИН-ДЕЛЕГАТА -e KEY=ПРИВАТНЫЙ-АКТИВНЫЙ-КЛЮЧ --name feed --net=container:golosd vvk123/golos-witness-tools ./update_price_feed.py --monitor +``` + +\* нужно заменить логин и приватный активный ключ аккаунта-делегата на свои + +Пример скриншота после выполнения команды: + +![](https://lh6.googleusercontent.com/zmlDvPxwhoHPAvQwz4MzO8esAFGcO26_fWM1Mvb_5eMQxavdQb6HIBwDYuPEOo_zQXfIbRup0SvM_v150D4mSJ6UCwHcO6LCS2h_ZOWnSoY5D9YrjVRyL2urxo22qWxvxGPCnx7N) + +После появления логов с калькуляцией курса GBG, закрываем окно терминала. + +## **Изменения в конфиге** + +Заходим в конфиг командой**:** + +```text +sudo nano ~/config/config.ini +``` + +Вносим нужные правки, нажимаем `Ctrl+O`, подтверждаем `Enter`, выходим `Ctrl+X`**.** + +Перезапускаем контейнер ноды. + +```text +sudo docker restart golosd +``` + +## **Делегатские параметры** + +Заходим на [https://golos.id/~witnesses](https://golos.id/~witnesses) и напротив своего делегата в столбце “Параметры” нажимаем на значок настроек **\(**описание каждого параметра возникает при наведении мышкой\). + +[Подробнее](../median-props.md) о значении медианных параметров. + +Изменить параметры можно и через [cli\_wallet](https://wiki.golos.id/witnesses/node/guide#rabota-s-cli-wallet) ноды, заменив логин и выполнив команду: + +```text +update_chain_properties ЛОГИН {"account_creation_fee":"1.000 GOLOS", "maximum_block_size":65536, "sbd_interest_rate":0, "create_account_min_golos_fee":"0.100 GOLOS", "create_account_min_delegation":"1.000 GOLOS", "create_account_delegation_time":2592000, "min_delegation":"1.000 GOLOS"} true +``` + +Параметры добавленные с 19 ХФ: + +```text +update_chain_properties ЛОГИН {"max_referral_interest_rate":1000, "max_referral_term_sec":15552000, "min_referral_break_fee":"1.000 GOLOS", "max_referral_break_fee":"100.000 GOLOS", "posts_window":3, "posts_per_window":1, "comments_window":200, "comments_per_window":10, "votes_window":15, "votes_per_window":5, "auction_window_size":0, "max_delegated_vesting_interest_rate":8000, "custom_ops_bandwidth_multiplier":10, "min_curation_percent":7500, "max_curation_percent":7500, "curation_reward_curve":"square_root", "allow_distribute_auction_reward":true, "allow_return_auction_reward_to_fund":true} true +``` + +Параметры добавленные с 22 ХФ: + +```text +update_chain_properties ЛОГИН {"worker_reward_percent":1000, "witness_reward_percent":1500, "vesting_reward_percent":6500, "worker_request_creation_fee":"100.000 GBG", "worker_request_approve_min_percent":1500, "sbd_debt_convert_rate":100, "vote_regeneration_per_day":10, "witness_skipping_reset_time":21600, "witness_idleness_time":7776000, "account_idleness_time":15552000} true +``` + +## **Обновление ноды** + +Ставим “пустой ключ” для ноды чтобы приостановить подпись блоков через параметры на странице [https://golos.id/@lex/witness](https://golos.id/@lex/witness) \(заменив на свой логин\). + +****Или через [cli\_wallet](https://wiki.golos.id/witnesses/node/guide#rabota-s-cli-wallet) ноды командой + +```text +update_witness "ЛОГИН" "https://golos.id" GLS1111111111111111111111111111111114T1Anm true +``` + +Останавливаем докер-контейнер ноды и удаляем его + +```text +sudo docker stop golosd && sudo docker rm golosd +``` + +{% hint style="info" %} +Если в анонсе обновления было указано что нужен реплей, удаляем файл shared\_memory.bin +{% endhint %} + +```text +sudo rm ~/home/blockchain/shared_memory.bin +``` + +Останавливаем докер-контейнер скрипта прайсфида и удаляем его + +```text +sudo docker stop feed && sudo docker rm feed +``` + +Удаляем образы для ноды и скрипта прайсфида + +```text +sudo docker rmi vizlex/golos-classic && sudo docker rmi vvk123/golos-witness-tools +``` + +Запускаем контейнер с новой версией + +```text +sudo docker run -it -p 4243:4243 -v ~/config:/etc/golosd -v ~/home/blockchain:/var/lib/golosd/blockchain -v ~/w/:/golosd/ --name golosd vizlex/golos-classic +``` + +После появления логов вида `handle_block "Got 0 transactions on block 34563842 by ..."`, закрываем окно терминала. + +Возвращаем публичный ключ ноды GLS.............. который ранее сбрасывали через параметры на странице [https://golos.id/@lex/witness](https://golos.id/@lex/witness) + +или через [cli\_wallet](https://wiki.golos.id/witnesses/node/guide#rabota-s-cli-wallet), заменив в команде ниже логин, ссылку на пост/аккаунт делегата + публичный ключ на свои: + +```text +update_witness "ЛОГИН" "https://golos.id/@ЛОГИН" GLS................. true +``` + +Возвращаем докер-контейнер скрипта публикации прайсфида \(заменив логин и приватный активный ключ аккаунта-делегата на свои\) + +```text +sudo docker run -it -e NODE=ws://localhost:8091 -e WITNESS=ЛОГИН-ДЕЛЕГАТА -e KEY=ПРИВАТНЫЙ-АКТИВНЫЙ-КЛЮЧ --name feed --net=container:golosd vvk123/golos-witness-tools ./update_price_feed.py --monitor +``` + +После появления логов с калькуляцией курса GBG, закрываем окно терминала. + +## Есть вопросы? + +Можно уточнить в чате делегатов [https://t.me/golos\_witnesses](https://t.me/golos_witnesses) + diff --git a/witnesses/price-feed.md b/witnesses/price-feed.md new file mode 100644 index 00000000..b9d117b3 --- /dev/null +++ b/witnesses/price-feed.md @@ -0,0 +1,15 @@ +# Скрипты для price feed + +На данный момент актуальным скриптом для делегатов в целях публикации ценового фида GBG/GOLOS является: + +## golos-witness-tools \(от делегата [@vvk](https://golos.id/@vvk)\) + +* [Проект на github](https://github.com/bitfag/golos-witness-tools) +* [Анонс](https://golos.id/golostools/@vvk/anons-novogo-skripta-obnovleniya-price-feed-i-proekta-golos-witness-tools) + пост об [обновлении ](https://golos.id/golos/@vvk/golos-witness-tools-bitshares)скрипта с поддержкой BitShares +* Не требует наличия cli\_wallet +* Написан на python +* Удобен для запуска из cron +* Возможность работы в виде docker-контейнера + +Пример запуска скрипта к ноде в докер-контейнере есть [здесь](https://wiki.golos.id/witnesses/node/guide#publikaciya-praisfidov). +