diff --git a/CMakeLists.txt b/CMakeLists.txt index a4d1569b57a0359b198421235be605b7842e5b58..6fcfcaeadd32770206d7e1f0811305468dec0f17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.7-0") +set(CELLFRAME_SDK_NATIVE_VERSION "2.7-1") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") @@ -123,10 +123,10 @@ if (CELLFRAME_MODULES MATCHES "srv-stake") set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_chain_net_srv_stake ) endif() -# Enable interchain exchange with BTC-like networks -if (CELLFRAME_MODULES MATCHES "inter-btc") - message("[+] Module 'inter-btc'") - set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_chain_inter_btc ) +# Enable bridge with BTC-like networks +if (CELLFRAME_MODULES MATCHES "bridge-btc") + message("[+] Module 'bridge-btc'") + set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_chain_bridge_btc ) endif() # Enable service for dynamic modules diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 2f0231172490309b3fee6d8515aecfd235fd4b46..2b3c7d0eac48806eefc2aa03b880687089a6ee4c 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -87,9 +87,9 @@ if (CELLFRAME_MODULES MATCHES "srv-stake") add_subdirectory(service/stake) endif() -# Interchaine communications with BTC-like networks -if (CELLFRAME_MODULES MATCHES "inter-btc") - add_subdirectory(inter/btc) +# Bridge communications with BTC-like networks +if (CELLFRAME_MODULES MATCHES "bridge-btc") + add_subdirectory(bridge/btc) endif() # Support for dynamic modules diff --git a/modules/inter/btc/CMakeLists.txt b/modules/bridge/btc/CMakeLists.txt similarity index 50% rename from modules/inter/btc/CMakeLists.txt rename to modules/bridge/btc/CMakeLists.txt index ea8db639932fe97acebd168cb15bf95bc20e3802..0da1a6cad9a34c00f697171fd1fd13461352c574 100644 --- a/modules/inter/btc/CMakeLists.txt +++ b/modules/bridge/btc/CMakeLists.txt @@ -1,10 +1,10 @@ -project (dap_chain_inter_btc) +project (dap_chain_bridge_btc) -file(GLOB DAP_CHAIN_INTER_BTC_SRCS *.c) +file(GLOB DAP_CHAIN_BRIDGE_BTC_SRCS *.c) -file(GLOB DAP_CHAIN_INTER_BTC_HEADERS include/*.h) +file(GLOB DAP_CHAIN_BRIDGE_BTC_HEADERS include/*.h) -add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_INTER_BTC_SRCS} ${DAP_CHAIN_INTER_BTC_HEADERS}) +add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_BRIDGE_BTC_SRCS} ${DAP_CHAIN_BRIDGE_BTC_HEADERS}) target_include_directories(dap_chain_crypto INTERFACE .) target_include_directories(${PROJECT_NAME} PUBLIC include) diff --git a/modules/bridge/btc/dap_chain_bridge_btc.c b/modules/bridge/btc/dap_chain_bridge_btc.c new file mode 100644 index 0000000000000000000000000000000000000000..fd0703e26f53348d3d537cdaa30c048ef26ac8dc --- /dev/null +++ b/modules/bridge/btc/dap_chain_bridge_btc.c @@ -0,0 +1,40 @@ +#include "dap_common.h" +#include "dap_config.h" +#include "dap_chain_net.h" +#include "dap_chain_bridge.h" +#include "dap_chain_bridge_btc.h" + +#define LOG_TAG "dap_chain_bridge_btc" + +typedef struct dap_chain_bridge_btc_pvt{ + dap_chain_net_t * net; + const char * profile; + const char * wallet; + const char * network; + double stake_min, stake_max; +} dap_chain_bridge_btc_pvt_t; + +static int s_bridge_callback_init(const char * a_bridge_name, dap_chain_net_t * a_net, dap_config_t * a_cfg); + +int dap_chain_bridge_btc_init() +{ + dap_chain_bridge_register("bridge-btc", s_bridge_callback_init); + return 0; +} + +void dap_chain_bridge_btc_deinit() +{ + +} + +static int s_bridge_callback_init(const char * a_bridge_name, dap_chain_net_t * a_net, dap_config_t * a_cfg) +{ + dap_chain_bridge_btc_pvt_t * l_btc_pvt = DAP_NEW_Z(dap_chain_bridge_btc_pvt_t); + l_btc_pvt->net = a_net; + l_btc_pvt->profile = dap_config_get_item_str_default(a_cfg , a_bridge_name , "profile","emercoin" ); + l_btc_pvt->wallet = dap_config_get_item_str(a_cfg , a_bridge_name , "wallet"); + l_btc_pvt->network = dap_config_get_item_str_default(a_cfg , a_bridge_name , "network", "testnet" ); + l_btc_pvt->stake_min = dap_config_get_item_double_default(a_cfg , a_bridge_name , "stake_min", -1.0); + l_btc_pvt->stake_max = dap_config_get_item_double_default(a_cfg , a_bridge_name , "stake_max", -1.0); + return 0; +} diff --git a/modules/inter/btc/include/dap_chain_inter_btc.h b/modules/bridge/btc/include/dap_chain_bridge_btc.h similarity index 93% rename from modules/inter/btc/include/dap_chain_inter_btc.h rename to modules/bridge/btc/include/dap_chain_bridge_btc.h index d5d9fec30e7d09bb43969c9e18ee518bca01faa6..d560ddb8d0147e41a83977352138828113e0b266 100644 --- a/modules/inter/btc/include/dap_chain_inter_btc.h +++ b/modules/bridge/btc/include/dap_chain_bridge_btc.h @@ -23,3 +23,6 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/licenses/>. */ #pragma once + +int dap_chain_bridge_btc_init(); +void dap_chain_bridge_btc_deinit(); diff --git a/modules/bridge/btc/share/in.satoshi.tpl b/modules/bridge/btc/share/in.satoshi.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c4d3b9027611891ce5b6674a73397cc088980e7a --- /dev/null +++ b/modules/bridge/btc/share/in.satoshi.tpl @@ -0,0 +1,9 @@ +{{for: i from 0 to $arbitr-count }} +OP_IF + <arbitr-{i}.public_key> + OP_CHECKSIGVERIFY + <1> +OP_ELSE + <2> +OP_ENDIF +{{endfor}} diff --git a/modules/inter/btc/share/out.satoshi.tpl b/modules/bridge/btc/share/out.satoshi.tpl similarity index 100% rename from modules/inter/btc/share/out.satoshi.tpl rename to modules/bridge/btc/share/out.satoshi.tpl diff --git a/modules/inter/btc/share/profiles/bitcoin-test.conf b/modules/bridge/btc/share/profiles/bitcoin-test.conf similarity index 100% rename from modules/inter/btc/share/profiles/bitcoin-test.conf rename to modules/bridge/btc/share/profiles/bitcoin-test.conf diff --git a/modules/inter/btc/share/profiles/bitcoin.conf b/modules/bridge/btc/share/profiles/bitcoin.conf similarity index 100% rename from modules/inter/btc/share/profiles/bitcoin.conf rename to modules/bridge/btc/share/profiles/bitcoin.conf diff --git a/modules/inter/btc/share/profiles/emercoin-test.conf b/modules/bridge/btc/share/profiles/emercoin-test.conf similarity index 100% rename from modules/inter/btc/share/profiles/emercoin-test.conf rename to modules/bridge/btc/share/profiles/emercoin-test.conf diff --git a/modules/inter/btc/share/profiles/emercoin.conf b/modules/bridge/btc/share/profiles/emercoin.conf similarity index 100% rename from modules/inter/btc/share/profiles/emercoin.conf rename to modules/bridge/btc/share/profiles/emercoin.conf diff --git a/modules/inter/btc/share/profiles/lightcoin-test.conf b/modules/bridge/btc/share/profiles/lightcoin-test.conf similarity index 100% rename from modules/inter/btc/share/profiles/lightcoin-test.conf rename to modules/bridge/btc/share/profiles/lightcoin-test.conf diff --git a/modules/inter/btc/share/profiles/lightcoin.conf b/modules/bridge/btc/share/profiles/lightcoin.conf similarity index 100% rename from modules/inter/btc/share/profiles/lightcoin.conf rename to modules/bridge/btc/share/profiles/lightcoin.conf diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c index db90df595e0f8f19ad47e9a1343ae0a7f30b59bd..b6bff2711e920200ecf38ff2404ce77533afa07c 100644 --- a/modules/chain/dap_chain.c +++ b/modules/chain/dap_chain.c @@ -36,6 +36,7 @@ #include "dap_cert.h" #include "dap_chain_cs.h" #include "dap_chain_vf.h" +#include "dap_chain_bridge.h" #include <uthash.h> #include <pthread.h> @@ -80,6 +81,8 @@ int dap_chain_init(void) dap_chain_cs_init(); dap_chain_vf_init(); + + dap_chain_bridge_init(); //dap_chain_show_hash_blocks_file(g_gold_hash_blocks_file); //dap_chain_show_hash_blocks_file(g_silver_hash_blocks_file); return 0; @@ -96,6 +99,14 @@ void dap_chain_deinit(void) dap_chain_delete(s_chain_items->chain); } pthread_rwlock_unlock(&s_chain_items_rwlock); + + + dap_chain_cs_deinit(); + + dap_chain_vf_deinit(); + + dap_chain_bridge_deinit(); + } /** diff --git a/modules/common/dap_chain_inter.c b/modules/common/dap_chain_inter.c deleted file mode 100644 index 5143d668f9037b1f38d36ea026e9cffc25899b39..0000000000000000000000000000000000000000 --- a/modules/common/dap_chain_inter.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Authors: - * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net> - * DeM Labs Inc. https://demlabs.net - * CellFrame https://cellframe.net - * Sources https://gitlab.demlabs.net/cellframe - * Copyright (c) 2020 - * All rights reserved. - - This file is part of CellFrame SDK the open source project - - CellFrame SDK is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - CellFrame SDK is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with any CellFrame SDK based project. If not, see <http://www.gnu.org/licenses/>. -*/ -#include "dap_chain_inter.h" - -#define LOG_TAG "dap_chain_inter" diff --git a/modules/inter/btc/dap_chain_inter_btc.c b/modules/inter/btc/dap_chain_inter_btc.c deleted file mode 100644 index 0b0aae6555ecaddccd32eb15fdda1da3230721c9..0000000000000000000000000000000000000000 --- a/modules/inter/btc/dap_chain_inter_btc.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "dap_common.h" -#include "dap_chain_inter.h" -#include "dap_chain_inter_btc.h" - -#define LOG_TAG "dap_chain_inter_btc" diff --git a/modules/inter/btc/share/in.satoshi.tpl b/modules/inter/btc/share/in.satoshi.tpl deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/modules/net/dap_chain_bridge.c b/modules/net/dap_chain_bridge.c new file mode 100644 index 0000000000000000000000000000000000000000..854b1394fa3ae698a2b13996952fb21ae8a9b864 --- /dev/null +++ b/modules/net/dap_chain_bridge.c @@ -0,0 +1,98 @@ +/* + * Authors: + * Dmitriy A. Gearasimov <gerasimov.dmitriy@demlabs.net> + * DeM Labs Inc. https://demlabs.net + * CellFrame https://cellframe.net + * Sources https://gitlab.demlabs.net/cellframe + * Copyright (c) 2020 + * All rights reserved. + + This file is part of CellFrame SDK the open source project + + CellFrame SDK is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CellFrame SDK is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with any CellFrame SDK based project. If not, see <http://www.gnu.org/licenses/>. +*/ +#include <assert.h> +#include "uthash.h" +#include "dap_common.h" +#include "dap_chain_bridge.h" + +#define LOG_TAG "dap_chain_bridge" +typedef struct bridge_item{ + char name[64]; + dap_chain_bridge_callback_init_t callback_init; + UT_hash_handle hh; +} bridge_item_t; + +static bridge_item_t * s_items = NULL; + +/** + * @brief dap_chain_bridge_init + * @return + */ +int dap_chain_bridge_init() +{ + return 0; +} + +/** + * @brief dap_chain_bridge_deinit + */ +void dap_chain_bridge_deinit() +{ + +} + +/** + * @brief dap_chain_bridge_register + * @param a_bridge_name + * @param a_callback_init + * @return + */ +int dap_chain_bridge_register(const char * a_bridge_name, dap_chain_bridge_callback_init_t a_callback_init ) +{ + bridge_item_t * l_item = NULL; + HASH_FIND_STR(s_items,a_bridge_name, l_item); + if (l_item) + return -1; + + l_item = DAP_NEW_Z(bridge_item_t); + strncpy( l_item->name,a_bridge_name,sizeof (l_item->name)-1); + l_item->callback_init = a_callback_init; + HASH_ADD_STR(s_items,name,l_item); + + return 0; +} + +/** + * @brief dap_chain_bridge_add + * @param a_bridge_name + * @param a_net + * @param a_net_config + * @return + */ +int dap_chain_bridge_add(const char * a_bridge_name, dap_chain_net_t * a_net, dap_config_t * a_net_config ) +{ + bridge_item_t * l_item = NULL; + HASH_FIND_STR(s_items, a_bridge_name, l_item); + if (!l_item){ + log_it(L_ERROR,"Can't find \"%s\" bridge", a_bridge_name); + return -1; + } + if (l_item->callback_init){ + log_it(L_ERROR,"Init callback for bridge name \"%s\" is NULL", a_bridge_name); + return -2; + } + l_item->callback_init(a_bridge_name,a_net, a_net_config); + return 0; +} diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 902d9619e992fe08c3422f2bfff8771bd4b8b306..9d4f07f31bb263194c2562a52663e333f73890cd 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -71,6 +71,7 @@ #include "dap_chain_node_cli.h" #include "dap_chain_node_cli_cmd.h" #include "dap_chain_ledger.h" +#include "dap_chain_bridge.h" #include "dap_chain_cs_none.h" #include "dap_chain_global_db.h" @@ -1754,6 +1755,11 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx) PVT(l_net)->load_mode = false; PVT(l_net)->flags |= F_DAP_CHAIN_NET_GO_SYNC; + bool l_bridge_btc_enabled = dap_config_get_item_bool_default(l_cfg , "bridge-btc" , "enabled",false ); + if ( l_bridge_btc_enabled){ + dap_chain_bridge_add ( "bridge-btc",l_net, l_cfg); + } + // Start the proc thread s_net_check_thread_start(l_net); log_it(L_NOTICE, "Сhain network \"%s\" initialized",l_net_item->name); diff --git a/modules/common/include/dap_chain_inter.h b/modules/net/include/dap_chain_bridge.h similarity index 67% rename from modules/common/include/dap_chain_inter.h rename to modules/net/include/dap_chain_bridge.h index d023c26b5153473ca64b1cb8b69b5f3f7c243bee..f85d136cba7ae8dfef55d11272940543c852c417 100644 --- a/modules/common/include/dap_chain_inter.h +++ b/modules/net/include/dap_chain_bridge.h @@ -20,3 +20,14 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/licenses/>. */ #pragma once + +#include "dap_config.h" +#include "dap_chain_net.h" + +int dap_chain_bridge_init(); +void dap_chain_bridge_deinit(); + +typedef int (*dap_chain_bridge_callback_init_t)(const char *,dap_chain_net_t * , dap_config_t *); + +int dap_chain_bridge_register(const char * a_bridge_name, dap_chain_bridge_callback_init_t a_callback_init); +int dap_chain_bridge_add(const char * a_bridge_name, dap_chain_net_t * a_net,dap_config_t * a_net_config );