COOPENOMICS  v1
Кооперативная Экономика
Класс wallet

Контракт Wallet управляет взносами и возвратами взносов по ЦПП "Цифровой Кошелёк". Подробнее...

#include <wallet.hpp>

Граф наследования:wallet:
coop_contract

Классы

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 управляет взносами и возвратами взносов по ЦПП "Цифровой Кошелёк".

Методы

◆ authwthd()

void wallet::authwthd ( AUTHWTHD_SIGNATURE  )

◆ cleanup()

void wallet::cleanup ( )

Очистка отработавших записей по правилам контракта (lib/core/cleanup.hpp); плейбук вызывает её на каждом деплое.

Очистка отработавших записей (lib/core/cleanup.hpp).

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

Заметки
Авторизация требуется от аккаунта контракта.

◆ completedpst()

void wallet::completedpst ( eosio::name  coopname,
checksum256  deposit_hash 
)

◆ completewthd()

void wallet::completewthd ( COMPLETEWTHD_SIGNATURE  )

◆ coop_contract()

coop_contract::coop_contract ( eosio::name  receiver,
eosio::name  code,
eosio::datastream< const char * >  ds 
)
inline

◆ createdpst()

void wallet::createdpst ( eosio::name  coopname,
eosio::name  username,
checksum256  deposit_hash,
eosio::asset  quantity 
)

◆ createwthd()

void wallet::createwthd ( eosio::name  coopname,
eosio::name  username,
checksum256  withdraw_hash,
eosio::asset  quantity,
document2  statement 
)

◆ declinedpst()

void wallet::declinedpst ( eosio::name  coopname,
checksum256  deposit_hash,
std::string  reason 
)

◆ declinewthd()

void wallet::declinewthd ( DECLINEWTHD_SIGNATURE  )

Отменяет процесс возврата средств в контракте wallet.

◆ importagree()

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)

◆ migrate()

void wallet::migrate ( )

◆ migrate3()

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)
Заметки
Auth: wallet@active (через get_self()) ИЛИ coopname@active. Первый путь — для централизованного migrator (раскатка из CI). Второй — для self-service backfill из контроллера кооператива (BlockchainService имеет WIF только coopname; для wallet@active отдельного ключа нет). Payer: тот, кто подал auth (wallet или сам кооператив).

◆ revokeagree()

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)

◆ signagree()

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 в той же транзакции на тех же данных.

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