HF18: Изменения в API
В версии HF•18 реализованы новые функциональные и технические возможности, предоставляющие пользователям более удобное взаимодействие с системой, повышенную защиту от злоупотребления голосованием, а также повышающие быстродействие системы за счет более оптимального перераспределения методов между плагинами API.
Перечень новых функциональных возможностей в HF•18
Блокирование различного вида злоупотреблений делегированием Силы Голоса.
Обеспечение более гибкой ценовой политики на бирже за счет удаления старых данных и использования актуальных в определении курса и соотношения крипто-валют.
Возможность пользователям вносить изменения в профиль с использованием ключа posting.
Возможность пользователям предлагать транзакцию на подписание, состоящей из нескольких операций.
Возможность пользователям вносить изменения в посты и комментарии независимо от срока их публикации и придавать им актуальность.
Перечень новых технических возможностей в HF•18
Повышение быстродействия системы за счет размещения в разных объектах полей с часто и редко используемыми данными.
Повышение производительности API протокола за счет удаления неиспользуемых полей из методов плагинов, а также за счет перераспределения методов между плагинами для более эффективного их использования.
Применение фильтрации тегов для настройки ленты в более удобной для пользователя форме.
Возможность постраничного вывода личных сообщений на экран пользователя.
Измененные и новые плагины в HF•18
Изменения в плагине private_message
В данный плагин добавлена возможность постраничного вывода списка личных сообщений. Изменены следующие методы (шрифтом bold выделены добавленные аргументы):
get_inbox(string to, time_point newest , uint limit, uint offset)
get_outbox(string from, time_point newest , uint limit, uint offset)
Метод get_inbox
возвращает список входящих сообщений начиная с даты, заданной в newest.
Метод get_outbox
возвращает список исходящих сообщений начиная с даты, заданной в newest.
limit
— ограничивает количество сообщений (максимально допустимое значение — 100).
offset
— номер сообщения, с которого выполняется операция (начиная с №).
Новый плагин witness_api
Плагин witness_api
образован перемещением части методов с часто используемыми полями из плагина database_api
. В него вошли следующие методы:
get_current_median_history_price
get_feed_history
get_miner_queue
get_witness_schedule
get_witnesses
get_witness_by_account
get_witnesses_by_vote
get_witness_count
lookup_witness_accounts
get_active_witnesses // <- из выдаваемого результата удалены пустые строки
Все методы перемещены в witness_api
без изменений во входных параметрах и выдаваемых результатах. Исключение составляет метод get_active_witnesses
, у которого из выдаваемого результата удалены пустые строки.
Изменения в плагине account_history
Плагин account_history
дополнен следующим методом:
get_account_history
Метод перемещен из database_api
без изменений во входных параметрах и выдаваемых результатах.
Новый плагин operation_history
Плагин operation_history
образован перемещением методов из плагина database_api
. Создание данного плагина позволяет отделить индексирование операций в блокчейне от истории пользователей. Пользователь может запрашивать и получать информацию об операциях в транзакциях (блоках) без ведения истории по аккаунтам. Это обеспечивает снижение нагрузки на сервер и на потребляемую память.
Плагин operation_history
дополнен следующими методами:
get_ops_in_block
get_transaction
Методы перемещены из database_api
без изменений во входных параметрах и выдаваемых результатах.
Изменения в плагине social_network
Часть методов из плагина social_network
была перемещена во вновь созданный плагин tags
. Перенос методов осуществлен для того, чтобы создание дополнительных индексов и поиск информации по ним проводились в отдельном плагине. В плагине social_network
оставлены методы, обеспечивающие обращение к корневым элементам, а методы, обрабатывающие теги, перемещены в новый плагин tags
.
Введен опциональный параметр vote_limit
для задания максимального количества проголосовавших в ответе пользователю. По умолчанию его значение принимается равным 10000. Например, количество комментариев к посту может достигать 1000 и более, что затрудняет их просмотр и поиск интересующей информации. Пользователь может с использованием тэга сформировать запрос на получение комментариев, выбранных (отсортированных) в соответствии с указанными в тэге признаками. Параметр vote_limit
позволяет уменьшить размер отправляемого от сервера ответа. При этом в ответе добавляется дополнительное поле active_votes_count
, информирующее об общем количестве проголосовавших (без необходимости получать полный список).
Изменена результирующая структура:
Изменения внесены в методы, возвращающие структуру discussion
и массив discussion
. В этот перечень вошли следующие методы:
get_replies_by_last_update(string start_parent_author, string start_permlink, uint limit
[, uint vote_limit]
)get_content(string account, string permlink
[, uint vote_limit]
)get_content_replies(string author, string permlink
[, uint vote_limit]
)get_all_content_replies(string author, string permlink
[, uint vote_limit]
)get_content(string author, string permlink
[, uint32_t limit]
)get_active_votes(string account, string permlink
[, uint vote_limit]
)get_account_votes(string account
[, uint from, uint vote_limit]
)
Фоном выделены параметры, которыми были дополнены методы.
Следующие методы, дублирующие функции плагина tag
, были удалены из плагина social_network
:
get_trending_categories
get_active_categories
get_recent_categories
get_best_categories
Новый плагин tags
В плагин tags
перемещены методы, выполняющие операции с тэгами (например, получение наиболее популярных тэгов; получение списка языков; получение тэгов, используемых автором). Это позволяет сэкономить размер файла разделяемой памяти тем пользователям, которые не используют данную функциональность.
Методы, которые перемещены из social_network
без изменений:
get_trending_tags(string start, uint limit)
get_languages()
get_tags_used_by_author(string)
get_discussions_by_payout(query)
get_discussions_by_trending(query)
get_discussions_by_created(query)
get_discussions_by_active(query)
get_discussions_by_cashout(query)
get_discussions_by_votes(query)
get_discussions_by_children(query)
get_discussions_by_hot(query)
get_discussions_by_feed(query)
get_discussions_by_blog(query)
get_discussions_by_comments(query)
get_discussions_by_promoted(query)
В метод get_discussions_by_author_before_date
добавлен новый параметр vote_limit
(шрифтом bold выделен добавленный параметр):
get_discussions_by_author_before_date(string author, string start_permlink, datetime before_date, uint limit [, uint vote_limit])
Изменена результирующая структура метода:
Изменения в плагине follow
В плагине follow
изменена структура метода get_account_reputations
в соответствии со следующим представлением:
get_account_reputations(array accounts)
Результат array
Изменения в плагине database_api
Плагин database_api
дополнен новыми методами для выполнения новых операций.
Новые методы:
Новые операции:
Неизменяемая часть database_api
Часть методов из database_api
перемещена в плагины witness_api
, account_history
, operationt_history
и follow
. Сохраненными в database_api
без изменений остались следующие методы:
get_block_header
get_block
set_block_applied_callback
get_config
get_dynamic_global_properties
get_chain_properties
get_hardfork_version
get_next_scheduled_hardfork
get_account_count
get_owner_history
get_recovery_request
get_escrow
get_withdraw_routes
get_account_bandwidth
get_savings_withdraw_from
get_savings_withdraw_to
get_conversion_requests
get_transaction_hex
get_required_signatures
get_potential_signatures
verify_authority
verify_account_authority
lookup_account_names
lookup_accounts
Изменения в методах database_api
Поля average_bandwidth
и average_market_bandwidth
были удалены из плагина database_api
как неиспользуемые. Заменяемые их в выполнении операций поля new_average_bandwidth
, new_average_market_bandwidth
были переименованы в первоначальные их имена average_bandwidth
и average_market_bandwidth
соответственно.
Поле lifetime_bandwidth
было удалено и заменено на вновь созданное одноименное поле lifetime_bandwidth
, зависящее от новых значений, а также поле lifetime_market_bandwidth
для использования в маркетинговых операциях.
Из описания типа bandwidth_type
, используемого в вызове метода get_account_bandwidth
, удалены поля old_forum
и old_market
.
В поле lifetime_bandwidth
хранится суммарное значение bandwidth
, используемое аккаунтом за все время его работы. В поле average_bandwidth
хранится среднее значение bandwidth
, по которому определяется порог чрезмерной активности аккаунта.
Внесены изменения в выдаваемый результат следующего метода:
get_accounts
Удаление полей из структуры account обусловлено тем, что ранее эти поля никогда не использовались.
Новый метод get_proposed_transaction
Этот метод обрабатывает запрос на выдачу списка предложенных для подписания транзакций, поступивший от какого-либо аккаунта. Метод возвращает массив транзакций, в который входят транзакции, созданные непосредственно данным аккаунтом, а также транзакции, которые ему необходимо подписать.
get_proposed_transaction(account: string)
Новый метод get_database_info
Этот метод возвращает информацию о текущем статусе разделяемой памяти, в том числе: общий объем разделяемой памяти, размер свободного и зарезервированного пространства для определенных нужд, а также список индексов, хранящихся в разделяемой памяти (название индекса, количество записей).
get_database_info()
Новый метод get_vesting_delegations
Этот метод возвращает массив значений с описанием операции делегирования (далее — блок делегирования) аккаунта (делегированный другим аккаунтам или же полученный от других аккаунтов).
get_vesting_delegations
account
— аккаунт, по запросу от которого выдается блок делегирования. Отправитель*/получатель определяется аргументомtype
.from
— начальный аккаунт, парный в операции делегирования. Получатель/отправитель - задается аргументомtype
(для пагинации).limit
— количество возвращаемых элементов (для пагинации). По умолчанию принимается равным 100. Максимальное значение равно 1000.type
— тип запрашиваемого блока делегирования: "delegated" (делегированный), "received" (полученный). По умолчанию принимает значение "delegated".
Пример возвращаемого блока делегирования: массив vesting_delegation_api_object [{id: 0, delegator: "zzz", delegatee: "zxcat", vesting_shares: "90.000000 GESTS", min_delegation_time: "2018-04-25T21:48:15"}]
.
Новый метод get_expiring_vesting_delegations
Этот метод используется для получения списка возвращаемых (отозванных и «замороженных») делегированных средств аккаунта. Метод возвращает результат в виде массива значений с описанием операции возврата делегированных средств (далее — блок отозванного делегирования)
get_expiring_vesting_delegations
account
— аккаунт, возвращающий делегированные средства.from
— начальное время возврата делегированных средств (для пагинации).limit
— количество возвращаемых элементов (для пагинации). По умолчанию принимается равным 100. Максимальное значение равно 1000.
Пример возвращаемого модулем блока отозванного делегирования: массив vesting_delegation_expiration_api_object, [{id: 0, delegator: "zxcat", vesting_shares: "123.000000 GESTS", expiration: "2018-05-25T11:18:45"}]
.
Новая операция: изменение или возврат делегирования Силы Голоса
Эта операция позволяет изменять количество делегированного, а также осуществлять возврат делегированного в полном объеме. Для выполнения этих операций необходима подпись ключом active
. Операции выполняются с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом active
.
Для изменения количества делегирования Силы Голоса в поле vesting_shares
следует задать новое значение. Для полного возврата делегированной части Силы Голоса в поле vesting_shares
следует задать значение вида “0.000000 GESTS”. При изменении значения в сторону уменьшения делегированная Сила Голоса сразу снимется с аккаунта-получателя и переходит в «замороженное» состояние сроком на семь дней (в случае создания аккаунта с делегированием этот период определяется параметром create_account_delegation_time
).
Минимальное количество Силы Голоса, необходимое для делегирования, определяется по результатам голосования делегатов.
Новая операция: создание аккаунта с делегированием Силы Голоса
Операция выполняется с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом active
.
Для создания аккаунта с делегированием необходимо, чтобы выполнялись следующие два условия:
где
fee
— размер комиссионных отчислений;
create_account_min_golos_fee
— минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием;
delegation
— делегированная часть Силы Голоса;
create_account_min_delegation
— минимальное количество Силы Голоса, необходимое для создания аккаунта с делегированием.
При создании аккаунта с делегированием бо́льшую часть комиссии можно оплатить с «заморозкой» на период, определяемый параметром create_account_delegation_time
. Делегированная Сила Голоса может быть отозвана в любой момент (например, в случае злоупотребления полученной делегированной частью новым аккаунтом). При этом делегированная Сила Голоса будет снята с нового аккаунта сразу, а на делегирующий аккаунт будет возвращена по истечении срока «заморозки». Время «заморозки» является параметром, определяемым по результатам голосования. Его значение выбирается по медиане из списка всех значений, полученных от делегатов с помощью операции chain_properties_update_operation
.
Новая операция: изменение json_metadata аккаунта
Пользователю предоставляется возможность изменять метаданные своего профиля без использования ключа active
. Поля профиля хранятся в json_metadata
. Для изменения любого поля профиля требовалась подпись только ключом active
, что не всегда было приемлемым.
Было принято решение разделить поля на две группы. В состав первой группы вошли поля с наиболее значимыми данными профиля (ключи: posting
, active
, owner
и memo
), а в другую — с менее значимыми, но часто используемыми (аватар, пол, местонахождение и пр.). Процедура изменения полей первой группы сохранена и требует подписи только ключом active
. В версии HF•18 вносить изменения в поля второй группы стало возможным с использованием ключа posting
для подписи.
Операция выполняется с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом posting
.
Новая операция: предложение на транзакцию
Пользователю предоставляется возможность предлагать транзакцию на блокчейне с несколькими отдельными операциями, требующих одобрения от пользователей на их выполнение.
Операция выполняется с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом active
.
Создаваемая транзакция должна быть уникальной по сочетанию полей author-title. По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления.
В поле proposed_operations
задается список операций для выполнения их в транзакции (например, {["delete_comment_operation":{"autor":"jim", "permlink":"hello"}}]
). На каждую операцию из этого списка должна быть получена подпись автора, которому она предназначена. Право проставления подписи на выполнение любой операции из списка имеет также каждый из участников транзакции. Например, операция публикации поста назначается одному автору, а операция перечисления вознаграждения за нее — другому. В случае несогласия другого автора с выполнением второй операции он может удалить подпись на выполнение первой операции предложенной транзакции.
В поле review_period_time
проставляется время, отводимое на принятие решений участников транзакции. Этот период должен быть меньше максимального времени из поля expiration_time
, которое отводится на транзакцию. По истечении этого периода подписи в транзакции могут быть только удаляться.
Если параметр review_period_time
не задан, то транзакция будет сразу выполняться после сбора всех необходимых подписей.
Новая операция: обновление предложенной транзакции
Автору, а также участникам транзакции, предоставляется возможность менять свое решение и обновлять подписи до истечения времени, отводимого на транзакцию.
Если транзакция не получает одобрения на выполнение какой-либо из операций, эта транзакция не отменяется и ее актуальность будет сохраняться до отведенного на ее выполнение времени. После получения всех необходимых подписей транзакция сразу будет выполняться и все последующие обновления будут считаться недействительными.
Операция выполняется с использованием следующей процедуры:
Подпись зависит от списка операций, предлагаемых на подписание.
По этой паре author-title идентифицируется транзакция в случае внесения в нее изменений или ее удаления. Поля, в которые записывается псевдоним для подписи транзакции, выбираются в зависимости от типа операций в предложенной транзакции.
Новая операция: удаление предложенной транзакции
В случае отказа кого-либо из участников транзакции в выполнении операции он может сформировать запрос на удаление предложенной транзакции. Идентификация транзакции осуществляется по паре author-title.
Операция выполняется с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом active
.
Удалить предложенную транзакцию может как ее автор, так и любой участник, от которого требуется подпись. Если хотя бы один из участников запрашивает удаление транзакции, то, независимо от подписей остальных участников, данная транзакция будет удалена.
Новая операция: изменение параметров блокчейна
Предыдущие версии блокчейна обеспечивают поддержку операции witness_update
, которая позволяет делегатам Голоса изменять по результатам голосования значения следующих параметров:
account_creation_fee
— размер комиссионных отчислений, требуемых на создание аккаунта без делегирования;maximum_block_size
— максимальный размер блока блокчейна;sbd_interest_rate
— процент, начисляемый на SBD.
Ввиду того, что witness_update
не позволяет расширить перечень параметров, значения которых определяются голосованием, в версии HF•18 реализована новая операция chain_properties_update
, которая поддерживает более расширенный перечень таких параметров и позволяет наращивать его в будущем. В версии HF•18 операция chain_properties_update
поддерживает следующий перечень параметров, значения которых определяются голосованием:
account_creation_fee
— размер комиссионных отчислений, требуемых на создание аккаунта без делегирования;maximum_block_size
— максимальный размер блока блокчейна;sbd_interest_rate
— процент, начисляемый на SBD;create_account_min_golos_fee
— минимальный размер комиссионных отчислений в криптовалюте Голос, требуемых на создание аккаунта с делегированием (по умолчанию принимает значение "1.000 GOLOS", см. операцию account_create_with_delegation);create_account_min_delegation
— устанавливает минимально возможное количество Силы Голоса при создании аккаунта с делегированием (по умолчанию принимает значение "5.000 GOLOS", см. операцию account_create_with_delegation);create_account_delegation_time
— устанавливает минимально возможное время (в секундах) «заморозки» делегированной Силы Голоса при создании аккаунта с делегированием (по умолчанию принимает значение за период в 30 дней, см. операцию account_create_with_delegation);min_delegation
— устанавливает минимально возможное количество Силы Голоса для делегирования на аккаунт (по умолчанию принимает значение "10.000 GOLOS", см. операцию delegate_vesting_shares).
Операция выполняется с использованием следующей процедуры:
Для выполнения этой опирации требуется подпись ключом active
.
Last updated