8897a93e83
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) в одной транзакции.
70 lines
2.2 KiB
CMake
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()
|