Каждое решение ONYX попадает в журнал, который только растёт. Каждый час подписывается отметка: сколько в нём было записей и какой у него отпечаток. Если что-то потом переписать, эти отметки перестанут сходиться.
Каждая отметка подписана ключом, опубликованным выше, — и проверяется здесь, на вашей машине.
Каждая отметка ссылается на предыдущую. Пропавшая отметка оставляет дыру.
Высота никогда не уменьшается. Чтобы удалить что-то из прошлого, журнал пришлось бы сделать короче уже подписанной отметки.
Последняя отметка недавняя. Если бы всё остановилось, это было бы видно.
Каждая подпись свидетеля проверяется здесь же, против тех же байтов. Свидетель не может подписать, не увидев ту же историю, что видите вы.
Для случая, когда кто-то говорит «вы наказали меня ни за что». В его квитанции есть номер, этот номер должен быть внутри этого журнала, и журнал не мог с тех пор измениться. Без этого единственным ответом было бы «поверьте нам».
Независимые люди, которые скачивают каждую отметку, проверяют, что она растёт из той, что видели раньше, и подписывают её своим ключом. Свидетель, видевший одну историю, не подпишет другую — поэтому у поддельной истории не будет подписей, и это заметно.
node tools/witness.js https://argos.is-a.dev
Одна команда. Создаёт ключ, смотрит каждый час и останавливается, если что-то перестало сходиться.
Эта страница читает ровно это и ничего больше. Вы тоже можете. /api/attest
{
"v": 2,
"algo": "ed25519",
"key": "MCowBQYDK2VwAyEA25zqsz+yCAxGMPwfT+c/DfOJRhlzI7A8Wn6bT2nMPXI=",
"signed": {
"1": "JSON.stringify({v,seq,at,height,head,prev})",
"2": "JSON.stringify({v,seq,at,height,head,size,root,prev})",
"3": "JSON.stringify({v,seq,at,height,head,size,root,code,prev})",
"4": "JSON.stringify({v,seq,at,height,head,size,root,code,prev})"
},
"count": 1063
}