Расчет ЭЦП
Расчет ЭЦП строится по тем же принципам, что и в EON 1 (TestNet3 - EON Peer API / Transaction signature, но Bencode-строка не приводится к uppercase):
Формируется словарь с данными на подпись.
Из словаря формируется Bencode-строка.
В кодировке UTF-8 берутся байты.
Полученные байты подписываются приватным ключом.
Полученная подпись вставляется в соответствующее поле.
Для транзакции
Для формирования словаря используются следующие поля (аналогичны структуре транзакции):
timestamp : long
deadline : long
publisher : String
fee : long
tags : map<string>
(необязательное поле)commands : list<map>
(команды формируются как на подпись)
Пример (JSON):
Для команды
Для формирования словаря используются следующие поля (аналогичны структуре команды):
version : long
network : String
timestamp : long
deadline : long
publisher : String
type : String
data : map
reference : string
(необязательное поле)note : string
(необязательное поле)
Пример (JSON):
Подпись транзакций и команд
Транзакция подписывается аккаунтом, заданным в поле publisher
. Для каждого типа команды есть свои правила по определению того, кто должен ее подписать (если подпись команде вообще требуется).
Подписываются команды и транзакции с учетом настроек мультиподписи. Т.е. если включена мультиподпись, то вместо указанного аккаунта должны подписывать те аккаунты, которые указаны в мультиподписи. Причем они подписывают с учетом настроек их мультиподписи, если она включена (кроме ситуации, когда аккаунт включает себя в настройку мультиподписи - в таком случае необходима ЭЦП аккаунта).
Например::
Аккаунт
A
выпускает транзакцию. Он должен ее подписать.Если аккаунт
A
задал в мультиподписи аккаунтыB
иC
, то в транзакции ожидаются подписи аккаунтовB
иC
(с учетом их настроек мультиподписи).Если аккаунт
B
задал мультиподпись на аккаунтС
, то в транзакции ожидается подпись только аккаунтаC
(с учетом его настроек мультиподписи).Если аккаунт
C
задал мультиподпись на аккаунтыС
иD
, то в транзакции ожидаются подписи аккаунтовС
иD
(ЭЦПC
и дляD
с учетом настроек мультиподписи).Если аккаунт
D
не задавал настройки мультиподписи, то в транзакции должно быть две ЭЦП: от аккаунтовС
иD
.
Last updated