COOPENOMICS  v1
Кооперативная Экономика
Файл programs.hpp
#include <map>
#include <optional>
#include "../consts.hpp"
#include "utils.hpp"

См. исходные тексты.

Классы

struct  ProgramInfo
 

Функции

program get_program_or_fail (eosio::name coopname, uint64_t program_id)
 
bool has_signed_program_agreement (eosio::name coopname, eosio::name username, uint64_t program_id)
 
bool is_participant_of_cpp_by_program_id (eosio::name coopname, eosio::name username, uint64_t program_id)
 
bool is_valid_participant_of_program_by_type (eosio::name coopname, eosio::name username, eosio::name program_type)
 
void check_valid_program (const eosio::name &type)
 
uint64_t get_program_id (const eosio::name &type)
 
uint64_t get_draft_id (const eosio::name &type)
 
bool has_program_wallet (eosio::name coopname, eosio::name username, eosio::name type)
 

Переменные

static const std::map< eosio::name, ProgramInfoprogram_map
 

Функции

◆ check_valid_program()

void check_valid_program ( const eosio::name &  type)
inline

◆ get_draft_id()

uint64_t get_draft_id ( const eosio::name &  type)
inline

◆ get_program_id()

uint64_t get_program_id ( const eosio::name &  type)
inline

◆ get_program_or_fail()

program get_program_or_fail ( eosio::name  coopname,
uint64_t  program_id 
)

Логика программ пайщика и кошелька.

Источник правды по «участник ЦПП X» = wallet::users[username].programs[] (Эпик 2). signagree добавляет запись в этот вектор, revokeagree — удаляет; status="declined" в агриментах при ревоке не нужен — записи просто нет.

Таблицы из domain/index.hpp:

  • soviet::programs — реестр программ кооператива.
  • soviet::coagreements — мапа program_type → program_id (per-coop).
  • wallet::users — подписанные программные соглашения пайщика.

◆ has_program_wallet()

bool has_program_wallet ( eosio::name  coopname,
eosio::name  username,
eosio::name  type 
)

Открыт ли у пайщика программный кошелёк по типу программы.

Источник — wallet::users[username].programs[]: пайщик считается «открывшим» программу, если у него есть подписанное программное соглашение нужного program_id. Балансы — отдельно через ledger2::userwallets, эта функция только про факт открытия.

◆ has_signed_program_agreement()

bool has_signed_program_agreement ( eosio::name  coopname,
eosio::name  username,
uint64_t  program_id 
)
inline

◆ is_participant_of_cpp_by_program_id()

bool is_participant_of_cpp_by_program_id ( eosio::name  coopname,
eosio::name  username,
uint64_t  program_id 
)

◆ is_valid_participant_of_program_by_type()

bool is_valid_participant_of_program_by_type ( eosio::name  coopname,
eosio::name  username,
eosio::name  program_type 
)

Переменные

◆ program_map

const std::map<eosio::name, ProgramInfo> program_map
static
Инициализатор
= {
{_wallet_program, {1, 1}},
{_marketplace_program, {2, 1102}},
{_source_program, {3, 996}},
{_capital_program, {4, 1000}}}
static constexpr eosio::name _wallet_program
Главный Кошелёк
Definition: consts.hpp:83
static constexpr eosio::name _source_program
Кошелёк для генерации по договору УХД
Definition: consts.hpp:86
static constexpr eosio::name _capital_program
Кошелёк программы "Благорост".
Definition: consts.hpp:87
static constexpr eosio::name _marketplace_program
Кошелёк программы "Маркетплейс".
Definition: consts.hpp:84

Реестр целевых потребительских программ: тип → (program_id, draft_id).

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

program_id обязан совпадать во всех кооперативах — на него ссылается реестр кошельков ledger2 (LEDGER2_USER_SHARED_PROGRAM_MAPPING: w.mkt.* → 2, w.cap.blago → 4, w.cap.gen → 3).

draft_id — шаблон оферты, которую подписывает ПАЙЩИК при вступлении в ЦПП (не положение о программе: его утверждает совет). По нему wallet::signagree фиксирует версию подписи, а рабочий стол просит переподписать, когда оферта обновилась. Значение обязано совпадать с реестром документов в cooptypes: 1 — WalletAgreement, 1102 — MarketplaceOffer (было 699 — «Согласие с условиями ЦПП «СОСЕДИ»», шаблон от прежней версии программы), 996 — GeneratorOffer (было 0 — при нуле signagree не сверяет шаблон и пишет version=0, из-за чего переподпись не запрашивалась никогда), 1000 — BlagorostOffer.