Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
dark.sun
7 лет назад

Кода пост. Как отправить в блокчейн статью, комментарий и ответ на комментарий?

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

Итак, как нам постить, комментировать, отвечать на комментарии и голосовать, не используя официальные платформы?

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

  • Взять ключ напрямую из аккаунта Стимит/Голос (попросить клиента предоставить его);
  • Взять пароль от аккаунта Стимит/Голос и получить приватный постинг ключ из него.

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

Берем постинг ключ аккаунта (человек предоставляет нам его). Что делаем с ним?

В первую очередь - сохраняем его у клиента. Не стоит ключ брать к себе и держать его в базе, зачем создавать себе лишние проблемы, становясь мишенью хакеров? Чтобы хранить ключ у клиента и делать это безопасно - ключ нужно шифровать. И дешифровать его тоже нужно уметь, конечно. Я использую RSA алгоритм шифрования, а в качестве ключа для дешифровки беру уникальные параметры браузера клиента с некоторыми модификациями для усложнения подбора.

Бац-бац! Ключик зашифрован и сохранен в cookie с возможностью дешифровки в любой момент. Он не хранится на сервере, он есть только у клиента в браузере.

Теперь можно конструировать пост. В этом нам поможет прекрасная библиотека steem.js

Она работает на чистом JavaScript и не требует передачи ключа серверу, все операции происходят с клиентской стороны.

Транзакция любой статьи выглядит так:

steem.broadcast.comment(posting_key,
trx['parentAuthor'],
trx['parentPermlink'],
trx['author'],
trx['permlink'],
trx['title'],
trx['body'],
trx['metadata'],
function(err, result) {
callback(result);
});

Для того, чтобы статья была статьей, а не комментарием, важно указать:
parentAuthor = ‘ ‘ - т.е. ничего.
parentPermlink = ‘category‘ - любая статья должна иметь родительскую ссылку, т.е. на категорию вашей статьи (например, steemit, ru—golos).
permlink - уникальная ссылка в рамках блога одного автора, конструируется произвольно (обычно, путем перевода title в lowercase и замены пробелов на тире).
author - здесь нужно вставить имя аккаунта автора статьи. Процесс его получения зависит от архитектуры вашего приложения, у меня оно происходит каждый раз перед подписью транзакции с помощью конвертации приватного постинг-ключа в публичный и отправки его в блокчейн, где ответом приходит имя аккаунта.
metadata - может быть любой, но туда принято записывать все теги, картинки и ссылки из статьи, которые необходимо прежде найти в теле статьи.

Вставили в функцию! Бац-бац! Транзакция прошла, статья появилась, никаких проблем.

Как создать комментарий? Примерно так же, но:
parentAuthor - это автор комментируемой статьи,
parentPermlink - соответствующая родительская ссылка.
permlink - необходимо дописывать конструкцию (re-parent-author)
Получится что то вроде: re-dark-sun-this-is-name-article
Без модификации permlink, комментарий тоже будет отправлен, но вот с ответом на него могут возникнуть проблемы.

Как создать ответ на комментарий?

Если посмотреть ссылки на комментарии, то они имеют вид
re-justinbair97-galaxy-note-7-update-20161211t193609141z
А автор этого комментария: steemvest17, и он не указывается в permlink.

Чтобы составить ответ к этому комментарию, необходимо записать в новый permlink всех авторов, разделяя их суффиксом 're-‘. Если API блокчейна не получит эти данные, вы долго будете упираться, и у вас так ничего и не получится. Проверено 😉
Чтобы ответить на вышеприведенный комментарий, permlink должен быть:
permlink = re-author-re-steemvest17-re-justinbair97-galaxy-note-7-update-DATE
author - это вы,
parentAuthor = re-steemvest17

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

Ну и напоследок.. Как голосовать? Проще простого.

steem.broadcast.vote(posting_key,
voter,

 author,
 permlink,
 weight,
 function(err, result) {
         console.log(err, result);
  });

weight = 10000 - соответствует силе голоса 100%.
voter - это вы, или тот, кто голосует.
author, permlink - за что идет голосование.

Все. Пошел кодить. Доброй ночи.


фото гугл дал

2
6252.783 GOLOS
На Golos с October 2016
Комментарии (8)
Сортировать по:
Сначала старые