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

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

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

Все, что касается протокола находится [в каталоге /libraries/protocol](https://github.com/golos-blockchain/golos/tree/master/libraries/protocol) исходного кода C++ ноды блокчейна GOLOS.

* **types / типы данных** в протоколе
* **operations / proposal\_operations / chain\_operations / chain\_virtual\_operations / операция** — все что связано с операциями и их обработкой;
* **transaction / транзакция** — все что связано с транзакцией (id, список операций, к какому блоку она ссылается);
* **block\_header / block / блок** — содержит транзакции, ссылается на предыдущий блок, содержит extensions который может использовать делегат для инициации голосования за переход на новую версию хардфорка;
* **asset / ассет** — структура токенов (отношение ассетов разного разряда друг к другу);
* **base / version / версия** — структура описывающая версию протокола сети, голос и время за переход на новую версию;
* **authority / полномочия** — структура описывающая связку ключей для определенного типа доступа аккаунта;
* **sign\_state / состояние подписи** — помощник по проверке подписей (или наличия ключа, который может ее сгенерировать).

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

Именно из объектов и структур самого блокчейна состоит состояния системы (стэйт). Каждый блок содержащий операции обрабатывается основным модулем database, который просчитывает все изменения и принимает решения по отложенным действиям. В каталоге [/libraries/chain/include/graphene/chain](https://github.com/golos-blockchain/golos/tree/master/libraries/chain/include/golos/chain) содержатся как объекты и структуры данных, так и внутреннее устройство блокчейна (evaluator, block\_log, dynamic\_global\_property\_object, [типы объектов](https://github.com/golos-blockchain/golos/blob/master/libraries/chain/include/golos/chain/steem_object_types.hpp)).

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

* **dynamic\_global\_property\_object** — основной объект содержащий данные о текущем состоянии экономики и состоянии ноды (например, номер необратимого блока);
* **account\_object** — записи аккаунтов;
* **account\_authority\_object** — записи полномочий для аккаунтов;
* **witness\_object** — записи делегатов;
* **transaction\_object** — используется для транзакций в очереди (это позволяет проверять отсутствии дублей у новых транзакций и удалять транзакции из очереди, если она не выполнилась до срока истечения expire);
* **block\_summary\_object** — используется для индексации блоков и их hash, [для проверки TaPoS](/developers/basics/state.md) (транзакция должна ссылаться на прошлый блок, проверка происходит как раз по индексу, построенному из объектов `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`).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.golos.id/developers/basics/object-structures.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
