[C28-33][@ant] fix(expense): программные расходы зеркалятся в БД и видны в списке

Парсер не был подписан на контракт `expense` (нет в subscribedContracts) →
дельты `expense::proposals` не эмитились → postgres-зеркало `expense_proposals`
оставалось пустым → список «Программных расходов пока нет», хотя на цепи СЗ и
резерв создавались. Добавил `expense` в subscribedContracts парсера.

Плюс: `coopname` добавлен явным полем в таблицу `proposals` контракта (struct +
EOSLIB_SERIALIZE + проставление в createexp) и в cooptypes IProposal. Таблица
scoped по coopname, но зеркало требует coopname в строке — дублируем полем по
канону (как capital/soviet), а не выводим из scope дельты.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
coopops
2026-06-11 17:28:16 +00:00
parent 0a3e1c97b7
commit 8b2b9893df
4 changed files with 5 additions and 1 deletions
@@ -99,6 +99,7 @@ void expense::createexp(name coopname, name username,
tbl.emplace(get_self(), [&](auto& row) {
row.id = tbl.available_primary_key();
row.coopname = coopname;
row.proposal_hash = proposal_hash;
row.username = username;
row.source_wallet = source_wallet;
+2 -1
View File
@@ -99,6 +99,7 @@ namespace ExpenseDomain {
*/
struct [[eosio::table, eosio::contract("expense")]] proposal {
uint64_t id;
eosio::name coopname; ///< кооператив (= scope таблицы; дублируем полем по канону)
eosio::checksum256 proposal_hash;
eosio::name username; ///< создатель
eosio::name source_wallet; ///< семантически — из какого ЦПП/фонда (w.cap.blago, w.sov.expns, …)
@@ -118,7 +119,7 @@ namespace ExpenseDomain {
uint64_t by_status() const { return static_cast<uint64_t>(status); }
EOSLIB_SERIALIZE(proposal,
(id)(proposal_hash)(username)(source_wallet)(status)
(id)(coopname)(proposal_hash)(username)(source_wallet)(status)
(items)(total_planned)(total_actual)(callback)(statement_doc)(decision_doc)
(created_at)(updated_at))
};
@@ -160,6 +160,7 @@ export interface IOverspendexp {
*/
export interface IProposal {
id: IUint64
coopname: IName
proposal_hash: IChecksum256
username: IName
source_wallet: IName
+1
View File
@@ -33,6 +33,7 @@ export const subscribedContracts: string[] = [
'ledger',
'ledger2',
'marketplace',
'expense',
]
// Автоматически генерируем действия для всех контрактов из списка