COOPENOMICS  v1
Кооперативная Экономика
drafts.hpp
См. документацию.
1#include <eosio/eosio.hpp>
2#include <eosio/crypto.hpp>
3#include <eosio/contract.hpp>
4#include <eosio/system.hpp>
5
6struct document
7{
8 // Чексумма документа (SHA256)
9 checksum256 hash;
10 // Публичный ключ
12 // Подпись чексуммы
14 // Публичные мета-данные документа
15 std::string meta;
16};
17
19 uint32_t id; // идентификатор номера подписи
20 checksum256 signed_hash; // подписанный хэш, включающий доп. данные (дату подписи)
21 eosio::name signer; // аккаунт подписавшего
22 eosio::public_key public_key; // публичный ключ
23 eosio::signature signature; // подпись хэша
24 eosio::time_point_sec signed_at; // время подписания
25 std::string meta; // мета-данные подписи
26};
27
28struct document2 {
29
30 // Версия стандарта документа
31 std::string version;
32
33 // uint64_t template_id; ///< было бы удобно но этого нет
34
35 // Хэши
36 eosio::checksum256 hash; // общий хэш (doc_hash + meta_hash)
37 eosio::checksum256 doc_hash; // хэш содержимого документа
38 eosio::checksum256 meta_hash; // хэш мета-данных
39
40 // Мета-данные документа
41 std::string meta;
42
43 // Вектор подписей (может содержать несколько подписантов)
44 std::vector<signature_info> signatures;
45};
46
48 const document2 &doc,
49 const std::vector<eosio::name>& required_signers = {}
50) {
51 for (const auto &sig : doc.signatures) {
52 // Проверка завершится прерыванием, если восстановление подписи провалится
53 assert_recover_key(sig.signed_hash, sig.signature, sig.public_key);
54 }
55 if (!required_signers.empty()) {
56 for (const auto& required : required_signers) {
57 bool found = false;
58 for (const auto& sig : doc.signatures) {
59 if (sig.signer == required) {
60 found = true;
61 break;
62 }
63 }
64 eosio::check(found, ("Не найдена подпись от обязательного подписанта: " + required.to_string()).c_str());
65 }
66 }
67}
68
70{
71 constexpr checksum256 EMPTY_HASH = checksum256(); // Все нули по умолчанию
72
73 return doc.hash == EMPTY_HASH;
74}
75
84struct [[eosio::table, eosio::contract(DRAFT)]] onedraft
85{
86 uint64_t registry_id;
87 uint64_t version;
89 std::string title;
90 std::string description;
91 std::string context;
92 std::string model;
93
94 uint64_t primary_key() const { return registry_id; };
95
96};
97
98typedef eosio::multi_index<"drafts"_n, onedraft> drafts_index;
99
100
101onedraft get_scoped_draft_by_registry_or_fail(eosio::name scope, uint64_t draft_id) {
102 drafts_index drafts(_draft, scope.value);
103 auto draft = drafts.find(draft_id);
104
105 eosio::check(draft != drafts.end(), "Шаблон документа не найден");
106
107 return *draft;
108}
109
118struct [[eosio::table, eosio::contract(DRAFT)]] translation
119{
120 uint64_t id;
121 uint64_t draft_id;
122 eosio::name lang;
123 std::string data;
124
125 uint64_t primary_key() const { return id; };
126 uint64_t by_draft() const { return draft_id; };
127
128 uint128_t by_draft_lang() const { return combine_ids(draft_id, lang.value); };
129};
130
131typedef eosio::multi_index<
132 "translations"_n, translation,
133 eosio::indexed_by<"bydraft"_n, eosio::const_mem_fun<translation, uint64_t, &translation::by_draft>>,
134 eosio::indexed_by<
135 "bydraftlang"_n,
136 eosio::const_mem_fun<translation, uint128_t, &translation::by_draft_lang>>>
138
Константы контракта шаблонов документов
Definition: draft.hpp:45
static constexpr eosio::name _draft
Definition: consts.hpp:154
void verify_document_or_fail(const document2 &doc, const std::vector< eosio::name > &required_signers={})
Definition: drafts.hpp:47
bool is_empty_document(const document2 &doc)
Definition: drafts.hpp:69
eosio::multi_index<"drafts"_n, onedraft > drafts_index
Definition: drafts.hpp:98
eosio::multi_index< "translations"_n, translation, eosio::indexed_by<"bydraft"_n, eosio::const_mem_fun< translation, uint64_t, &translation::by_draft > >, eosio::indexed_by< "bydraftlang"_n, eosio::const_mem_fun< translation, uint128_t, &translation::by_draft_lang > > > translations_index
Definition: drafts.hpp:137
onedraft get_scoped_draft_by_registry_or_fail(eosio::name scope, uint64_t draft_id)
Definition: drafts.hpp:101
contract
Definition: eosio.msig_tests.cpp:977
Definition: eosio.msig.hpp:34
Definition: drafts.hpp:28
eosio::checksum256 hash
Definition: drafts.hpp:36
std::vector< signature_info > signatures
Definition: drafts.hpp:44
std::string meta
Definition: drafts.hpp:41
eosio::checksum256 meta_hash
Definition: drafts.hpp:38
std::string version
Definition: drafts.hpp:31
eosio::checksum256 doc_hash
Definition: drafts.hpp:37
Definition: drafts.hpp:7
checksum256 hash
Definition: drafts.hpp:9
signature signature
Definition: drafts.hpp:13
std::string meta
Definition: drafts.hpp:15
public_key public_key
Definition: drafts.hpp:11
Таблица шаблонов документов хранит информацию о шаблонах документов и их версиях.
Definition: drafts.hpp:85
std::string context
Контекст шаблона
Definition: drafts.hpp:91
uint64_t registry_id
Реестровый идентификатор шаблона
Definition: drafts.hpp:86
std::string model
Модель шаблона
Definition: drafts.hpp:92
uint64_t version
Версия шаблона
Definition: drafts.hpp:87
uint64_t default_translation_id
Идентификатор перевода по умолчанию
Definition: drafts.hpp:88
std::string description
Описание шаблона
Definition: drafts.hpp:90
std::string title
Заголовок шаблона
Definition: drafts.hpp:89
uint64_t primary_key() const
Definition: drafts.hpp:94
Definition: drafts.hpp:18
uint32_t id
Definition: drafts.hpp:19
checksum256 signed_hash
Definition: drafts.hpp:20
eosio::name signer
Definition: drafts.hpp:21
eosio::public_key public_key
Definition: drafts.hpp:22
std::string meta
Definition: drafts.hpp:25
eosio::time_point_sec signed_at
Definition: drafts.hpp:24
eosio::signature signature
Definition: drafts.hpp:23
Таблица переводов шаблонов документов хранит переводы шаблонов на различные языки.
Definition: drafts.hpp:119
uint64_t by_draft() const
Первичный ключ (1)
Definition: drafts.hpp:126
eosio::name lang
Язык перевода
Definition: drafts.hpp:122
uint128_t by_draft_lang() const
Индекс по шаблону (2)
Definition: drafts.hpp:128
uint64_t primary_key() const
Definition: drafts.hpp:125
uint64_t draft_id
Идентификатор шаблона документа
Definition: drafts.hpp:121
std::string data
Данные перевода
Definition: drafts.hpp:123
uint64_t id
Идентификатор перевода
Definition: drafts.hpp:120
static uint128_t combine_ids(const uint64_t &x, const uint64_t &y)
Definition: utils.hpp:5