Skip to content
Snippets Groups Projects
Commit 80a73e4e authored by Dmitriy A. Gerasimov's avatar Dmitriy A. Gerasimov
Browse files

[!] Inter->bridge

[+] Bridges infrastructure
parent 6a99ae22
No related branches found
No related tags found
No related merge requests found
Pipeline #6171 passed with stage
in 14 seconds
Showing
with 190 additions and 17 deletions
......@@ -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
......
......@@ -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
......
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)
......
#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;
}
......@@ -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();
{{for: i from 0 to $arbitr-count }}
OP_IF
<arbitr-{i}.public_key>
OP_CHECKSIGVERIFY
<1>
OP_ELSE
<2>
OP_ENDIF
{{endfor}}
......@@ -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();
}
/**
......
#include "dap_common.h"
#include "dap_chain_inter.h"
#include "dap_chain_inter_btc.h"
#define LOG_TAG "dap_chain_inter_btc"
......@@ -22,6 +22,77 @@
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"
#include <assert.h>
#include "uthash.h"
#include "dap_common.h"
#include "dap_chain_bridge.h"
#define LOG_TAG "dap_chain_inter"
#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;
}
......@@ -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);
......
......@@ -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 );
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment