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

Плательщик за оперативную память строки таблицы. Подробнее...

Классы

struct  class_of
 

Определения типов

template<typename Table >
using row_t = std::decay_t< decltype(*std::declval< const Table & >().cbegin())>
 

Перечисления

enum class  Class : uint8_t { cooperative , contract , system }
 

Функции

template<typename Table >
eosio::name cooperative_or_contract (const Table &table, eosio::name coopname)
 
template<typename Table >
eosio::name of (const Table &table, eosio::name coopname)
 
template<typename Table >
eosio::name of (const Table &table)
 

Подробное описание

Плательщик за оперативную память строки таблицы.

Оперативную память цепи оплачивает тот аккаунт, чьё имя передано в emplace или modify. Плательщик меняется при каждом изменении строки и остаётся тем, чьим именем её изменили последней. Пока имя передавалось в каждом месте вручную, одна и та же сущность оказывалась то на кооперативе, то на контракте, то на человеке: в registrator.accounts 43 % строк оплачивали кооперативы, за строки советов платило физическое лицо (C28-78, 20.09.2026).

Правило одно. Кооператив оплачивает свой бизнес-процесс — документы и их проведение: заявления, решения, акты, заказы, возвраты, взносы, собрания, проекты в работе. Всё остальное — счётчики, настройки, реестры, советы, кошельки, соглашения, аккаунты, договоры участия — оплачивает контракт.

Класс объявляется один раз у структуры строки макросом RAM_PAYER_CLASS, а каждый emplace и modify берёт плательщика только через RamPayer::of. Первичного определения у class_of нет намеренно: таблица без объявленного класса не соберётся, так что забыть правило для новой таблицы нельзя. Сообщения static_assert написаны латиницей: компилятор печатает кириллицу восьмеричными кодами, и разработчик не прочёл бы, что сломалось.

Строка, записанная до этого правила, переходит к правильному плательщику сама при следующем modify — отдельная миграция не нужна.

Кооператив может оплатить строку, только если подписал действие: цепь списывает память лишь с того, кто авторизовал запись. Часть действий приходит служебным вызовом — колбэком по решению совета, исполнением другого контракта, — и кооператив их не подписывает. В таком вызове за бизнес-процесс кооператива платит контракт. Жёсткое «платит кооператив» роняло бы эти транзакции отказом цепи.

Типы

◆ row_t

template<typename Table >
using RamPayer::row_t = typedef std::decay_t<decltype(*std::declval<const Table &>().cbegin())>

Тип строки таблицы. Выводится разыменованием итератора, поэтому работает и для самой таблицы, и для её вторичного индекса — modify бывает у обоих.

Перечисления

◆ Class

enum class RamPayer::Class : uint8_t
strong
Элементы перечислений
cooperative 

Бизнес-процесс кооператива: платит кооператив.

contract 

Служебное хранение: платит контракт — владелец таблицы.

system 

Общее для всей сети: платит системный аккаунт. Так хранится реестр шаблонов документов — он один на все кооперативы и ни одному из них не принадлежит. Если система действие не подписала, платит контракт.

Функции

◆ cooperative_or_contract()

template<typename Table >
eosio::name RamPayer::cooperative_or_contract ( const Table &  table,
eosio::name  coopname 
)
inline

Кооператив, если он подписал действие; иначе контракт — владелец таблицы.

◆ of() [1/2]

template<typename Table >
eosio::name RamPayer::of ( const Table &  table)
inline

Плательщик за строку служебной таблицы, где кооператив не участвует (реестры, счётчики, каталог приложений). Для таблиц бизнес-процесса эта форма запрещена — там нужен кооператив.

◆ of() [2/2]

template<typename Table >
eosio::name RamPayer::of ( const Table &  table,
eosio::name  coopname 
)
inline

Плательщик за строку таблицы.

Аргументы
tableтаблица, в которую пишется строка; контракт-плательщик — её владелец
coopnameкооператив, чей бизнес-процесс создаёт запись