Приветствую. Я решил отойти от стандартного вида написания статей.
В основном это связанно с переработкой библиотеки.
На данном этапе в библиотеке реализован простые функции для работы как Golos так и STEEM. Такие как голосование, комментирование и удаление комментария.
Установка и начало разработки.
Так как библиотека написана на языке программирования GO. То и примеры будут все на нем.
Для начала использования библиотеки надо либо скачать к себе по средствам браузера исходники из моего репозитория(ссылка внизу), либо воспользоваться стандартной функцией языка go go git github.com/asuleymanov/golos-go
.
После этого можно начать разрабатывать свои приложения с её использованием.
Обязательные настройки каждого проекта.
В каждом проекте который вы будите писать надо иметь файл config.json
с такой структурой:
{
"username": "",
"chain": "",
"url": "",
"posting_key": "",
"active_key": "",
"owner_key": "",
"memo_key": ""
}
Описание:
username - Имя пользователя в системе Golos(Steem). (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
chain - название сисемы маленькими буквами. (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
url - WS шлюз для доступа к системе Golos(Steem). (обязательный параметр)
*_key -Соответствующие ключи. (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
При наличии файла можно создать шаблон пустого проекта:
package main
import (
"fmt"
"github.com/asuleymanov/golos-go/client"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
...
}
После этого есть два варианта использования.
- Для вызова стандартных процедур системы Golos(Steem).
Client.Rpc.Database.GetConfig()
- Для использования специальных уже готовых процедур.
Client.Vote("author","permlink")
И в завершении пару примеров
Монитор (vote_monitor)
package main
import (
"log"
"time"
"github.com/asuleymanov/golos-go/client"
"github.com/asuleymanov/golos-go/types"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
if err := run(); err != nil {
log.Fatalln("Error:", err)
}
}
func run() (err error) {
log.Println("---> GetConfig()")
config, err := cls.Rpc.Database.GetConfig()
if err != nil {
return err
}
props, err := cls.Rpc.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
lastBlock := props.LastIrreversibleBlockNum
log.Printf("---> Entering the block processing loop (last block = %v)\n", lastBlock)
for {
props, err := cls.Rpc.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
for props.LastIrreversibleBlockNum-lastBlock > 0 {
block, err := cls.Rpc.Database.GetBlock(lastBlock)
if err != nil {
return err
}
for _, tx := range block.Transactions {
for _, operation := range tx.Operations {
switch op := operation.Data().(type) {
case *types.VoteOperation:
log.Printf("@%v voted for @%v/%v\n", op.Voter, op.Author, op.Permlink)
// Сюда можно вставить любую из операций доступных в системе
}
}
}
lastBlock++
}
time.Sleep(time.Duration(config.SteemitBlockInterval) * time.Second)
}
}
Простая голосовалка (upvote)
package main
import (
"flag"
"fmt"
"log"
"github.com/asuleymanov/golos-go/client"
"github.com/pkg/errors"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
if err := run(); err != nil {
log.Fatalln("Error:", err)
}
}
func run() (err error) {
flag.Parse()
args := flag.Args()
if len(args) != 2 {
return errors.New("2 arguments required")
}
author, permlink := args[0], args[1]
fmt.Println(cls.Vote(author, permlink, 10000))
return nil
}
Пример использования:
./upvote hr1 our-journey
Код доступен на Github под MIT лицензией.
Банальность но все мои статьи можно найти у меня в блоге @asuleymanov
Добрый день!
У меня почему-то не работают примеры, не могу сбильдить, выдаёт ошибку - not enough arguments in call to client.NewApi
have ()
want (string, string)
Подскажите, пожалуйста, с чем это связано?
p.s. как ваши примеры работают, если в исходном коде видно, что на вход должны подаваться некоторые параметры?
client.go 65 строка func NewApi(url, chain string) *Client {
Спасибо большое что заметили. Просто в процессе разработки появилась необходимость переделать. А примеры я забыл поправить.
Я обязательно это исправлю.
@asuleymanov Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Покажи какой в итоги запрос идет на ноду?
Что Вы подразумеваете под запросом?
И для какого из примеров его показывать?
для голосования запрос который уже преобразован в json и идет в ноду
Так ну попробую
Для начала покажу что у меня в библиотеке :
Теперь попробую сложить в json:
Нет библиотека не оборачивает ни во что.
Я привел примеры как это реализовано в система у меня.
Первый пример это то что задается на языке GO в библиотеке, второй вариант это то что система из этого генерирует.
Если что то не совсем понятно то готов помогать всеми доступными мне силами.
А выше нужно обарачивать в
{
"method": "call",
"params":[tx]
} Я просто увидел у вас там есть еще call но не понял нужен он или нет
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yefet, losos, t3ran13, ukrainian, natalia, niiu, zoss, larissa, kot, tristamoff, shuler, vadbars, dr-boo, arsar, vasilisapor2, renat242, vict0r, ladyzarulem, svinsent, lira, gryph0n, voltash, karusel1, asuleymanov, igor-golos, yuriks2000, kvg, anomalywolf, mixtura, kertar, nerengot, dim447, now, sergiusduke, igrinov, duremarr, foxycat
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!