您现在的位置是:网站首页> 内容页

Chainsql使用相关笔记

  • 老子有钱账号注册
  • 2019-03-12
  • 369人已阅读
简介安装    按照github上chainsql的安装过程,这里主要介绍区块网络搭建过程(4个验证节点,其中只有一个节点[10.11.6.120]配置了数据库):  1、根据官方文

安装

       按照githubchainsql的安装过程,这里主要介绍区块网络搭建过程(4个验证节点,其中只有一个节点[10.11.6.120]配置了数据库):

  1、根据官方文档上配置文件的案例,修改chainsql.cfg这里要注意peer,rpc,wss_admin,wss_public的端口配置,如下案例中4个节点的配置,其中一个节点的配置信息如下:

#端口配置列表[server]port_rpc_admin_localport_peerport_ws_admin_local#http端口配置[port_rpc_admin_local]port = 5005ip = 127.0.0.1admin = 127.0.0.1protocol = http#peer端口配置,用于p2p节点发现[port_peer]port = 51235ip = 0.0.0.0protocol = peer#websocket端口配置[port_ws_admin_local]port = 6006ip = 127.0.0.1admin = 127.0.0.1protocol = ws

 其余的配置信息部分如下:

#对等连接的其他主机的ip,以及对于的peer端口设置[ips_fixed] 10.11.6.116 5123610.11.6.117 5123710.11.6.118 51238

 还有要注意的是,就是sync_db注意在centos下要修改unix_socket的配置。以及auto_sync开启设为1。

2、执行./chainsqld --conf="./ chainsqld-example.cfg"  validation_create生成相应的validators、validation_seed(密钥)、validation_public_key(公钥),内容如下。将这些生成的内容加入chainsql.cfg中。其他四个节点也依此配置。

{ "id" : 1, "result" : { "status" : "success", "validation_key" : "OTT SOME DEE WOVE EAT SOME QUOD KUDO NIP HOW LEER HOSE", "validation_private_key" : "pcvYu2QigM37t2jGar6EJSsRSdsV7H63R2Ae52WTZycZqNseT8a", "validation_public_key" : "n9KnRfJ3wnCF8WaGmhf3EENSfMxc3KyWLzEKXmnP5pssZkci53DV", "validation_seed" : "xxSm9kEKBDqrrfskWJV8wXRc6izLQ" }}

 根据文档中结构网络完成后,四个节点都启动后可以查看其他节点的运行情况,成功配置后节点的运行情况如下图所示:watch ./chainsqld peers。

对chainsql 数据库的操作

     按照chainsql的使用说明进行操作,去github上下载node-chain-sql,在package.json的dependencies中添加“chainsql":"^0.6.20”。执行 然后执行npm install命令和npm install chainsql --save,如果第二个语句执行不成功,则将执行语句换成npm install chainsql --save --force。要注意的是使用说明中一些测死案例是在node7.6的版本的基础上去使用的, 如果版本错误,会出现一些符号错误的问题(如await等异步同步问题)。

   1、创建用户

           根据文档说明,首先要创建根用户,通过根账户(文档中说明了根账户如何创建)向新建的账户转账,才能激活新账户,创建账户的代码如下,其中owner是生成的根账户信息:  

"use strict";const ChainsqlAPI = require("chainsql").ChainsqlAPI;const c = new ChainsqlAPI();var owner = { secret: "xnoPBzXtMeMyMHUVTgbuqAfg1SUTb", address: "zHb9CJAWyB4zj91VRWn96DkukG4bwdtyTh"}//var user ={// secret: "xx26wgq6XbnTLrNgDn21dqjBMsD38",// address: "zp7mxMmrDwAGQqPeSBpT5wKaM4RpGaKWeW"//}let account = c.generateAddress();console.log(account)c.connect("ws://127.0.0.1:6006").then( ()=>{ console.log("连接成功") c.as(owner); //这里owner指一个有足够zxc的账户,第一个转账操作肯定要用根账户 let ret = c.pay(account.address,100000000).then((ret)=>{ console.log(ret); })});

  输出结果为tesSUCCESS 说明提交成功。

2、创建数据库,以及往数据库中插入数据

    根据官方的使用说明,可以根据以下的案例,其中的user是刚才激活的新账户。

"use strict";const ChainsqlAPI = require("chainsql").ChainsqlAPI;const r = new ChainsqlAPI();var user = { secret: "xpiCV45NQ3bRxPJvmjBgkTLPwMqAC", address: "zNn8qGS3spd8vyRJ88NpymiGEqKxvxgikY", publicKey: "cBQFdZcmk5xsbqN8yPvk1Ay9L4PrgviGwcHxzoT7gN2XRtfqXzRR"}r.connect("ws://127.0.0.1:6006", function(err, data) { if (err) { console.log("连接失败. "); return } console.log("连接成功"); r.as(user); r.createTable("dc_universe", [ { "field":"id", "type":"int", "length":11, "PK":1, "NN":1, "UQ":1 }, { "field":"name", "type":"varchar", "length":50, "default":null }, { "field":"age", "type":"int" }] ).submit(); r.table("dc_universe").insert({id:1, name: "peera",age: 22},{id:2, name: "peerb",age: 21}).submit(); getLedger();});function getLedger() { r.getLedger({ ledgerVersion: 22 }, function(err, data) { console.log(err, data) })}

  一次性向数据库的表中插入多条数据,同时查看交易信息,可以根据以下的案例进行测试,这个user是另外激活的新账户,与上面不同:

"use strict";const ChainsqlAPI = require("chainsql").ChainsqlAPI;const c = new ChainsqlAPI();var root = { secret: "xnoPBzXtMeMyMHUVTgbuqAfg1SUTb", address: "zHb9CJAWyB4zj91VRWn96DkukG4bwdtyTh"}var user ={ secret: "xx26wgq6XbnTLrNgDn21dqjBMsD38", address: "zp7mxMmrDwAGQqPeSBpT5wKaM4RpGaKWeW"}c.connect("ws://127.0.0.1:6006").then( async ()=>{ console.log("连接成功") c.as(root); //这里owner指一个有足够zxc的账户,第一个转账操作肯定要用根账户 c.setRestrict(false); // var raw=[ { id: 61, name: "peer61", age: 71 },{ id: 62, name: "peer62", age: 72 }]; var raw=[]; for(var i=62;i<67;i++){ raw.push({"id":i, "name": "peer"+i,"age": i+10}); // var raw=[{id:15+i, name: "gqx"+i,age: 23+i}]; // console.log(raw); // c.table("dc_universe").insert(raw).submit({expect:"db_success"}); } // console.log(raw); // var raw=[// {"id":7, "name": "gqx11","age": 25},// {"id":8, "name": "gqx22","age": 45}, // {"id":9, "name": "gqx33","age": 64} // ] // var rs=await c.table("dc_universe").insert(raw).submit({expect:"db_success"}); // console.log(rs); var opt = {limit:200} c.getTransactions("zp7mxMmrDwAGQqPeSBpT5wKaM4RpGaKWeW",opt,callback);});function callback(err,data){ if(err){ console.error(err); }else{ console.log(JSON.stringify(data)); }}

  最后,要注意一些问题,比如官方文档的说明中有些错误,比如插入数据的格式问题,还有架设网络的第二步中检查是否成功,只需要在chainsql目录中执行(centOs)watch ./chainsqld server_info等等。还有要注意插入数据时,插入数据的操作者要有足够的费用去支持插入的行为,否则即使插入不成功,也不会出现错误信息,很难发现错误。

, 1, 0, 9);

文章评论

Top