diff --git a/.gitmodules b/.gitmodules index f4a671349c424ab6d76f4631eeb21b064283c341..d3c26ccb903d2d8ccd29aca2ebd8d92380ec38bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,66 @@ path = libdap-crypto-python url = https://gitlab.demlabs.net/cellframe/libdap-crypto-python.git branch = features-2466 +[submodule "libdap-chain-python"] + path = libdap-chain-python + url = https://gitlab.demlabs.net/cellframe/libdap-chain-python.git +[submodule "libdap-chain"] + path = libdap-chain + url = https://gitlab.demlabs.net/cellframe/libdap-chain.git +[submodule "libdap-chain-crypto"] + path = libdap-chain-crypto + url = https://gitlab.demlabs.net/cellframe/libdap-chain-crypto.git +[submodule "libdap-chain-gdb"] + path = libdap-chain-gdb + url = https://gitlab.demlabs.net/cellframe/libdap-chain-gdb.git +[submodule "libdap-chain-global-db"] + path = libdap-chain-global-db + url = https://gitlab.demlabs.net/cellframe/libdap-chain-global-db.git +[submodule "libdap-chain-mempool"] + path = libdap-chain-mempool + url = https://gitlab.demlabs.net/cellframe/libdap-chain-mempool.git +[submodule "libdap-chain-net"] + path = libdap-chain-net + url = https://gitlab.demlabs.net/cellframe/libdap-chain-net.git +[submodule "libdap-chain-net-srv"] + path = libdap-chain-net-srv + url = https://gitlab.demlabs.net/cellframe/libdap-chain-net-srv.git +[submodule "libdap-chain-net-srv-vpn"] + path = libdap-chain-net-srv-vpn + url = https://gitlab.demlabs.net/cellframe/libdap-chain-net-srv-vpn.git +[submodule "libdap-chain-wallet"] + path = libdap-chain-wallet + url = https://gitlab.demlabs.net/cellframe/libdap-chain-wallet.git +[submodule "libdap-client"] + path = libdap-client + url = https://gitlab.demlabs.net/cellframe/libdap-client.git +[submodule "libdap-crypto"] + path = libdap-crypto + url = https://gitlab.demlabs.net/cellframe/libdap-crypto.git +[submodule "libdap-server"] + path = libdap-server + url = https://gitlab.demlabs.net/cellframe/libdap-server.git +[submodule "libdap-server-core"] + path = libdap-server-core + url = https://gitlab.demlabs.net/cellframe/libdap-server-core.git +[submodule "libdap-server-http-db-auth"] + path = libdap-server-http-db-auth + url = https://gitlab.demlabs.net/cellframe/libdap-server-http-db-auth.git +[submodule "libdap-server-udp"] + path = libdap-server-udp + url = https://gitlab.demlabs.net/cellframe/libdap-server-udp.git +[submodule "libdap-stream"] + path = libdap-stream + url = https://gitlab.demlabs.net/cellframe/libdap-stream.git +[submodule "libdap-stream-ch"] + path = libdap-stream-ch + url = https://gitlab.demlabs.net/cellframe/libdap-stream-ch.git +[submodule "libdap-stream-ch-chain"] + path = libdap-stream-ch-chain + url = https://gitlab.demlabs.net/cellframe/libdap-stream-ch-chain.git +[submodule "libdap-stream-ch-chain-net"] + path = libdap-stream-ch-chain-net + url = https://gitlab.demlabs.net/cellframe/libdap-stream-ch-chain-net.git +[submodule "libdap-server-http-db"] + path = libdap-server-http-db + url = http://gitlab.demlabs.net/cellframe/libdap-server-http-db.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 173b4819fbc4afbc820ff4275d7d05539c2311df..ef90638032a28dffab49ad58466a4148a7e56d06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,12 +6,64 @@ set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_C_STANDARD 11) set(SUBMODULES_NO_BUILD ON) +if (UNIX) + add_definitions("-DDAP_OS_UNIX") +endif() + +add_definitions("-DDAP_LOG_MT") +add_definitions("-DNODE_NETNAME=\"cellframe\"") +add_definitions("-DDAP_APP_NAME=\"pythonCellframe\"") + add_subdirectory(libdap) +target_compile_options(dap_core PRIVATE "-fpic") +add_subdirectory(libdap-crypto) +target_compile_options(dap_crypto PRIVATE "-fpic") +add_subdirectory(libdap-chain) +target_compile_options(dap_chain PRIVATE "-fpic") +add_subdirectory(libdap-chain-crypto) +add_subdirectory(libdap-chain-wallet) +target_compile_options(dap_chain_wallet PRIVATE "-fpic" ) +target_compile_options(dap_chain_crypto PRIVATE "-fpic" ) +add_subdirectory(libdap-chain-mempool) +target_compile_options(dap_chain_mempool PRIVATE "-fpic" ) +add_subdirectory(libdap-chain-net) +target_compile_options(dap_chain_net PRIVATE "-fpic" ) +add_subdirectory(libdap-server-core) +target_compile_options(dap_server_core PRIVATE "-fpic" ) +add_subdirectory(libdap-server-core-python) +add_subdirectory(libdap-chain-global-db) +target_compile_options(dap_chain_global_db PRIVATE "-fpic" ) +add_subdirectory(libdap-client) +target_compile_options(dap_client PRIVATE "-fpic" ) +add_subdirectory(libdap-server) +#target_compile_options(libdap-server PRIVATE "-fpic" ) +add_subdirectory(libdap-stream) +target_compile_options(dap_stream PRIVATE "-fpic" ) +add_subdirectory(libdap-stream-ch) +target_compile_options(dap_stream_ch PRIVATE "-fpic" ) +add_subdirectory(libdap-stream-ch-chain-net) +target_compile_options(dap_stream_ch_chain_net PRIVATE "-fpic" ) +add_subdirectory(libdap-stream-ch-chain) +target_compile_options(dap_stream_ch_chain PRIVATE "-fpic" ) +add_subdirectory(libdap-server-udp) +target_compile_options(dap_udp_server PRIVATE "-fpic" ) +add_subdirectory(libdap-chain-net-srv) +target_compile_options(dap_chain_net_srv PRIVATE "-fpic" ) +add_subdirectory(libdap-server-http-db-auth) +add_subdirectory(libdap-chain-net-srv-vpn) +target_compile_options(dap_chain_net_srv_vpn PRIVATE "-fpic" ) +target_compile_options(dap_server_http_db_auth PRIVATE "-fpic" ) +add_subdirectory(libdap-chain-gdb) +target_compile_options(dap_chain_gdb PRIVATE "-fpic" ) add_subdirectory(libdap-python) +target_compile_options(dap_python_module PRIVATE "-fpic" ) add_subdirectory(libdap-crypto-python) -add_subdirectory(libdap-server-core-python) -#add_subdirectory(libdap) -#add_subdirectory(libdap-crypto) +target_compile_options(dap_crypto_python_module PRIVATE "-fpic" ) +add_subdirectory(libdap-server-http-db) +target_compile_options(dap_server_http_db PRIVATE "-fpic") + +add_subdirectory(libdap-chain-python) +target_compile_options(dap_chain_python_module PRIVATE "-fpic") file(GLOB PYTHON_CELLFRAME_SRCS src/*.c) file(GLOB PYTHON_CELLFRAME_HEADERS include/*.h) @@ -66,6 +118,7 @@ endif() target_link_libraries(${PROJECT_NAME} dap_python_module dap_crypto_python_module DapServerCore + dap_chain_python_module ) #target_link_libraries(${PROJECT_NAME} dap_core dap_crypto) diff --git a/include/python-cellframe.h b/include/python-cellframe.h index df1b7ca7a29a215a7508836d45ddf5ff8eb84c73..cc02a5fb9e46238eabfee7714e6d8f2462a7b93f 100644 --- a/include/python-cellframe.h +++ b/include/python-cellframe.h @@ -5,6 +5,19 @@ #include "libdap-server-core-python.h" #include "libdap_crypto_key_type_python.h" #include "libdap_crypto_data_type.h" +// === CHAIN == +#include "libdap-chain-python.h" +#include "libdap_chain_type_python.h" +#include "libdap_chain_atom_iter_python.h" +#include "wrapping_dap_chain_cell.h" +#include "wrapping_dap_chain_common.h" +#include "wrapping_dap_chain_common_objects.h" +#include "wrapping_dap_chain_cs.h" +#include "wrapping_dap_chain_datum.h" +#include "wrapping_dap_chain_datum_token.h" +#include "wrapping_dap_chain_datum_tx.h" +#include "wrapping_dap_chain_ledger.h" +// ============ #include "dap_common.h" @@ -16,6 +29,7 @@ extern "C" { #define LOG_TAG "python-cellframe" static bool init_crypto; +static bool init_chain; static PyObject* CellFrame_error; diff --git a/libdap b/libdap index d6b17b0bc60ae9c7015edd0a74523c43d9d5a628..1c0614797a3a2a2f4c179630025600e177637a65 160000 --- a/libdap +++ b/libdap @@ -1 +1 @@ -Subproject commit d6b17b0bc60ae9c7015edd0a74523c43d9d5a628 +Subproject commit 1c0614797a3a2a2f4c179630025600e177637a65 diff --git a/libdap-chain b/libdap-chain new file mode 160000 index 0000000000000000000000000000000000000000..d7166bf173223fb027d248ccb7c2df7288a8433b --- /dev/null +++ b/libdap-chain @@ -0,0 +1 @@ +Subproject commit d7166bf173223fb027d248ccb7c2df7288a8433b diff --git a/libdap-chain-crypto b/libdap-chain-crypto new file mode 160000 index 0000000000000000000000000000000000000000..f8dfd888432234c0314057f5551a578dd770003c --- /dev/null +++ b/libdap-chain-crypto @@ -0,0 +1 @@ +Subproject commit f8dfd888432234c0314057f5551a578dd770003c diff --git a/libdap-chain-gdb b/libdap-chain-gdb new file mode 160000 index 0000000000000000000000000000000000000000..e9d57285c3d2383e13e1d949935628cb56c694cc --- /dev/null +++ b/libdap-chain-gdb @@ -0,0 +1 @@ +Subproject commit e9d57285c3d2383e13e1d949935628cb56c694cc diff --git a/libdap-chain-global-db b/libdap-chain-global-db new file mode 160000 index 0000000000000000000000000000000000000000..8c6bbf4458bd10614bf48bb2da7e84b4f80f0d33 --- /dev/null +++ b/libdap-chain-global-db @@ -0,0 +1 @@ +Subproject commit 8c6bbf4458bd10614bf48bb2da7e84b4f80f0d33 diff --git a/libdap-chain-mempool b/libdap-chain-mempool new file mode 160000 index 0000000000000000000000000000000000000000..4bbdcf60e10de8462820e45d7cc3715dca4c2139 --- /dev/null +++ b/libdap-chain-mempool @@ -0,0 +1 @@ +Subproject commit 4bbdcf60e10de8462820e45d7cc3715dca4c2139 diff --git a/libdap-chain-net b/libdap-chain-net new file mode 160000 index 0000000000000000000000000000000000000000..c285d7ca6385dd480b0168c5a7e380b85e0327db --- /dev/null +++ b/libdap-chain-net @@ -0,0 +1 @@ +Subproject commit c285d7ca6385dd480b0168c5a7e380b85e0327db diff --git a/libdap-chain-net-srv b/libdap-chain-net-srv new file mode 160000 index 0000000000000000000000000000000000000000..5edea70af6a5ede0c759e9d83a5741376f4da9fb --- /dev/null +++ b/libdap-chain-net-srv @@ -0,0 +1 @@ +Subproject commit 5edea70af6a5ede0c759e9d83a5741376f4da9fb diff --git a/libdap-chain-net-srv-vpn b/libdap-chain-net-srv-vpn new file mode 160000 index 0000000000000000000000000000000000000000..5d22d6242694b003694ea5130be2383761880551 --- /dev/null +++ b/libdap-chain-net-srv-vpn @@ -0,0 +1 @@ +Subproject commit 5d22d6242694b003694ea5130be2383761880551 diff --git a/libdap-chain-python b/libdap-chain-python new file mode 160000 index 0000000000000000000000000000000000000000..4bbc01ce9a5878c155a67e7cd36535419e360a54 --- /dev/null +++ b/libdap-chain-python @@ -0,0 +1 @@ +Subproject commit 4bbc01ce9a5878c155a67e7cd36535419e360a54 diff --git a/libdap-chain-wallet b/libdap-chain-wallet new file mode 160000 index 0000000000000000000000000000000000000000..5273ba5ba0a15dd94e680f9d961ab150f3764848 --- /dev/null +++ b/libdap-chain-wallet @@ -0,0 +1 @@ +Subproject commit 5273ba5ba0a15dd94e680f9d961ab150f3764848 diff --git a/libdap-client b/libdap-client new file mode 160000 index 0000000000000000000000000000000000000000..d3f5458f352294547b1ac68404d5ccdc8dea28ba --- /dev/null +++ b/libdap-client @@ -0,0 +1 @@ +Subproject commit d3f5458f352294547b1ac68404d5ccdc8dea28ba diff --git a/libdap-crypto b/libdap-crypto new file mode 160000 index 0000000000000000000000000000000000000000..d9337dda7db1b3430d17914b4e290b9a200045a2 --- /dev/null +++ b/libdap-crypto @@ -0,0 +1 @@ +Subproject commit d9337dda7db1b3430d17914b4e290b9a200045a2 diff --git a/libdap-crypto-python b/libdap-crypto-python index edd62ffc6b588b3bc877833e3585960b192b83d0..e0fef50bbe630c2835020fbebf3bcdfe064255a8 160000 --- a/libdap-crypto-python +++ b/libdap-crypto-python @@ -1 +1 @@ -Subproject commit edd62ffc6b588b3bc877833e3585960b192b83d0 +Subproject commit e0fef50bbe630c2835020fbebf3bcdfe064255a8 diff --git a/libdap-python b/libdap-python index 0cddffd9bcbf28646ef996473e25d45852417f6a..4a15aca686aa56313f8ef8157c7d0aba7c9d7154 160000 --- a/libdap-python +++ b/libdap-python @@ -1 +1 @@ -Subproject commit 0cddffd9bcbf28646ef996473e25d45852417f6a +Subproject commit 4a15aca686aa56313f8ef8157c7d0aba7c9d7154 diff --git a/libdap-server b/libdap-server new file mode 160000 index 0000000000000000000000000000000000000000..e3f07ae78aaecfada9f44abdd48a4ebbce9e2184 --- /dev/null +++ b/libdap-server @@ -0,0 +1 @@ +Subproject commit e3f07ae78aaecfada9f44abdd48a4ebbce9e2184 diff --git a/libdap-server-core b/libdap-server-core new file mode 160000 index 0000000000000000000000000000000000000000..73a86ef8202ee67a05098d186aac2deacb207f63 --- /dev/null +++ b/libdap-server-core @@ -0,0 +1 @@ +Subproject commit 73a86ef8202ee67a05098d186aac2deacb207f63 diff --git a/libdap-server-core-python b/libdap-server-core-python index f6f2041893f5bf0a9ffccbdf8d94d25fec8987c0..fa0c59dac96fe133b53c56c6f6c5f1473566fc9e 160000 --- a/libdap-server-core-python +++ b/libdap-server-core-python @@ -1 +1 @@ -Subproject commit f6f2041893f5bf0a9ffccbdf8d94d25fec8987c0 +Subproject commit fa0c59dac96fe133b53c56c6f6c5f1473566fc9e diff --git a/libdap-server-http-db b/libdap-server-http-db new file mode 160000 index 0000000000000000000000000000000000000000..f3f0b0ed919d37368e86210940ebb9de686879a1 --- /dev/null +++ b/libdap-server-http-db @@ -0,0 +1 @@ +Subproject commit f3f0b0ed919d37368e86210940ebb9de686879a1 diff --git a/libdap-server-http-db-auth b/libdap-server-http-db-auth new file mode 160000 index 0000000000000000000000000000000000000000..cf0d3043d2003690b0f8d92aab8f193671a4d6db --- /dev/null +++ b/libdap-server-http-db-auth @@ -0,0 +1 @@ +Subproject commit cf0d3043d2003690b0f8d92aab8f193671a4d6db diff --git a/libdap-server-udp b/libdap-server-udp new file mode 160000 index 0000000000000000000000000000000000000000..a14daa6c39aed9bba32684872d03afc7778db61e --- /dev/null +++ b/libdap-server-udp @@ -0,0 +1 @@ +Subproject commit a14daa6c39aed9bba32684872d03afc7778db61e diff --git a/libdap-stream b/libdap-stream new file mode 160000 index 0000000000000000000000000000000000000000..5fd18ccdb08cf8f35b0ab7eed857387433bddbbb --- /dev/null +++ b/libdap-stream @@ -0,0 +1 @@ +Subproject commit 5fd18ccdb08cf8f35b0ab7eed857387433bddbbb diff --git a/libdap-stream-ch b/libdap-stream-ch new file mode 160000 index 0000000000000000000000000000000000000000..daeb35e4680f659d41ade4da7514138e56278685 --- /dev/null +++ b/libdap-stream-ch @@ -0,0 +1 @@ +Subproject commit daeb35e4680f659d41ade4da7514138e56278685 diff --git a/libdap-stream-ch-chain b/libdap-stream-ch-chain new file mode 160000 index 0000000000000000000000000000000000000000..5dcf99b114a8fc1b48d124feba528e0b9f413cd1 --- /dev/null +++ b/libdap-stream-ch-chain @@ -0,0 +1 @@ +Subproject commit 5dcf99b114a8fc1b48d124feba528e0b9f413cd1 diff --git a/libdap-stream-ch-chain-net b/libdap-stream-ch-chain-net new file mode 160000 index 0000000000000000000000000000000000000000..6875d05d0d3c3da2c9562b4840f48a5267e865ca --- /dev/null +++ b/libdap-stream-ch-chain-net @@ -0,0 +1 @@ +Subproject commit 6875d05d0d3c3da2c9562b4840f48a5267e865ca diff --git a/src/python-cellframe.c b/src/python-cellframe.c index 1fd7abf735c70f5c883add35f5ee775ecdf9fbf9..5e525c79b930e15a0aaa191c6d470b4cb32c87c4 100644 --- a/src/python-cellframe.c +++ b/src/python-cellframe.c @@ -95,6 +95,18 @@ static PyObject *python_cellframe_init(PyObject *self, PyObject *args){ return NULL; } } + if (strcmp(c_value, "Chain") == 0){ + if(init_chain_py() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize Chain. " + "Fields thread_cnt and conn are not numerical or absent."); + return NULL; + } + if (dap_chain_cs_init_py() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize Chain CS. " + "Fields thread_cnt and conn are not numerical or absent."); + return NULL; + } + } } return PyLong_FromLong(0); } @@ -105,7 +117,35 @@ PyMODINIT_FUNC PyInit_CellFrame(void){ PyType_Ready(&ServerCore_ServerCoreType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0 || PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0 || PyType_Ready(&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType) < 0 || - PyType_Ready(&CryptoDataTypeObjecy_CryptoDataTypeObjecyType) < 0) + PyType_Ready(&CryptoDataTypeObjecy_CryptoDataTypeObjecyType) < 0 || + // === Chain === + PyType_Ready(&dapChainObject_dapChainType) < 0 || + PyType_Ready(&dapChainTypeObject_dapChainTypeType) < 0 || + PyType_Ready(&dapChainAtomPtr_dapChainAtomPtrType) < 0 || + PyType_Ready(&DapChainCell_DapChainCellObjectType) < 0 || + PyType_Ready(&ChainCommonObject_ChainCommonType) < 0 || + + PyType_Ready(&DapChainIdObject_DapChainIdObjectType) < 0 || + PyType_Ready(&DapChainCellIdObject_DapChainCellIdObjectType) < 0 || + PyType_Ready(&DapChainNodeAddrObject_DapChainNodeAddrObjectType) < 0 || + PyType_Ready(&DapChainHashSlowObject_DapChainHashSlowObjectType) < 0 || + PyType_Ready(&DapChainHashFastObject_DapChainHashFastObjectType) < 0 || + PyType_Ready(&DapChainHashSlowKindObject_DapChainHashSlowKindObjectType) < 0 || + PyType_Ready(&DapChainAddrObject_DapChainAddrObjectType) < 0 || + + PyType_Ready(&DapChainCsObject_DapChainCsObjectType) < 0 || + PyType_Ready(&DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType) < 0 || + PyType_Ready(&DapChainDatumObject_DapChainDatumObjectType) < 0 || + PyType_Ready(&DapChainDatumIterObject_DapChainDatumIterObjectType) < 0 || + PyType_Ready(&DapChainDatumToken_DapChainDatumTokenObjectType) < 0 || + PyType_Ready(&DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType) < 0 || + PyType_Ready(&DapChainTxItemObject_DapChainTxItemTypeObjectType) < 0 || + PyType_Ready(&DapChainTxType_DapChainTxCondTypeObject) < 0 || + PyType_Ready(&DapChainDatumTx_DapChainDatumTxObjectType) < 0 || + PyType_Ready(&DapChainTxOutCond_DapChainTxOutCondObjectType) < 0 || + PyType_Ready(&DapChainLedger_DapChainLedgerType) < 0 + // ============= + ) return NULL; PyObject *module = PyModule_Create(&CellFramePythonModule); @@ -131,6 +171,35 @@ PyMODINIT_FUNC PyInit_CellFrame(void){ PyModule_AddObject(module, "CryptoKeyType", (PyObject*)&CryptoKeyTypeObjecy_CryptoKeyTypeObjecyType); PyModule_AddObject(module, "CryptoDataType", (PyObject*)&CryptoDataTypeObjecy_CryptoDataTypeObjecyType); + // === Chain === + PyModule_AddObject(module, "Chain", (PyObject*)&dapChainObject_dapChainType); + PyModule_AddObject(module, "ChainType", (PyObject*)&dapChainTypeObject_dapChainTypeType); + PyModule_AddObject(module, "ChainAtomIter", (PyObject*)&dapChainAtomPtr_dapChainAtomPtrType); + PyModule_AddObject(module, "ChainCell", (PyObject*)&DapChainCell_DapChainCellObjectType); + PyModule_AddObject(module, "ChainCommon", (PyObject*)&ChainCommonObject_ChainCommonType); + + PyModule_AddObject(module, "ChainID", (PyObject*)&DapChainIdObject_DapChainIdObjectType); + PyModule_AddObject(module, "ChainCellID", (PyObject*)&DapChainCellIdObject_DapChainCellIdObjectType); + PyModule_AddObject(module, "ChainNodeAddr", (PyObject*)&DapChainNodeAddrObject_DapChainNodeAddrObjectType); +// PyModule_AddObject(module, "ChainNetID", (PyObject*)&DapChainNetIdObject_DapChainNetIdObjectType); + PyModule_AddObject(module, "ChainHashSlow", (PyObject*)&DapChainHashSlowObject_DapChainHashSlowObjectType); + PyModule_AddObject(module, "ChainHashFast", (PyObject*)&DapChainHashFastObject_DapChainHashFastObjectType); + PyModule_AddObject(module, "ChainHashSlowKind", (PyObject*)&DapChainHashSlowKindObject_DapChainHashSlowKindObjectType); + PyModule_AddObject(module, "ChainAddr", (PyObject*)&DapChainAddrObject_DapChainAddrObjectType); + + PyModule_AddObject(module, "ChainCS", (PyObject*)&DapChainCsObject_DapChainCsObjectType); + PyModule_AddObject(module, "ChainDatumTypeID", (PyObject*)&DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType); + PyModule_AddObject(module, "ChainDatum", (PyObject*)&DapChainDatumObject_DapChainDatumObjectType); + PyModule_AddObject(module, "ChainDatumIter", (PyObject*)&DapChainDatumIterObject_DapChainDatumIterObjectType); + PyModule_AddObject(module, "ChainDatumToken", (PyObject*)&DapChainDatumToken_DapChainDatumTokenObjectType); + PyModule_AddObject(module, "ChainDatumTokenEmisson", (PyObject*)&DapChainDatumTokenEmission_DapChainDatumTokenEmissionObjectType); + PyModule_AddObject(module, "ChainTxItemType", (PyObject*)&DapChainTxItemObject_DapChainTxItemTypeObjectType); + PyModule_AddObject(module, "ChainTxCondType", (PyObject*)&DapChainTxType_DapChainTxCondTypeObject); + PyModule_AddObject(module, "ChainDatumTx", (PyObject*)&DapChainDatumTx_DapChainDatumTxObjectType); + PyModule_AddObject(module, "ChainTxOutCond", (PyObject*)&DapChainTxOutCond_DapChainTxOutCondObjectType); + PyModule_AddObject(module, "ChainLedger", (PyObject*)&DapChainLedger_DapChainLedgerType); + // ============= + return module; } @@ -140,6 +209,10 @@ static PyObject *python_cellframe_deinit(PyObject *self, PyObject *args){ dap_config_deinit(); if (init_crypto) dap_crypto_deinit(); + if (init_chain){ + deinit_chain_py(); + dap_chain_cs_deinit_py(); + } return PyLong_FromLong(0); }