区块链中间件——BWMare V1.0C++SDK使用说明

BMWare向区块链应用提供统一的API接口,使得用户随时切换区块链底层技术平台,无需考虑它们的编程语言、设计风格、适用场景、后续发展、存在的风险和技术不确定性。

同时,BMWare还提供了开发的SDK,可以供开发者快速开发区块链应用。

以下是BMWareV1.0C++ SDK使用说明:

1.准备工作

1)     需要下载对中间件C++SDK包。

2)     以下代码都是示例代码,调用每个接口都会返回一个JSON数据,数据包含错误码等信息,错误码为0表示请求接口成功,否则失败.在范例中使用的UniValve是来源于开源项目(bitcoin)中的一种JSON解析包,如有更适合你的JSON解析包,可以将其替换。

3)     示例代码中各接口中的传入参数都是必须的,不能少,可以根据需求增加自定义参数。

2.加载动态库

首先需要加载中间件SDK对应平台的动态库,本例以Win10 + VS2015为例,示例代码如下:

static HINSTANCEg_hDll = 0;

if(!LoadDll("BLMWareDevSDK.dll", g_hDll)) //加载动态库"BLMWareDevSDK.dll"

{

printf("load BLMWareDevSDK failed!\n");

return false;

}

程序使用结束后,需要释放动态库资源

void UnLoadDll(HINSTANCE&hDll)

{

                  if(!hDll)

                           return;

                  FreeLibrary(hDll);

}

3获取Token

获取动态库中获取Token对应的函数指针,并调用该函数.示例代码如下:

typedef BLMWAREDEVSDK_APIstd::string(*getTokenFunc)(const std::string& strAppId, conststd::string& strAppKey); // "获取Token"的接口原型

static string g_strToken;

bool TestGetToken()

{

getTokenFunc func = NULL;

                   if(!g_hDll || !(func = (getTokenFunc)GetProcAddress(g_hDll,"getToken"))) //指向"获取Token"接口: getToken

                   {

                            printf("cann'tget function from dll\n");

                            returnfalse;

                   }

                  

                   stringstrResponse = func(g_strAppId, g_strAppKey); //调用"获取Token"接口,并保存返回的JSON数据

                   if(strResponse.empty())

                   {

                            printf("getTokenfailed\n");

                            returnfalse;

                   }

                   //printf("getToken: %s\n", strResponse.data());

                  

                   UniValuejResponse;

                   if(!jResponse.read(strResponse)) //解析JSON数据,可以根据个人方便更换JSON解析包

                   {

                            printf("parsegetToken result failed\n");

                            returnfalse;

                   }

                  

                   if(!CheckErrCode(jResponse)) //根据错误码判断请求"获取Token"接口是否成功

                            returnfalse;

                  

                   g_strToken= jResponse["data"]["token"].getValStr(); //保存全局的Token,方便下面的接口使用

                   if(g_strToken.empty())

                   {

                            printf("getTokenreturn error\n");

                            returnfalse;

                   }

                  

                   printf("token:%s\n", g_strToken.data());

                   returntrue;

}

资产管理包括资产发行、转让、查询等。有价值的、可转让的数据我们称之为资产,比如积分、数字货币、单据、征信、保险、贷款等等。目前有资产发行、资产转让这两种获得方式,开发者可以自行组合出许多种应用场景,如数字货币发行和转让;提货单发行与转让;甚至可以同时发行代币和积分,并且在一定汇率下进行兑换等。

4.发行资产

获取动态库中发行资产对应的函数指针,并调用该函数.示例代码如下:

typedefBLMWAREDEVSDK_API std::string(*issueFunc)(const std::string& strToken,const std::string& strBlockChainId, const std::string& strCallMode,const std::string& strPassword, const std::string& strBLAddress, conststd::string& strAssetName, const std::string& strAssetUnit, conststd::string& strAssetQuantity, const std::string& strAssetDesc, conststd::string& strMetadata); // "发行资产"的接口原型

boolTestIssue(const string& strToken, const string strBlockChainId, const string&strCallMode, const string& strPassword, const string& strAddress, conststring& strAssetName, const string& strAssetUnit, const string&strAssetQuantity, const string& strAssetDesc, const string& strMetadata, string& strAssetId, string& strTxId)

{

          issueFunc func = NULL;

          if (!g_hDll || !(func =(issueFunc)GetProcAddress(g_hDll, "issue"))) //指向"发行资产"接口: issue

          {

                    printf("cann't getfunction from dll\n");

                    return false;

          }

         

          string strResponse = func(strToken,strBlockChainId, strCallMode, strPassword, strAddress, strAssetName,strAssetUnit, strAssetQuantity, strAssetDesc, strMetadata); //调用"发行资产"接口,并保存返回的JSON数据

          if (strResponse.empty())

          {

                    printf("issuefailed\n");

                    return false;

          }

         

          UniValue jResponse;

          if (!jResponse.read(strResponse)) //解析JSON数据

          {

                    printf("parse issueresult failed\n");

                    return false;

          }

         

          if (!CheckErrCode(jResponse)) //根据错误码判断请求"发行资产"接口是否成功

                    return false;

         

          strAssetId =jResponse["data"]["assetId"].getValStr();

          strTxId = jResponse["data"]["txId"].getValStr();

          if (strAssetId.empty() ||strTxId.empty())

          {

                    printf("issue returnerror\n");

                    return false;

          }

 

          printf("asestId: %s\n",strAssetId.data());

          printf("txId: %s\n",strTxId.data());

          return true;

}

5.转让资产

获取动态库中转让资产对应的函数指针,并调用该函数.示例代码如下:

typedefBLMWAREDEVSDK_API std::string(*transferFunc)(const std::string& strToken,const std::string& strBlockChainId, const std::string& strCallMode,const std::string& strPassword, const std::string& strFromBLAddress, conststd::string& strToBLAddress, const std::string& strAssetId, conststd::string& strAssetQuantity, const std::string& strMetadata); //"转让资产"的接口原型

boolTestTransfer(const string& strToken, const string& strBlockChainId,const string& strCallMode, const string& strPassword, const string&strSenderAddress, const string& strRecverAddress, const string&strAssetId, const string& strAssetQuantity, const string& strMetadata,string& strTxId)

{

          transferFunc func = NULL;

          if (!g_hDll || !(func = (transferFunc)GetProcAddress(g_hDll,"transfer"))) //指向"转让资产"接口: transfer

          {

                    printf("cann't getfunction from dll\n");

                    return false;

          }

 

          string strResponse = func(strToken,strBlockChainId, strCallMode, strPassword, strSenderAddress, strRecverAddress,strAssetId, strAssetQuantity, strMetadata); //调用"转让资产"接口,并保存返回的JSON数据

          if (strResponse.empty())

          {

                    printf("transferfailed\n");

                    return false;

          }

         

          UniValue jResponse;

if (!jResponse.read(strResponse)) //解析JSON数据

          {

                    printf("parse transferresult failed\n");

                    return false;

          }

         

          if (!CheckErrCode(jResponse)) //根据错误码判断请求"转让资产"接口是否成功

                    return false;

         

          strTxId = jResponse["data"]["txId"].getValStr();

          if (strTxId.empty())

          {

                    printf("transfer returnerror\n");

                    return false;

          }

         

          printf("txId: %s\n",strTxId.data());

          return true;

}

想获取更多技术相关信息

欢迎关注官方微信bankledger

扫码即可关注

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值