注意:由于Data-Export組件暫時(shí)只支持Fisco-Bcos 2.x系列(這個(gè)也是目前使用最多最穩(wěn)定的系列),故這里使用的是目前最新的Fisco-Bcos 2.x。
Fisco-Bcos鏈環(huán)境搭建
區(qū)塊鏈網(wǎng)絡(luò)部署
主要一步步按照這個(gè)官方的操作即可區(qū)塊鏈網(wǎng)絡(luò)搭建
環(huán)境為Ubuntu18.04,java版本要使用及11以上的,按照官網(wǎng)教程在ubuntu18.04下默認(rèn)安裝的應(yīng)該就是java11。
區(qū)塊鏈應(yīng)用部署
官網(wǎng)示例部署
大部分參考區(qū)塊鏈應(yīng)用部署
第一個(gè)小坑:如果想偷懶有寫好的應(yīng)用的話,如官網(wǎng)給的示例
$ cd ~/fisco
$ curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/asset-app.tar.gz
# 解壓得到Java工程項(xiàng)目asset-app
$ tar -zxf asset-app.tar.gz
使用是需要配置SDK證書,也就是執(zhí)行如下指令
# 假設(shè)我們將asset-app放在~/fisco目錄下 進(jìn)入~/fisco目錄
$ cd ~/fisco
# 創(chuàng)建放置證書的文件夾
$ mkdir -p asset-app/src/test/resources/conf
# 拷貝節(jié)點(diǎn)證書到項(xiàng)目的資源目錄
$ cp -r nodes/127.0.0.1/sdk/* asset-app/src/test/resources/conf
修改應(yīng)用部署
以下是對(duì)官網(wǎng)資產(chǎn)交易的示例的修改
主要修改為交易時(shí)可以添加備注,效果如圖
修改步驟如下:
- 首先修改智能合約,主要對(duì)合約中的轉(zhuǎn)賬函數(shù)修改,此步驟為官網(wǎng)步驟開發(fā)第一個(gè)區(qū)塊鏈應(yīng)用的第二個(gè)步驟-設(shè)計(jì)與開發(fā)智能合約部分
修改后的代碼如下
/*
描述 : 資產(chǎn)轉(zhuǎn)移
參數(shù) :
from_account : 轉(zhuǎn)移資產(chǎn)賬戶
to_account : 接收資產(chǎn)賬戶
amount : 轉(zhuǎn)移金額
comments :備注
返回值:
0 資產(chǎn)轉(zhuǎn)移成功
-1 轉(zhuǎn)移資產(chǎn)賬戶不存在
-2 接收資產(chǎn)賬戶不存在
-3 金額不足
-4 金額溢出
-5 其他錯(cuò)誤
修改:主要修改參數(shù)部分,增加comments字段
*/
function transfer(string memory from_account, string memory to_account, uint256 amount, string memory comments) public returns(int256) {
// 查詢轉(zhuǎn)移資產(chǎn)賬戶信息
int ret_code = 0;
int256 ret = 0;
uint256 from_asset_value = 0;
uint256 to_asset_value = 0;
//string comments = 0;
// 轉(zhuǎn)移賬戶是否存在?
(ret, from_asset_value) = select(from_account);
if(ret != 0) {
ret_code = -1;
// 轉(zhuǎn)移賬戶不存在
emit TransferEvent(ret_code, from_account, to_account, amount, comments);
return ret_code;
}
// 接受賬戶是否存在?
(ret, to_asset_value) = select(to_account);
if(ret != 0) {
ret_code = -2;
// 接收資產(chǎn)的賬戶不存在
emit TransferEvent(ret_code, from_account, to_account, amount, comments);
return ret_code;
}
if(from_asset_value < amount) {
ret_code = -3;
// 轉(zhuǎn)移資產(chǎn)的賬戶金額不足
emit TransferEvent(ret_code, from_account, to_account, amount, comments);
return ret_code;
}
if (to_asset_value + amount < to_asset_value) {
ret_code = -4;
// 接收賬戶金額溢出
emit TransferEvent(ret_code, from_account, to_account, amount, comments);
return ret_code;
}
Table table = openTable();
Entry entry0 = table.newEntry();
entry0.set("account", from_account);
entry0.set("asset_value", int256(from_asset_value - amount));
// 更新轉(zhuǎn)賬賬戶
int count = table.update(from_account, entry0, table.newCondition());
if(count != 1) {
ret_code = -5;
// 失敗? 無權(quán)限或者其他錯(cuò)誤?
emit TransferEvent(ret_code, from_account, to_account, amount, comments);
return ret_code;
}
Entry entry1 = table.newEntry();
entry1.set("account", to_account);
entry1.set("asset_value", int256(to_asset_value + amount));
// 更新接收賬戶
table.update(to_account, entry1, table.newCondition());
emit TransferEvent(ret_code, from_account, to_account, amount,comments);
return ret_code;
}
}
此小節(jié)其余步驟與官網(wǎng)無異,套用和編譯即可
- 接著是對(duì)調(diào)用代碼AssetClient.java的修改,它位于
/src/main/java/org/fisco/bcos/asset/client
目錄下,主要也是對(duì)轉(zhuǎn)賬函數(shù)以及main函數(shù)參數(shù)調(diào)用處的修改,此步驟為官網(wǎng)步驟開發(fā)第一個(gè)區(qū)塊鏈應(yīng)用的第四個(gè)步驟-創(chuàng)建區(qū)塊鏈應(yīng)用項(xiàng)目部分的。修改代碼如下,
//轉(zhuǎn)賬部分修改,主要修改參數(shù)部分,增加comment字段
public void transferAsset(String fromAssetAccount, String toAssetAccount, BigInteger amount,String comments) {
//System.out.println(comments);
try {
String contractAddress = loadAssetAddr();
Asset asset = Asset.load(contractAddress, client, cryptoKeyPair);
TransactionReceipt receipt = asset.transfer(fromAssetAccount, toAssetAccount, amount, comments);
List<Asset.TransferEventEventResponse> response = asset.getTransferEventEvents(receipt);
if (!response.isEmpty()) {
if (response.get(0).ret.compareTo(new BigInteger("0")) == 0) {
//System.out.println(comments);
System.out.printf(
" transfer success => from_asset: %s, to_asset: %s, amount: %s ,comments: %s\n",
fromAssetAccount, toAssetAccount, amount , comments);
} else {
System.out.printf(
" transfer asset account failed, ret code is %s \n", response.get(0).ret.toString());
}
} else {
System.out.println(" event log not found, maybe transaction not exec. ");
}
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
logger.error(" registerAssetAccount exception, error message is {}", e.getMessage());
System.out.printf(" register asset account failed, error message is %s\n", e.getMessage());
}
}
//main 函數(shù)參數(shù)調(diào)用修改
public static void main(String[] args) throws Exception {
if (args.length < 1) {
Usage();
}
AssetClient client = new AssetClient();
client.initialize();
switch (args[0]) {
case "deploy":
client.deployAssetAndRecordAddr();
break;
case "query":
if (args.length < 2) {
Usage();
}
client.queryAssetAmount(args[1]);
break;
case "register":
if (args.length < 3) {
Usage();
}
client.registerAssetAccount(args[1], new BigInteger(args[2]));
break;
case "transfer":
if (args.length < 5) {
Usage();
}
client.transferAsset(args[1], args[2], new BigInteger(args[3]),args[4]);
break;
default:
{
Usage();
}
}
System.exit(0);
}
然后usage這些就自行修改。
- 改個(gè)小bug
注意:整體修改完成后的時(shí)候出現(xiàn)過一個(gè)小bug,就是comments字段如果輸入的英文字符串中間帶有空格的話,將會(huì)丟失第一個(gè)空格之后的所有內(nèi)容。如上圖,若comments輸入的內(nèi)容為"Hello World",存入鏈上的數(shù)據(jù)將會(huì)是"Hello。原因在于,java執(zhí)行帶有參數(shù)的時(shí)候會(huì)將空格之后的視為另一個(gè)參數(shù)。
經(jīng)多次測試,若想解決這個(gè)問題,需要對(duì)asset_run.sh做如下修改。將最后一行的$@
修改為"$@"
,同時(shí)需要java版本為11及以上(1.8有bug)文章來源:http://www.zghlxwxcb.cn/news/detail-763574.html
Data-Export數(shù)據(jù)導(dǎo)出系統(tǒng)安裝
再次提醒,此組件只支持FISCO-BCOS 2.x 版本,官網(wǎng)的步驟數(shù)據(jù)導(dǎo)出系統(tǒng)
然后要說的是按照官網(wǎng)這個(gè)流程是失敗了的,原因暫時(shí)未知,嘗試過切換多種版本java,嘗試過更換數(shù)據(jù)庫(官網(wǎng)用的是Mariadb)都無果。。。
于是采用的第二個(gè)辦法,通過docker快速部署,參考docker快速部署
注意:通過這個(gè)部署后的mysql端口是3307,另外啟用服務(wù)的時(shí)候要先啟動(dòng)鏈
如果一切運(yùn)行正常,你將得到數(shù)據(jù)庫結(jié)構(gòu)如下
有關(guān)交易的細(xì)節(jié)在tx_receipt_raw_data的input字段里。
Over!Over!文章來源地址http://www.zghlxwxcb.cn/news/detail-763574.html
到了這里,關(guān)于Fisco-Bcos的環(huán)境搭建及Data-Export導(dǎo)出組件的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!