Open PavelMSTU opened 2 weeks ago
Далее
UUID banknote_id;
UUID bank_id;
некорректно!
Сначала идентификатор банка, потом идентификатор банкноты
Неправильное наименование поля BLOCK_CHAIN
// [sok_a](bpk) подпись отправителя
SIGN sokA_by_bpk;
Лучше написать
// [sok_a](bpk) подпись получателя
SIGN sok_owner_by_bpk;
Так же нужно ввести поле WID
-- wallet ID и добавить его
Так же нужно ввести поле KEY
-- и добавять сам ключ как один из параметров
// KEY sok_owner -- высчитывается из sok_owner_by_bpk через bok
SIGN sok_owner_by_bpk;
KEY sok_owner не нужно добавлять, т.к. оно высчитывается из sok_owner_by_bpk. Но пояснить в комментах можно.
Далее
// HASH hash0 = hash(bank_id, banknote_id, parent_hash, sokA_by_bpk, counter, salt)
HASH hash0;
SIGN hash0_spkB;
Неверно, нужно
// HASH hash0 = hash(bank_id, banknote_id, parent_hash, sokA_by_bpk, counter, salt)
HASH hash0;
SIGN hash0_spk_owner;
Тут А (owner) подписывает, а не B !!!
Далее
SALT salt;
// hash = hash(hash0, hash0_spkB, salt)
HASH hash;
// Подпись хеша
SIGN hash_by_spkA;
тут неверно.
Заменить на
SALT salt;
// hash = hash(hash0, hash0_spkB, salt)
HASH hash;
// Подпись хеша
SIGN hash_by_spk_or_bpk_previous_owner;
Чтобы была возможность менять bpk
и bok
, нужно в BLOCK_HEADER
добавлять поле:
KEY bok;
И этот bok
и, соотвественно, закрытый bpk
действуют в рамках всей банкноты.
Если bpk
скомпроментирован, то соответственно, все купюры нужно вывести из обращения.
По поводу
WID owner
поля.
Оно нужно только на стороне сервера!
Поэтому при дополнительной подписи, мы сохраняем внутри сервера цепочку из wid-ов. Но в самом блокчейне odcb -- это НЕ нужно.
Есть ряд косяков
Во-первых лучше написать не
bank_id
аbin
.Во-вторых, лучше сделать это строкой длиной в 20 байт, чтобы подробно описать страну и сам банк.
Например:
означает центральный банк России, ключевой набор номер
0001
.Или
через бин.
Далее
append-applicability
хороший блок. Но нужно заранее знать в хедере сколько их будет. Иначе, при сокращении можно сократить теоретически и блоки append-applicability.Поэтому в хедер добавляем поле:
которое равно 0, если нет дополнительных блоков
append-applicability
, или равно количеству блоковappend-applicability
добавленных в конец банкноты.Теперь по свопу. э
BLOCK_SWAP
-- НЕ НУЖЕН.Просто для каждого блока
BLOCK_CHAIN
нужно хранить дополнительные поля:Которые подписываются банком эмитентом тогда и только тогда ,когда:
Таким образом можно хранить ТОЛЬКО хедер, все
append-applicability
блоки, по желанию блоки комментариев и последний блок, указывающий на владельца.В этом случае BLOCK_SWAP заменяем на
BLOCK_GAP
видаДанный блок валиден тогда и только тогда, когда следующий НЕ комментирующий блок -- это
BLOCK_CHAIN
c подписанными полямиsalt_bank
,hash_bank
иhash_bank_by_bpk