set_block_applied_callback()
. Получаемое пользователем оповещение было недостаточно полным и содержало только информацию о подписанном блоке без информации о виртуальных операциях в этом блоке.set_block_applied_callback()
добавлен настраиваемый параметр type, принимающий четыре значения. В зависимости от задаваемого значения этого параметра, пользователь может получать следующую информацию о блоке:
— подписанный блок;
— заголовок блока;
— виртуальные операции блока;
— подписанный блок и виртуальные операции.set_block_applied_callback()
как «block».type
— тип информации в получаемом оповещении.set_block_applied_callback()
.set_pending_transaction_callback()
.producer_reward_operation()
, генерируемая на каждом из блоков. Операция оповещает пользователя о вознаграждении в виде GESTS подписчика блока — продюсера блока, которым может являться одно из следующих лиц:
— делегат, входящий в утвержденный список делегатов;
— делегат, выбранный случайным образом;
— майнер.producer
— имя аккаунта-продюсера блока;
vesting_shares
— размер вознаграждения (в GESTS).get_ops_in_block()
для получения информации о вознаграждении продюсера блока. Метод имеет вид:block_num
— идентификатор блока, виртуальные операции которого запрашиваются;
only_virtual
— «true», если возвращаются только виртуальные операции.private_message_operations
расширяющий возможности пользователя в обмене сообщениями с другими пользователями, а также в обработке личных сообщений.from
— имя аккаунта, отправляющего сообщение;
to
— имя аккаунта, которому адресовано сообщение;
nonce
— произвольное целочисленное значение, уникальное значение части ключа (рекомендуется использовать текущее время в миллисекундах);
from_memo_key
— публичный ключ категории memo
отправителя, используемого для шифрования сообщения;
to_memo_key
— публичный ключ категории memo
получателя сообщения, используемого для расшифровки сообщения;
checksum
— контрольная сумма результата ключа шифрования;
update
— “true”, если сообщение редактируется (поля from
, to
, nonce
); “false”, если сообщение создается;
encrypted_message
— результирующее сообщение.from
, to
, nonce
). Алгоритм получения ключа шифрования аналогичен алгоритму шифрования поля memo
в операциях с переводами средств.requester
— имя аккаунта, запросившего опреацию удаления;
from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
start_date
— дата и время, начиная от которого сообщения должны быть удалены;
stop_date
— дата и время, заканчиваясь которым сообщения должны быть удалены.from
, to
, nonce
). Для удаления серии сообщений дополнительно требуется указать диапазон сообщений start_date-stop_date
.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
start_date
— дата и время, начиная от которого сообщения должны быть помечены как прочитанные;
stop_date
— дата и время, заканчиваясь которым сообщения должны быть помечены как прочитанные.from
, to
, nonce
). Для пометки серии сообщений дополнительно требуется указать диапазон сообщений start_date-stop_date
.owner
— имя аккаунта, создающего контакт;
contact
— имя аккаунта, добавляемого в контакт-лист;
type
— тип контакта (pinned
, чтобы добавить контакт);
json_metadata
— данные о добавляемом в контакт-лист аккаунте в формате JSON.unknown
и удалить все его сообщения.
Для внесения аккаунта в контакт-лист необходимо задать тип pinned
.
Для прекращения приема сообщений от контакта из контакт-списка, необходимо задать тип ignored
.
Для прекращения приема сообщений от всех аккаунтов, за исключением находящихся в контакт-листе, необходимо настроить контакт-лист. Операция по настройке контакт-листа выполняется вызовом следующего метода:owner
— имя аккаунта, собственника контакт-листа;
ignore_messages_from_unknown_contact
— "true" для прекращения получения сообщений от неизвестного контакта.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
message
— сообщение вида ({"subject":"", "body":""})
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
message
— сообщение вида ({"subject":"", "body":""});
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.to
— имя аккаунта-получателя сообщения;
query
— параметры поиска.from
— имя аккаунта-отправителя сообщения;
query
— параметры поиска.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
query
— параметры поиска.owner
— имя аккаунта, собственника контакт-листа;
settings
— настройки;
broadcast
— “true”, если операция пересылается на сервер. “false”, если транзакция выводится на экран.owner
— имя аккаунта, собственника контакт-листа.owner
— имя аккаунта, собственника контакт-листа;
contact
— имя аккаунта, контакт которого добавляется или изменяется в контакт-листе;
type
— тип контакта (unknown
- неопределенный, pinned
- закрепленный, ignored
- игнорируемый);
json_metadata
— данные контакта в формате JSON;
broadcast
— "true", если операция пересылается на сервер; "false", если транзакция выводится на экран.owner
— имя аккаунта, собственника контакт-листа;
type
— тип контактов, по которому формируется список;
limit
— максимальное количество контактов в формируемом списке;
offset
— смещение относительно начала контактов в контакт-листе, от которого формируется список.owner
— имя аккаунта, собственника контакт-листа;
contact
— имя аккаунта контакта.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
start_date
— дата и время, начиная от которого входящие сообщения должны быть удалены;
stop_date
— дата и время, заканчиваясь которым входящие сообщения должны быть удалены;
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
start_date
— дата и время, начиная от которого отправленные сообщения должны быть удалены;
stop_date
— дата и время, заканчиваясь которым отправленные сообщения должны быть удалены;
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— уникальное значение части ключа (поля from
, to
, nonce
);
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
start_date
— дата и время, начиная от которого сообщения должны быть помечены как прочитанные;
stop_date
— дата и время, заканчиваясь которым сообщения должны быть помечены как прочитанные;
broadcast
— “true”, если операция пересылается на сервер; “false”, если транзакция выводится на экран.from
— имя аккаунта-отправителя сообщения;
to
— имя аккаунта-получателя сообщения;
nonce
— случайное число, необходимое для дешифрования сообщения и являющееся составной частью уникального ключа (с содержанием полей from
, to
и nonce
);
from_memo_key
— публичная часть ключа memo
аккаунта-отправителя;
to_memo_key
— публичная часть ключа memo
аккаунта-получателя;
checksum
— контрольная сумма ключа шифрования;
encrypted_message
— зашифрованное сообщение;
create_date
— дата и время создания сообщения;
receive_date
— дата и время получения сообщения. Если сообщение не редактируется, значение этого поля совпадает со значением поля create_data
;
read_date
— дата и время прочтения сообщения;
remove_date
— дата и время удаления сообщения из ящика аккаунта собеседника.select_accounts
— список имен аккаунтов, выбранных для просмотра их сообщений;
filter_accounts
— список имен аккаунтов, исключенных для просмотра их сообщений; newest_date
— дата и время, начиная с которого показываются сообщения;
unread_only
— показывать только непрочитанные сообщения;
limit
— максимальное количество выдаваемых сообщений;
offset
— смещение относительно начала списка, с которого выдаются сообщения.to
— имя аккауна-получателя сообщений;
message_box_query
— запрос на получение сообщений;vector<message_api_object>
.from
— имя аккауна-отправителя сообщений;
message_box_query
— запрос на получение сообщений.vector<message_api_object>
.from
и to
) выполняется с использованием структуры следующего вида:newest_date
— дата и время, начиная с которого показываются сообщения;
unread_only
— показывать только непрочитанные сообщения;
limit
— максимальное количество выдаваемых сообщений;
offset
— смещение относительно начала списка, с которого выдаются сообщения.from
и to
) выполняется с использованием метода следующего вида:from
— имя аккаунта-отправителя сообщений;
to
— имя аккаунта-получателя сообщений;
message_thread_query
— запрос на получение потока сообщений.vector<message_api_object>
.owner
— имя аккаунта, собственника контакт-листа.ignore_messages_from_unknown_contact
— “true”, если блокируются сообщения от неизвестных контактов.owner
— имя аккаунта, собственника контакт-листа.size
— данные размера контакт-листа в виде следующей структуры:total_contacts
— общее количество имен аккаунтов (контактов) в контакт-листе;
total_outbox_messages
— общее количество исходящих сообщений;
unread_outbox_messages
— общее количество непрочитанных исходящих сообщений;
total_inbox_messages
— общее количество входящих сообщений;
unread_inbox_messages
— общее количество непрочитанных входящих сообщенийowner
— имя аккаунта, собственника контакт-листа;
contact
— имя аккаунта, данные о котором требуется получить.owner
— имя аккаунта, собственника контакт-листа (не более 16 символов);
contact
— имя контакта, данные о котором выдаются (не более 16 символов);
json_metadata
— данные об аккаунте в формате JSON;
local_type
— тип контакта в контакт-листе аккаунта с именем owner
;
remote_type
— тип контакта в контакт-листе аккаунта с именем contact
;
size
— данные размера контакт-листа.owner
— имя аккаунта, собственника контакт-листа;
type
— тип контактов, список которых требуется получить (unknown
, pinned
, ignored
);
limit
— максимальное количество выдаваемых контактов;
offset
— смещение относительно начала списка, с которого выдаются контакты.vector<contact_api_object>
.callback_query
в этом вызове является структурой следующего вида:select_accounts
— список имен аккаунтов, выбранных для просмотра их сообщений;
filter_accounts
— список имен аккаунтов, исключенных для просмотра их сообщений;
select_events
— список событий для мониторинга;
filter_events
— список событий для исключения из мониторинга.message
, mark
, remove_inbox
и remove_outbox
будет приходить структура следующего вида:contact
будет приходить структура следующего вида:follow
добавлен новый метод delete_reblog_operation()
. Вызов этого метода возможен из cli_wallet
с использованием эвалюатора custom_json
. Операция удаления реблога формируется в ручном режиме.begin_builder_transaction
— команда вызова транзакции, в состав которой входит операция удаления реблога;
add_operation_to_builder_transaction
— команда, формирующая операцию удаления реблога, которой присвоен идентификационный номер “0”;
<reblogger-name>
— имя аккаунта-реблоггера, скопировавшего в свой блог сторонний пост;
<post-author-name>
— имя аккаунта оригинального поста;
<post-title>
— заголовок удаляемого реблога;
sign_builder_transaction
— команда для получения одобрения транзакции с отправлением ее на демон.follow
доработан метод reblog_operation
. Вызов этого метода возможен из cli_wallet
с использованием эвалюатора custom_json
. Операция добавления комментария к реблогу формируется в ручном режиме.cli_wallet
операцию reblog_operation
добавлены следующие поля:body
в вызове является обязательным для операции реблога поста с добавлением комментария.begin_builder_transaction
— команда вызова транзакции, в состав которой входит операция реблога поста с добавлением комментария;
add_operation_to_builder_transaction
— команда, формирующая операцию реблога поста с добавлением комментария, которой присвоен идентификационный номер “0”;
<reblogger-name>
— имя аккаунта-блоггера, выполняющего реблог поста;
<post-author-name>
— имя аккаунта, автора оригинального поста;
<post>
— копируемый пост;
<comment-title>
— заголовок добавляемого комментария;
<comment-body>
— тело добавляемого комментария;
sign_builder_transaction
— команда для получения одобрения транзакции с отправлением ее на демон.get_blog
и get_blog_entries
дополнены полями, приведенными в следующей таблице:reblog_title
reblog_body
reblog_json_metadata
get_feed
, get_feed_entries
, get_discussions_by_blog
и get_discussions_by_feed
дополнены массивом объектов reblog_entries
, структура которого дополнена полями, приведенными в следующей таблице:author
reblog_title
reblog_body
reblog_json_metadata
store-account-metadata
и store-account-metadata-list
в конфигурационный файл config.ini
, а также внесены изменения в API-библиотеку. Использование этих флагов обеспечивает более гибкое настройку Узла для хранения важной информации в режиме сбережения памяти.config.ini
и один раз перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется.config.ini
дополнен настраиваемыми флагами, приведенными в следующей таблице:store-account-metadata
store-account-metadata-list
. "false" — выключение режима на хранение метаданных для всех аккаунтовstore-account-metadata-list
account_api_object()
использует пустое значение json_metadata без необходимости задания режима LOW_MEM для случая, если у Узла блокчейна выключен режим хранения метаданных.memo
в операциях перевода средств из кошельков добавлен новый флаг store-memo-in-savings-withdraws
в конфигурационный файл config.ini
. Использование этого флага обеспечивает более гибкое задание режима сбережения памяти.memo
пользователю достаточно настроить конфигурационный файл config.ini
и всего один раз перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется.config.ini
дополнен настраиваемым флагом, приведенным в следующей таблице:store-memo-in-savings-withdraws
memo
для всех операций по переводу средств из кошельковlast_update
и active
необходимо было каждый раз перестраивать Узел.store-comment-last-update
в конфигурационный файл config.ini
, а также внесены изменения в API-библиотеку. Использование этого флага предоставляет пользователю возможность устанавливать глубину истории хранения с учетом даты изменения и даты последнего обновления. Для включения или выключения режима на хранение комментариев полей last_update
и active
необходимо настроить конфигурационный файл config.ini
и перезапустить Узел. По завершении синхронизации Узла в дальнейшем его перезапуск не требуется.config.ini
дополнен настраиваемым флагом, приведенным в следующей таблице:store-comment-last-update
last_update
и active
являются произвольными и в возвращаемом значении API-метода comment_api_object()
могут отсутствовать.discussion_helper::impl fill_comment_content
fill_comment_info
discussion_helper::discussion_helper() fill_comment_content
fill_comment_info
config.ini
добавлена новая переменная store-comment-rewards
, а также внесены изменения в API-библиотеку. Использование этой переменной обеспечивает хранение на Узле блокчейна историю выплат вознаграждений без необходимости перестроения Узла в варианте конфигурации LOW_MEM. Изменения в API-библиотеке
Структура объекта комментариев дополнена новыми параметрами (помечены комментарием “новый”):total_payout_value
— общая сумма выплат в GBG;
beneficiary_payout_value
— бенефициарские выплаты в GBG;
beneficiary_gests_payout_value
— бенефициарские выплаты в GESTS;
curator_payout_value
— кураторские выплаты в GBG;
curator_gests_payout_value
— кураторские выплаты в GESTS.
author_rewards
— авторские вознаграждения в GOLOS;
author_gbg_payout_value
— авторские выплаты в GBG;
author_golos_payout_value
— авторские выплаты в GOLOS;
author_gests_payout_value
— авторские выплаты в GESTS.config.ini
дополнен новыми параметрами comment-title-depth
, comment-body-depth
, comment-json-metadata-depth
и set-content-storing-depth-null-after-update
.set-content-storing-depth-null-after-update
используется для случая, когда контент необходимо сохранять только после его изменения. Задание этого параметра автоматически отменяет действие первых трех параметров.comment-title-depth
comment-body-depth
comment-json-metadata-depth
set-content-storing-depth-null-after-update
clear-votes-before-block, bpo::value<uint32_t>()->default_value(0)
, обеспечивающей удаление всех голосов до определенного фиксированного блока. Недостаток такого способа был в том, что он не обеспечивал удаление вновь пришедших голосов, которые заново накапливались в системе и по истечении определенного времени также становились ненужными.config.ini
дополнен новым параметром clear-votes-older-n-blocks, bpo::value<uint32_t>()->default_value(0xFFFFFFFF)
обеспечивающим сохранение голосов N блоков и удаление голосов в блоках старше N.
Соответствие задаваемого значения N и выполняемой операции приведено в следующей таблице.config.ini
добавлены параметры tags-number
и tag-max-length
, с помощью которых пользователь может задать количество и размер тега по своему усмотрению, что позволяет пользователю более гибко настраивать работу блокчейна.tags-number
и tag-max-length
приведены в следующей таблице.tags-number
tag-max-length
tags-number
по умолчанию доработка имеет обратную совместимость с предыдущими версиями.account_auths
.
Транзакции, создаваемые аккаунтом могли быть подписаны только ключами сторонних аккаунтов из поля account_auths
. При попытке подписать транзакцию ключом основного аккаунта приложение cli_wallet
выдавало сообщение об ошибке.
Для устранения этого недостатка в версии SF-0.18.4 доработан метод annotated_signed_transaction()
приложения cli_wallet
с сохранением перечня входных и выходных параметров этого метода. Доработка обеспечила возможность подписывать транзакцию как ключами аккаунтов с именами из поля account_auths
, так и ключом основного аккаунта."reblogged_by:<a name>"
, в котором отображается имя автора, перепубликовавшего работу стороннего автора.account_history
содержится информация о большом количестве операций. С целью ускорения поиска необходимой информации в версии 0.18.4 добавлен параметр, с помощью которого можно фильтровать операции по определенным признакам.query
для фильтрации операций. По умолчанию фильтрация отключена. Метод имеет следующий вид:from
и limit
в методе являются произвольными и по умолчанию принимают значения «-1» «100» соответственно. Метод может быть вызван с одним заданным параметром (например, get_account_history(account)
) для получения 100 последних операций аккаунта.
Параметр query
является структурой (объектом) и содержит следующие поля:
select_ops
— перечень операций, которые необходимо получить. Значение может содержать имена операций (в том числе оканчивающие на «_operation»), а также ключевые слова:
ALL
— все операции;
REAL
— только операции явно заданные;
VIRTUAL
— только виртуальные операции;
filter_ops
— перечень операций, которые следует исключить. Принимает те же значения, что и select_ops
. Это поле является произвольным и по умолчанию принимает значение пусто;
direction
— «направление» операции относительно аккаунта. Это поле является произвольным и принимает следующие значения:
any
— отсутствие направления фильтрации (значение по умолчанию);
sender
— характеризует аккаунта как отправителя (например, creator
или voter
);
receiver
— характеризует аккаунта как получателя (например, created
или voted
);
dual
— характеризует аккаунта как отправителя и получателя одновременно (например, voting self post
или операция неоднозначно определяющая аккаунта).cli_wallet
дополнено методом filter_account_history()
, который выполняет те же функции, что и метод get_account_history()
. В отличие от последнего имеет входной параметр query
для поддержки фильтрации. Примеры вызова filter_account_history()
: