|
COOPENOMICS
v1
Кооперативная Экономика
|
Заверение: подтверждение того, что заверяющий признаёт ключ заверения того, кого он заверяет. Подробнее...
#include <table_ano_endorsements.hpp>
Открытые члены | |
| uint64_t | primary_key () const |
| uint64_t | by_issuer () const |
| uint64_t | by_expires () const |
Открытые атрибуты | |
| name | subject |
| кого заверяют — первичный ключ Подробнее... | |
| name | issuer |
| кто заверяет Подробнее... | |
| checksum256 | chain_id |
| сеть, в которой действует заверение Подробнее... | |
| public_key | cert_key |
| ключ заверения субъекта, который признаётся Подробнее... | |
| time_point_sec | issued_at |
| когда выдано Подробнее... | |
| time_point_sec | expires_at |
| когда перестаёт действовать Подробнее... | |
| std::string | credential |
| подписанное заверение целиком, для проверки без сети Подробнее... | |
Заверение: подтверждение того, что заверяющий признаёт ключ заверения того, кого он заверяет.
Одна и та же запись описывает оба уровня цепочки доверия, и это сделано намеренно. АНО заверяет оператора, оператор заверяет кооператив — отличаются такие записи только тем, кто в них указан заверяющим. Заводить под каждый уровень свою таблицу означало бы дважды написать одно и то же и потом всю жизнь держать две реализации в согласии.
Ключ записи — тот, кого заверяют. У субъекта в один момент времени ровно одно действующее заверение: его выдаёт тот, кто ведёт его установку. Заверений от двух разных сторон одновременно не бывает — цепочка тогда перестала бы быть цепочкой и превратилась бы в граф, в котором проверяющему пришлось бы выбирать путь.
Заверение хранит ключ, а не только имя. Подтверждается не «кооператив такой-то хороший», а «вот этим ключом такой-то вправе заверять удостоверения». Поэтому смена ключа заверения обесценивает заверение, и его нужно выдавать заново — это правильное поведение, а не неудобство: иначе подменивший ключ унаследовал бы чужое признание.
Зачем в записи лежит credential целиком. Проверка удостоверения должна работать без сети, значит подписи всей цепочки едут внутри удостоверения. Но собирает удостоверение кооператив, а подпись под его собственным заверением ставил оператор — взять её кооперативу больше неоткуда. Цепь и есть то место, где выданное заверение лежит и откуда его читают. Остальные поля записи дублируют то, что и так подписано внутри: они нужны, чтобы искать и отбирать записи, не разбирая подпись на каждой.
Проверять подпись контракт не пытается. Формат подписи здесь тот же, что у удостоверения пайщика, и разбирать его в контракте значило бы завести вторую реализацию проверки — ту самую, которая однажды разойдётся с первой. Ответ о подлинности даёт проверяющий, а запись сюда кладёт тот, кто её подписал, под собственными правами: испортив подпись, он навредит только себе.
|
inline |
|
inline |
|
inline |
| public_key Ano::endorsement::cert_key |
ключ заверения субъекта, который признаётся
| checksum256 Ano::endorsement::chain_id |
сеть, в которой действует заверение
| std::string Ano::endorsement::credential |
подписанное заверение целиком, для проверки без сети
| time_point_sec Ano::endorsement::expires_at |
когда перестаёт действовать
| time_point_sec Ano::endorsement::issued_at |
когда выдано
| name Ano::endorsement::issuer |
кто заверяет
| name Ano::endorsement::subject |
кого заверяют — первичный ключ