|
COOPENOMICS
v1
Кооперативная Экономика
|
Контракт Wallet управляет взносами и возвратами взносов по ЦПП "Цифровой Кошелёк". Подробнее...
#include <wallet.hpp>
Классы | |
| struct | counts |
Открытые члены | |
| void | migrate () |
| void | cleanup () |
| Очистка отработавших записей по правилам контракта (lib/core/cleanup.hpp); плейбук вызывает её на каждом деплое. Подробнее... | |
| void | createdpst (eosio::name coopname, eosio::name username, checksum256 deposit_hash, eosio::asset quantity) |
| void | completedpst (eosio::name coopname, checksum256 deposit_hash) |
| void | declinedpst (eosio::name coopname, checksum256 deposit_hash, std::string reason) |
| void | createwthd (eosio::name coopname, eosio::name username, checksum256 withdraw_hash, eosio::asset quantity, document2 statement) |
| void | completewthd (COMPLETEWTHD_SIGNATURE) |
| void | declinewthd (DECLINEWTHD_SIGNATURE) |
Отменяет процесс возврата средств в контракте wallet. Подробнее... | |
| void | authwthd (AUTHWTHD_SIGNATURE) |
| void | signagree (eosio::name coopname, eosio::name username, uint64_t program_id, document2 document, uint64_t draft_id) |
| Подписание программного соглашения пайщиком (ADR-008). Подробнее... | |
| void | revokeagree (eosio::name coopname, eosio::name username, uint64_t program_id) |
| Расторжение программного соглашения пайщика. Подробнее... | |
| void | migrate3 (eosio::name coopname, eosio::name username, uint64_t program_id, checksum256 doc_hash, uint16_t version, uint64_t draft_id, time_point signed_at) |
| Идемпотентная миграция программного соглашения из soviet::agreements3. Подробнее... | |
| void | importagree (eosio::name coopname, eosio::name username, uint64_t program_id) |
| Фиксация программного соглашения, подписанного вне платформы (импорт пайщика). Подробнее... | |
| coop_contract (eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds) | |
Открытые члены унаследованные от coop_contract | |
| coop_contract (eosio::name receiver, eosio::name code, eosio::datastream< const char * > ds) | |
Контракт Wallet управляет взносами и возвратами взносов по ЦПП "Цифровой Кошелёк".
| void wallet::authwthd | ( | AUTHWTHD_SIGNATURE | ) |
| void wallet::cleanup | ( | ) |
Очистка отработавших записей по правилам контракта (lib/core/cleanup.hpp); плейбук вызывает её на каждом деплое.
Очистка отработавших записей (lib/core/cleanup.hpp).
Правил нет: депозиты и выводы удаляются на терминальном шаге, соглашения пайщиков по программам — юридические записи.
| void wallet::completedpst | ( | eosio::name | coopname, |
| checksum256 | deposit_hash | ||
| ) |
| void wallet::completewthd | ( | COMPLETEWTHD_SIGNATURE | ) |
|
inline |
| void wallet::createdpst | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| checksum256 | deposit_hash, | ||
| eosio::asset | quantity | ||
| ) |
| void wallet::createwthd | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| checksum256 | withdraw_hash, | ||
| eosio::asset | quantity, | ||
| document2 | statement | ||
| ) |
| void wallet::declinedpst | ( | eosio::name | coopname, |
| checksum256 | deposit_hash, | ||
| std::string | reason | ||
| ) |
| void wallet::declinewthd | ( | DECLINEWTHD_SIGNATURE | ) |
Отменяет процесс возврата средств в контракте wallet.
| void wallet::importagree | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| uint64_t | program_id | ||
| ) |
Фиксация программного соглашения, подписанного вне платформы (импорт пайщика).
Старых пайщиков кооператив вводит в электронный учёт как есть: договор УХД и соглашение о присоединении к программе подписаны на бумаге задолго до платформы, и электронной подписи пайщика под ними нет и быть не может. При этом ledger2::walletop перед любой операцией на USER_SHARED-кошельке требует запись программы в wallet::users.programs[] (ADR-004, Story 3.2) — без неё импортированному пайщику нельзя даже зачислить его же взнос.
Действие закрывает ровно этот разрыв: заводит запись программы с нулевым doc_hash и draft_id = 0. Нули и означают «подписано вне платформы» — электронного документа нет, сетевого шаблона под бумагой тоже. Реквизиты бумажного соглашения (номер и дата) кооператив хранит в реестре параметров документов, вне цепи. Дальше импортированный пайщик работает как все: проверка в walletop смотрит на факт наличия программы, а не на документ.
Авторизация — только capital@active: путь ввода бумажного соглашения открыт единственному сценарию capital::importcontrib. Ни кооператив напрямую, ни другие контракты соглашение без подписи завести не могут, и обычный порядок (wallet::signagree с подписанным документом) остаётся единственным для всех, кто вступает через платформу.
Идемпотентность: программа уже в programs[] → выход без изменений. Электронная подпись старше бумаги — импорт её не перетирает.
| coopname | Кооператив (scope записи wallet::users) |
| username | Импортируемый пайщик |
| program_id | Идентификатор программы (см. soviet::programs) |
capital (active) | void wallet::migrate | ( | ) |
| void wallet::migrate3 | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| uint64_t | program_id, | ||
| checksum256 | doc_hash, | ||
| uint16_t | version, | ||
| uint64_t | draft_id, | ||
| time_point | signed_at | ||
| ) |
Идемпотентная миграция программного соглашения из soviet::agreements3.
Per-record self-service миграция: для каждой записи agreements3 с program_id > 0 и status = "confirmed" — append/update в wallet::users.
Идемпотентность: повторный вызов с теми же параметрами = update до того же значения, без бух-эффектов. migration_state.json не используется (объёмы 20–30 пайщиков; ADR-006).
Без проверок программы/пайщика/документа: миграция доверяет источнику (soviet::agreements3) и заполняет state как есть. Полные проверки делает нормальный flow signagree.
| coopname | Кооператив (ключей от него у нас нет — поэтому НЕ авторизатор) |
| username | Пайщик |
| program_id | Идентификатор программы |
| doc_hash | Хэш документа из agreements3.document.hash |
| version | Версия шаблона |
| draft_id | Идентификатор шаблона документа |
| signed_at | Момент подписания (берётся из agreements3.updated_at) |
wallet@active (через get_self()) ИЛИ coopname@active. Первый путь — для централизованного migrator (раскатка из CI). Второй — для self-service backfill из контроллера кооператива (BlockchainService имеет WIF только coopname; для wallet@active отдельного ключа нет). Payer: тот, кто подал auth (wallet или сам кооператив). | void wallet::revokeagree | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| uint64_t | program_id | ||
| ) |
Расторжение программного соглашения пайщика.
Удаляет программу из users[username].programs[]. Если в результате vector пустеет — удаляет запись users целиком (RAM освобождается).
| coopname | Кооператив (auth: coopname@active) |
| username | Пайщик, расторгающий соглашение |
| program_id | Идентификатор программы |
coopname (active) | void wallet::signagree | ( | eosio::name | coopname, |
| eosio::name | username, | ||
| uint64_t | program_id, | ||
| document2 | document, | ||
| uint64_t | draft_id | ||
| ) |
Подписание программного соглашения пайщиком (ADR-008).
Wallet — owner программных соглашений (Эпик 2 компонента 48). Запись хранит только хэш и метаданные документа; полный текст лежит в action data (audit trail) и в off-chain реестре документов — НЕ в state контракта.
Upsert по (username, program_id):
username нет записи в users — emplace новой записью с одной программой в programs[];program_id ещё не подписан — push в programs[];program_id уже подписан — update version/draft_id/signed_at/doc_hash (повторная подпись = пересоглашение).| coopname | Кооператив (payer для записи users) |
| username | Пайщик, подписывающий соглашение |
| program_id | Идентификатор программы (см. soviet::programs) |
| document | Документ соглашения с подписями (только в action data, не в state) |
| draft_id | Идентификатор шаблона документа (см. draft::drafts) |
coopname (active) ИЛИ один из системных контрактов из contracts_whitelist (например, capital@active для inline-вызова из capital::regcontrib). В обоих случаях кооператив остаётся payer-ом записи wallet::users. Whitelist гарантирует атомарность связки «документ из payload → wallet::users.programs[] → реестр»: контракт не может разойтись, поскольку выполняет signagree в той же транзакции на тех же данных.