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
  • Список объектов и структур протокола
  • Объекты и структуры в блокчейне
  • Объекты и структуры в API плагинах
  1. Разработчикам
  2. Основы

Объекты и структуры

PreviousОперации и их типыNextСостояние (стэйт) системы

Last updated 5 years ago

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

Список объектов и структур протокола

Все, что касается протокола находится исходного кода C++ ноды блокчейна GOLOS.

  • types / типы данных в протоколе

  • operations / proposal_operations / chain_operations / chain_virtual_operations / операция — все что связано с операциями и их обработкой;

  • transaction / транзакция — все что связано с транзакцией (id, список операций, к какому блоку она ссылается);

  • block_header / block / блок — содержит транзакции, ссылается на предыдущий блок, содержит extensions который может использовать делегат для инициации голосования за переход на новую версию хардфорка;

  • asset / ассет — структура токенов (отношение ассетов разного разряда друг к другу);

  • base / version / версия — структура описывающая версию протокола сети, голос и время за переход на новую версию;

  • authority / полномочия — структура описывающая связку ключей для определенного типа доступа аккаунта;

  • sign_state / состояние подписи — помощник по проверке подписей (или наличия ключа, который может ее сгенерировать).

Объекты и структуры в блокчейне

Именно из объектов и структур самого блокчейна состоит состояния системы (стэйт). Каждый блок содержащий операции обрабатывается основным модулем database, который просчитывает все изменения и принимает решения по отложенным действиям. В каталоге содержатся как объекты и структуры данных, так и внутреннее устройство блокчейна (evaluator, block_log, dynamic_global_property_object, ).

Состояние системы состоит из объектов:

  • dynamic_global_property_object — основной объект содержащий данные о текущем состоянии экономики и состоянии ноды (например, номер необратимого блока);

  • account_object — записи аккаунтов;

  • account_authority_object — записи полномочий для аккаунтов;

  • witness_object — записи делегатов;

  • transaction_object — используется для транзакций в очереди (это позволяет проверять отсутствии дублей у новых транзакций и удалять транзакции из очереди, если она не выполнилась до срока истечения expire);

  • block_summary_object — используется для индексации блоков и их hash, (транзакция должна ссылаться на прошлый блок, проверка происходит как раз по индексу, построенному из объектов block_summary_object);

  • witness_schedule_object — состояние очереди делегатов;

  • witness_vote_object — записи голосов за делегатов;

  • hardfork_property_object — записи о текущем хардфорке сети;

  • withdraw_vesting_route_object — записи о маршруте распределения токенов при конвертации доли;

  • master_authority_history_object — записи изменений мастер полномочий;

  • account_recovery_request_object — запросы на восстановление аккаунта;

  • change_recovery_account_request_object — запросы на смену доверенного аккаунта для восстановления доступа;

  • escrow_object — записи о трехсторонних сделках;

  • vesting_delegation_object — записи о делегированной доли;

  • vesting_delegation_expiration_object — записи о возвращаемой делегированной доле после отмены делегирования;

  • account_metadata_object — отдельные записи с мета-данными аккаунта;

  • proposal_object — записи proposal операций;

  • required_approval_object — записи требуемых подтверждений для proposal операций;

  • и другие...

Объекты и структуры в API плагинах

Плагины предоставляющие API могут возвращать объекты как из блокчейна, так и собственные. Простые запросы с получением объекта по id отдают данные как есть, часто пропуская объект из блокчейна через конструктор аналогичного для API, чтобы скопировать состояние и отдать его пользователю, например: плагин witness_api использует отдельный объект witness_api_object. А плагин database_api использует account_api_object, который дополняет стандартный объект блокчейна аккаунт типами доступа копируя туда актуальные полномочия из индекса.

Если плагин расширяет стандартные таблицы индексов и объекты, то он создает новую структуру, отдельно ведет учет операций и заполняет индекс. Например, так поступает плагин private_message, обрабатывая custom операции (создавая объекты message_object, наполняющие индекс message_index).

в каталоге /libraries/protocol
/libraries/chain/include/graphene/chain
типы объектов
для проверки TaPoS