COOPENOMICS  v1
Кооперативная Экономика
automation.hpp
См. документацию.
1#pragma once
2
12namespace Automation {
13
21inline checksum256 vote_digest(eosio::name action, eosio::name coopname, uint64_t decision_id, eosio::time_point_sec signed_at) {
22 std::string payload = action.to_string() + ":" + coopname.to_string() + ":" + std::to_string(decision_id) + ":" +
23 std::to_string(signed_at.sec_since_epoch());
24 return eosio::sha256(payload.data(), payload.size());
25}
26
28enum class Kind { vote, authorize };
29
40inline void verify_member_signature(eosio::name coopname, eosio::name member, eosio::name permission, eosio::name decision_type,
41 Kind kind, const checksum256& signed_hash, const eosio::signature& signature,
42 const eosio::public_key& public_key) {
43 eosio::check(permission != ""_n, "Не указано разрешение, которым подписан голос");
44
45 if (permission != "active"_n) {
46 automator_index automator(_soviet, coopname.value);
47 auto by_member = automator.get_index<"bymember"_n>();
48 auto autom = by_member.find(member.value);
49
50 eosio::check(autom != by_member.end(), "Автоматизация решений для члена совета не включена");
51 eosio::check(autom->permission_name == permission, "Разрешение не совпадает с разрешением робота в реестре автоматизаций");
52 eosio::check(!autom->is_expired(), "Срок действия автоматизации истёк");
53
54 if (kind == Kind::vote) {
55 eosio::check(autom->allows_vote(decision_type), "Голосование по этому типу решения роботу не делегировано");
56 } else {
57 eosio::check(autom->allows_authorize(decision_type), "Подпись протокола по этому типу решения роботу не делегирована");
58 }
59 }
60
61 eosio::assert_recover_key_account(signed_hash, signature, public_key, member, permission);
62}
63
64} // namespace Automation
static constexpr eosio::name _soviet
Definition: consts.hpp:177
Definition: automation.hpp:12
void verify_member_signature(eosio::name coopname, eosio::name member, eosio::name permission, eosio::name decision_type, Kind kind, const checksum256 &signed_hash, const eosio::signature &signature, const eosio::public_key &public_key)
Проверка, что подпись сделана ключом указанного разрешения аккаунта члена совета
Definition: automation.hpp:40
Kind
Definition: automation.hpp:28
checksum256 vote_digest(eosio::name action, eosio::name coopname, uint64_t decision_id, eosio::time_point_sec signed_at)
Хэш, который подписывает член совета при голосовании
Definition: automation.hpp:21
action(permission_level{ _gateway, "active"_n}, _gateway, "adduser"_n, std::make_tuple(coopname, deposit->username, to_spread, to_circulation, eosio::current_time_point(), true)).send()
eosio::multi_index< "automator"_n, automator, eosio::indexed_by<"bymember"_n, eosio::const_mem_fun< automator, uint64_t, &automator::by_member > > > automator_index
Definition: soviet.hpp:356
Реестр автоматизаций робота решений совета
Definition: soviet.hpp:319