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

Обновление библиотеки на языке Go для работы с Golos API.

Приветствую. Я решил отойти от стандартного вида написания статей.
В основном это связанно с переработкой библиотеки.
На данном этапе в библиотеке реализован простые функции для работы как 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()
    ...
}

После этого есть два варианта использования.

  1. Для вызова стандартных процедур системы Golos(Steem). Client.Rpc.Database.GetConfig()
  2. Для использования специальных уже готовых процедур. 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

0
98.744 GOLOS
На Golos с May 2017
Комментарии (10)
Сортировать по:
Сначала старые