区块链中间件——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
扫码即可关注