Golos Blockchain
  • База знаний Golos
  • ПОЛЬЗОВАТЕЛЯМ
    • Способы регистрации
    • Старт на Golos Блоги
      • Кошелёк
    • Вопросы и ответы
    • Полезные статьи
    • Обновления на Голосе
  • Разработчикам
    • Основы
      • Операции и их типы
      • Объекты и структуры
      • Состояние (стэйт) системы
      • Плагины и их API
      • Библиотеки для работы
      • Примеры кода
      • Формирование транзакций
      • Пропускная способность
      • Тестнет (ноды для тестов)
    • API-документация
      • API part 1
      • API part 2
      • API part 3
      • API part 4
      • Cli-wallet API
    • Обновления (HardForks)
      • HF18: Данные по установке
      • HF18: Новые возможности
      • HF18: Изменения в API
      • HF18: Изменения в cli_wallet
      • SF18.4: Новые функции
      • HF19: Новые возможности
      • HF20: Устранение бага
      • HF22: Новые возможности
      • HF23: Новые возможности
      • HF24: Новые возможности
      • HF25: Новые возможности
      • HF26: Новые возможности
      • HF27: Новые возможности
      • HF28: Новые возможности
    • Руководства (HowTo)
      • Скрипт регистрации аккаунтов
      • Операции на бирже
      • Как использовать мультиподписи
      • Как объединять операции в одну транзакцию
      • Пример запуска тестнета
  • Делегатам
    • Делегатство и роли нод
    • Установка ноды
      • Гайд для witness/seed ноды
      • Настройка для API-ноды
      • Настройка ноды для бирж
      • Настройка ElasticSearch
      • Нода с отладкой GDB
    • Медианные параметры
    • Скрипты для price feed
Powered by GitBook
On this page
  1. Разработчикам
  2. Руководства (HowTo)

Как объединять операции в одну транзакцию

PreviousКак использовать мультиподписиNextПример запуска тестнета

Last updated 5 years ago

Автор:

Операции голосования своими 100+ аккаунтами, упакованные в ОДНУ транзакцию:

  • Экономит время (100+ операций одновременно)

  • Экономит bandwidth (новореги смогут совершать вXраз больше транзакций)

  • Экономит ресурсы среды скрипта (браузер, сервер, приложение)

Для начала выбираем 1 свой основной аккаунт-ботовод и прописываем его логин своим ботам в постинг-авторити. Это можно сделать массово с помощью скрипта:

Нужно заполнить массив

const GolosBots = [
["логин бота1",["posting","5**************ACTIVE WIF****"]],
["логин бота 3",["posting","5*****************"]],

// бесконечный список аккаунтов...

["логин последнего бота",["posting","5******************"]]

]

В переменной прописываем аккаунты и ключи. Заполнять posting не обязательно, требуется только активный ключ.(Я храню оба ключа для удобства, так как разные скрипты используя массовые действия смотрят список аккаунтов и обращаются к тому или иному ключу)

В переменнуюconst BOTMASTER = "логин ботовода"записываем логин аккаунта, который будет иметь права на постинг.

После выполнения скрипта он запишется в постинг авторизацию

Операция выше делается единожды и дальше вы можете используя только ОДИН постинг ключ своего аккаунта-ботовода подписать апвоты ВСЕХ ботов.

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

const GolosBots = [
"vikx",
"vikxx",
// Endless list...
"vikxxx"
]

И для каждого логина сделаем свою операцию, записав их все в одну переменную votes

for(let botname of GolosBots){

votes.push(["vote",
{
"voter":botname,
"author":author,
"weight":10000,
"permlink":permlink
}])

}

Затем сформируем одну транзакцию, добавим в нее все операции votes и подпишем все операции постинг ключем аккаунта-ботовода

const unsignedTX = {
    'expiration': expire,    
    'extensions': [],
    'operations': votes,
    'ref_block_num': 60419,
    'ref_block_prefix': 2937707173               
   }

let signedTX = null

try {
    signedTX = golos.auth.signTransaction(unsignedTX,{"posting":wif})
}
catch (error) 
golos.api.broadcastTransactionSynchronous(signedTX)

Пример на JS:

Скрипт полностью здесь:

По материалам

https://github.com/vikxx/bots/blob/master/sample/botVotes.js
https://github.com/vikxx/bots/blob/master/sample/botVotes.js
статьи
@vik
https://github.com/vikxx/bots/blob/master/sample/setBotMaster.js