Files
coopops 8897a93e83
Typecheck / desktop (pull_request) Successful in 13m4s
Typecheck / controller (pull_request) Successful in 12m44s
[C28-29][@ant] feat(contracts): новый контракт expense — 8 actions, шасси расходов
components/contracts/cpp/expense/:
- expense.hpp: 1 таблица proposals (scope=coopname; secondary by_hash/by_username/by_status),
  типы item, callback_handler, enum Mechanics/RecipientType/ProposalStatus/ItemStatus.
- expense.cpp: 8 actions (createexp/authexp/declexp/payexp/reportexp/closeexp/returnexp/overspendexp).
- CMakeLists.txt: стандартный add_contract(expense expense expense.cpp).

components/contracts/cpp/lib/consts.hpp:
- _expense = expense_n + добавлен в contracts_whitelist.

components/contracts/CMakeLists.txt:
- add_contract_build(expense).

Принцип v3:
- Один процесс p.exp.expns, 5 ledger2 operation_codes (o.exp.{blgadv,blgdir,advrpt,advret,over}).
- createexp принимает operation_code+source_wallet+callback в payload — контракт агностичен к источнику.
- payexp на DIRECT-механике сразу помечает item REPORTED (BURN blago = один полный шаг).
- payexp на ADVANCE — отдельный reportexp пайщиком после чека.
- closeexp шлёт inline action на сохранённый callback (contract,action,data) если он непустой.
- overspendexp — две последовательные Ledger2::apply (OVERSPEND + ADVANCE_REPORT) в одной транзакции.
2026-06-02 18:17:12 +00:00

70 lines
2.2 KiB
CMake

cmake_minimum_required(VERSION 3.5)
project(coopenomics)
include(ExternalProject)
# Опция для тестового режима
option(IS_TESTNET "Build for testnet" OFF)
# Определяем режим сборки
if(IS_TESTNET)
set(BUILD_MODE "TESTNET")
else()
set(BUILD_MODE "PRODUCTION")
endif()
# Распечатываем информацию о сборке
message(STATUS "=== BUILDING CONTRACTS IN ${BUILD_MODE} MODE ===")
message(STATUS "Initial BUILD_TARGET=${BUILD_TARGET}")
message(STATUS "IS_TESTNET=${IS_TESTNET}")
# Макрос для сборки контрактов с диагностическими сообщениями
macro(add_contract_build name)
string(STRIP "${BUILD_TARGET}" BUILD_TARGET_STRIPPED)
string(STRIP "${name}" NAME_STRIPPED)
if(NOT BUILD_TARGET_STRIPPED OR BUILD_TARGET_STRIPPED STREQUAL NAME_STRIPPED)
message(STATUS "COMPILING ${name} CONTRACT (IS_TESTNET=${IS_TESTNET})")
ExternalProject_Add(
${name}_contract
SOURCE_DIR ${CMAKE_SOURCE_DIR}/cpp/${name}
BINARY_DIR ${CMAKE_BINARY_DIR}/contracts/${name}
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=/cdt/build/lib/cmake/cdt/CDTWasmToolchain.cmake -DIS_TESTNET=${IS_TESTNET}
UPDATE_COMMAND ""
PATCH_COMMAND ""
TEST_COMMAND ""
INSTALL_COMMAND ""
BUILD_ALWAYS 1
)
else()
message(STATUS "SKIPPING ${name} CONTRACT")
endif()
endmacro()
# Добавляем все контракты
add_contract_build(test)
add_contract_build(ledger)
add_contract_build(ledger2)
add_contract_build(meet)
add_contract_build(loan)
add_contract_build(wallet)
add_contract_build(capital)
add_contract_build(branch)
add_contract_build(contributor)
add_contract_build(fund)
add_contract_build(draft)
add_contract_build(soviet)
add_contract_build(registrator)
add_contract_build(gateway)
add_contract_build(marketplace)
add_contract_build(apps)
add_contract_build(expense)
add_contract_build(system)
# Опции для тестов
option(BUILD_TESTS "Build unit tests" OFF)
if(BUILD_TESTS)
add_subdirectory(${CMAKE_SOURCE_DIR}/cpp/tests ${CMAKE_BINARY_DIR}/contracts/tests)
endif()