文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.2. 你好 BlockChain
获取Demo
- 登陆你的github并fork该项目:
git clone https://github.com/buckyos/chainDemo.git
- 克隆到本地:
git clone https://github.com/${YourGithubAccount}/chainDemo.git
${YourGithubAccount}
是你自己的github账户名。
- 进入demo目录:
cd chainDemo
构建Demo
- 安装Demo的node依赖库:
npm install
- 可以看到目录下创建了node_modules,可以查看package.json里依赖的node库,主要包括
- package.json里配置了依赖的ChainSDK库:
blockchain-sdk
- package.json里配置了依赖的gulp工具相关的库
- package.json里配置了
TypeScript
相关的node库,ChainSDK支持使用TypeScript
或原生JavaScript
编写DApp。
- package.json里配置了依赖的ChainSDK库:
- 可以看到目录下创建了node_modules,可以查看package.json里依赖的node库,主要包括
- 使用gulp编译:
gulp build
- 可以看到根目录下自动创建了
dist
子目录,把src/coin
,src/coin2
等DApp源码编译到了dist/coin
,dist/coin2
。
- 可以看到根目录下自动创建了
Hello BlockChain
src目录下内置了几个完整的BlockChain示例,例如src/coin
目录下是一个完整的基于chainSDK开发的使用PoW
共识机制的BlockChain DApp。ChainSDK是一链一应用的机制,完整运行src/coin
,即构建了一条独立的BlockChain。
现在,我们就来快速地把src/coin
这个BlockChain DApp跑起来!
创建创世块(genesis
)
- 打开一个终端,进入到chainDemo所在目录
- 创建创世块:
node run.js -chain coin -session create
- 可以看到根目录下多了一个
data
子目录,并且创建了coin的数据目录:data/coin/
,创世块数据存储在data/coin/genesis
下。
运行挖矿(miner
)节点
一个BlockChain上有不同类型的节点,最基本的有挖矿节点,同步节点,以及钱包客户端,首先运行一个挖矿节点。
- 单独打开一个终端,进入到chainDemo所在目录
- 启动挖矿节点:
node run.js -chain coin -session miner
- 可以看到类似如下的挖矿日志信息:
2018-11-15T12:17:05.057Z - info: broadcast tip headers from number: 340 hash: 450bc23f399996a6dc2f392b34226d0c3b0750da516b469dc9cb841b8843b7dc to number: 346 hash: 97c7ef9f5bf4f1212a022c20dff5558c9271ffff137dde92fe6049bee1cef5de chain.js:992 2018-11-15T12:17:05.067Z - info: begin execute block 347 block.js:61 2018-11-15T12:17:05.073Z - info: runblock time====6, count=0 block.js:32 2018-11-15T12:17:05.074Z - info: begin mine Block (347) miner.js:44 2018-11-15T12:17:05.075Z - debug: update header storage cache hash: 97c7ef9f5bf4f1212a022c20dff5558c9271ffff137dde92fe6049bee1cef5de number: 346 verified: 1 header_storage.js:179 worker params {\"data\":{\"type\":\"Buffer\",\"data\":[91,1,0,0,193,99,237,91,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,187,129,21,233,158,137,53,192,22,39,46,51,24,198,203,43,158,192,2,233,198,89,47,131,118,61,80,122,242,213,46,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,199,239,159,91,244,241,33,42,2,44,32,223,245,85,140,146,113,255,255,19,125,222,146,254,96,73,190,225,206,245,222,34,49,50,76,75,106,102,103,81,87,50,54,100,81,90,77,120,99,74,100,107,106,50,105,86,80,50,114,116,74,83,122,84,56,56,255,255,0,31,0,0,0,0,0,0,0,0]},\"nonce\":{\"start\":0,\"end\":4294967295},\"nonce1\":{\"start\":0,\"end\":4294967295}} 2018-11-15T12:17:06.511Z - info: mined Block (347) target 520159231 : d14b239522735010fdb8b41388ae71158f8ed1188cb47ec725de130b4e9ec817 miner.js:59
注意:不要关闭挖矿节点。
运行同步节点(Peer):
- 单独打开一个终端,进入到chainDemo所在目录
- 启动同步节点:
node run.js -chain coin -session peer
- 可以看到类似如下的同步日志信息:
2018-11-15T12:28:34.675Z - info: begin recycle snanshot log_snapshot_manager.js:28 2018-11-15T12:28:34.676Z - info: load chain tip from disk, height:331, hash:0236c7fe9f98c67dca6e160b3e99ec69ba6f4b6bb5266646528fb893a6a8eb00 chain.js:505 2018-11-15T12:28:34.678Z - debug: [network: default peerid: localhost:12313] initialOutbounds random_outbound_network.js:47 2018-11-15T12:28:34.696Z - debug: [network: default peerid: localhost:12313] will connect to peers from node storage: Set { 'localhost:12312' } random_outbound_network.js:72 2018-11-15T12:28:34.697Z - debug: [network: default peerid: localhost:12313] cannot find any peers, ignore connect. random_outbound_network.js:99 2018-11-15T12:28:34.740Z - debug: emit tipBlock with 0236c7fe9f98c67dca6e160b3e99ec69ba6f4b6bb5266646528fb893a6a8eb00 331 chain.js:1080 2018-11-15T12:28:34.747Z - info: chain initialized success, tip number: 331 hash: 0236c7fe9f98c67dca6e160b3e99ec69ba6f4b6bb5266646528fb893a6a8eb00 chain.js:430
注意:不要关闭同步节点。
运行钱包节点(wallet):
- 单独打开一个终端,进入到chainDemo所在目录
- 启动钱包客户端:
node run.js -chain coin -session wallet
- 可以看到钱包客户端执行了一个函数
chain.getBalance()
,获取到了钱包的余额信息3780000
:chain.getBalance() (node:77296) [DEP0025] DeprecationWarning: sys is deprecated. Use util instead. 3780000
- 钱包客户端是一个交互式命令行,可以交互式执行chain的其他函数来查询信息或者发送交易(
Transaction
).- 交互式命令行下输入
help
查看wallet提供的chain方法。
- 交互式命令行下输入
run.js的可选选项
- 指定
-show
选项,可以只输出即将要执行的命令本身,而不真正执行,便于开发者理解最终执行的命令行及其参数。 - 指定
--forceclean
选项,可以强制清空对应操作的数据- 例如,希望只清空miner的数据:
node run.js -chain coin -session miner --forceclean
- 例如,希望创世块、miner、peer、wallet全部都重新执行,则应该每个操作都带
--forceclean
再执行一遍:node run.js -chain coin -session create --forceclean
node run.js -chain coin -session miner --forceclean
node run.js -chain coin -session peer --forceclean
node run.js -chain coin -session wallet --forceclean
- 或者直接删除
data/coin
目录重置
- 例如,希望只清空miner的数据:
啊哈!BlockChain
Amazing! 恭喜你,成功创建了一条BlockChain,这条BlockChain上运行了你独有的DApp,这就是一链一应用的魔力。想必你已经迫不及待地要更进一步了解DApp的细节了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论