COOPENOMICS  v1
Кооперативная Экономика
Структура Ano::endorsement

Заверение: подтверждение того, что заверяющий признаёт ключ заверения того, кого он заверяет. Подробнее...

#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 целиком. Проверка удостоверения должна работать без сети, значит подписи всей цепочки едут внутри удостоверения. Но собирает удостоверение кооператив, а подпись под его собственным заверением ставил оператор — взять её кооперативу больше неоткуда. Цепь и есть то место, где выданное заверение лежит и откуда его читают. Остальные поля записи дублируют то, что и так подписано внутри: они нужны, чтобы искать и отбирать записи, не разбирая подпись на каждой.

Проверять подпись контракт не пытается. Формат подписи здесь тот же, что у удостоверения пайщика, и разбирать его в контракте значило бы завести вторую реализацию проверки — ту самую, которая однажды разойдётся с первой. Ответ о подлинности даёт проверяющий, а запись сюда кладёт тот, кто её подписал, под собственными правами: испортив подпись, он навредит только себе.

Методы

◆ by_expires()

uint64_t Ano::endorsement::by_expires ( ) const
inline

◆ by_issuer()

uint64_t Ano::endorsement::by_issuer ( ) const
inline

◆ primary_key()

uint64_t Ano::endorsement::primary_key ( ) const
inline

Данные класса

◆ cert_key

public_key Ano::endorsement::cert_key

ключ заверения субъекта, который признаётся

◆ chain_id

checksum256 Ano::endorsement::chain_id

сеть, в которой действует заверение

◆ credential

std::string Ano::endorsement::credential

подписанное заверение целиком, для проверки без сети

◆ expires_at

time_point_sec Ano::endorsement::expires_at

когда перестаёт действовать

◆ issued_at

time_point_sec Ano::endorsement::issued_at

когда выдано

◆ issuer

name Ano::endorsement::issuer

кто заверяет

◆ subject

name Ano::endorsement::subject

кого заверяют — первичный ключ


Объявления и описания членов структуры находятся в файле: