教程网

您现在的位置是: 首页 > 项目

区块链开发环境的搭建和选择详细分析

区块链开发环境的搭建和选择详细分析
不管任何的一套新的系统,在开发前总是要琢磨一番。看看用什么开发语言,用什么系统环境开发等等,这些对于程序员来说都是比较重要的。今年,随着区块链概念的持续火热,很多人也关注

不管任何的一套新的系统,在开发前总是要琢磨一番。看看用什么开发语言,用什么系统环境开发等等,这些对于程序员来说都是比较重要的。今年,随着区块链概念的持续火热,很多人也关注起来了。但是,对于没接触过区块链的程序员来说,实在有些吃力。光那个区块链结构模型都要费好长时间去研究,更别说其它比较深入的。为此,整理了一些关于区块链开发环境的内容(以太坊为例)作为参考。

一、搭建私有链环境

1、go-ETHereum客户端

以太坊有许多不同语言的客户端实现,包括C++, Go, Python, Java, Haskell等等。为什么需要这么多实现?不同的实现能满足不同的需求(例如Haskell实现的目标是可以被数学验证),能使以太坊更加安全,能丰富整个生态系统。一般使用的是Go语言实现的客户端geth,该客户端也是官方推荐使用的客户端,稳定性较好,并且资料相对较多。

安装命令:打开终端窗口,依次输入命令。

安装测试:安装完成后在终端输入命令。如果显示出各种参数提示信息,则说明安装成功。

2、创世块

在以上安装成功之后,直接启动,即可连接公有链。现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。创建一个eth的根目录,在根目录下新建创世块json文件piccgenesis.json。

3、启动私有链节点

启动终端进入配置好的创世块文件目录。 输入命令初始化创世块。输入命令启动以太坊私有链。

注意:添加—dev 表示以开发模式启动。私有链数据存储的目录要与公有链分开。

二、Truffle开发框架搭建

Truffle是以太坊最受欢迎的一个开发框架,它帮你处理掉大量无关紧要的小事情,让你可以迅速的进入写代码-编译-部署-测试-打包Dapp这么一个较成熟的开发流程。下面简要介绍如何搭建truffle开发框架。

1、git安装

在安装truffle之前需要核实一下本机是否安装Git程序。后面的程序安装需要依赖git。 输入命令,安装测试。

2、下载安装

终端输入命令。安装完成之后,创建软连接,使之可以全局使用。安装测试:显示truffle版本信息,安装成功。至此,区块链开发环境搭建完成,可以通过该开发环境开发出区块链的Dapp。

三、Node.js环境搭建

由于以太坊开发框架truffle的安装需要依赖于node.js中的npm命令,下文简要介绍以下node.js的安装过程。

1、依赖安装

安装nodeJS之前,如果没有安装g++及 libssl-dev,则先要安装好

2、nodejs安装

第一步,解压

第二步:为node和npm建立两个软连接,使之可以全局运行:(第一个路径为安装程序所在路径)

第三步:安装测试

输出版本号node -v,npm -v说明安装成功。

友情提示

1、目前搭建区块链开发环境还是比较复杂,推荐使用Mac OS X和Linux操作系统,目前不建议使用Windows,可能会碰到各种各样的问题,最后导致放弃。

2、安装软件的时候,尽量使用ubuntu系统官方的apt源。由于国内很多公司,例如阿里,网易,腾讯等都免费提供apt源,在有的时候当然可以加快我们安装软件的速度。

3、在使用npm安装某些软件的时候,建议不要使用cnpm国内镜像,否则装完可能会出现问题。

以太坊本地私有链开发环境搭建!通过本文所述方法和项目中的脚本,我们可以快速的搭建好自己的私链进行开发测试。

仓库中包含的工具有:

一个测试账户导入脚本,在首次部署时将五个测试账户私钥导入以太坊节点。

一个genesis.json配置文件,为对应的五个测试账户提供初始资金(以太币),方便开发测试。

一个快速启动私有链节点并进入交互模式的脚本。

一个合约样例:contracts/Token.sol。这是一个使用合约语言Solidity编写的智能合约。Token合约的功能是发行一种token(可以理解为货币,积分等等),只有合约的创建者有发行权,token的拥有者有使用权,并且可以自由转账。

测试账户私钥是放在Github上的公开数据,千万不要用于正式环境中或者公有链上。如果在测试环境之外的地方使用这些私钥,你的资金将会被窃取!

准备

在本地安装好go-ethereum和solc, 可以执行geth和solc命令。如果操作系统是ubuntu, 安装官方的ethereum安装包即可。

将本仓库通过git clone命令下载到本地。

安装expect,工具脚本用它来自动化一些过程。例如在ubuntu上: sudo apt-get install expect

启动geth

进入本仓库目录: cd ethereum-bootstrap

导入测试账户私钥: ./bin/import_keys.sh

启动私有链节点: ./bin/private_blockchain.sh. 启动成功后可以看到类似如下输出:

此时以太坊交互式控制台已经启动,我们可以开始测试和开发了。

注意:工具脚本假设你的geth安装在默认位置, 可以直接通过geth执行。如果geth命令安装在非标准的位置,可以设置GETH环境变量指定geth可执行文件的路径。例如:

GETH=/some/weird/dir/geth ./bin/import_keys.sh

使用以太坊控制台编译和部署智能合约

在contracts目录下有一个智能合约样例文件Token.sol, 通过Solidity语言实现了基本的代币功能, 合约持有者可以发行代币, 使用者可以互相转账.

我们可以使用以太坊控制台来编译部署这个合约.以太坊控制台是最基本的工具,使用会比较繁琐.社区也提供了其他更加方便的部署工具,此处不做讨论.

第一步,我们先把合约代码压缩为一行.新建一个ssh session, 切换到geth用户环境su - geth, 然后输入:cat contracts/Token.sol | tr 'n' ' '.

切换到以太坊控制台,把合约代码保存为一个变量:

var tokenSource = 'contract Token { address issuer; mapping (address => uint) balances; event Issue(address account, uint amount); event Transfer(address from, address to, uint amount); function Token() { issuer = msg.sender; } function issue(address account, uint amount) { if (msg.sender != issuer) throw; balances[account] += amount; } function transfer(address to, uint amount) { if (balances[msg.sender] < amount) throw; balances[msg.sender] -= amount; balances[to] += amount; Transfer(msg.sender, to, amount); } function getBalance(address account) constant returns (uint) { return balances[account]; } }';

然后编译合约代码:

var tokenCompiled = web3.eth.compile.solidity(tokenSource);

通过tokenCompiled.Token.code可以看到编译好的二进制代码,通过tokenCompiled.Token.info.abiDefinition可以看到合约的ABI.

接下来我们要把编译好的合约部署到网络上去.

首先我们用ABI来创建一个javascript环境中的合约对象:

var contract = web3.eth.contract(tokenCompiled.Token.info.abiDefinition);

我们通过合约对象来部署合约:

var initializer = {from: web3.eth.accounts[0], data: tokenCompiled.Token.code, gas: 300000};

var callback = function(e, contract){

if(!e) {

if(!contract.address) {

console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");

} else {

console.log("Contract mined!");

console.log(contract);

}

}

};

var token = contract.new(initializer, callback);

contract.new方法的第一个参数设置了这个新合约的创建者地址from, 这个新合约的代码data, 和用于创建新合约的费用gas.gas是一个估计值,只要比所需要的gas多就可以,合约创建完成后剩下的gas会退还给合约创建者.

contract.new方法的第二个参数设置了一个回调函数,可以告诉我们部署是否成功.

contract.new执行时会提示输入钱包密码.执行成功后,我们的合约Token就已经广播到网络上了.此时只要等待矿工把我们的合约打包保存到以太坊区块链上,部署就完成了.

在公有链上,矿工打包平均需要15秒,在私有链上,我们需要自己来做这件事情.首先开启挖矿:

miner.start(1)

此时需要等待一段时间,以太坊节点会生成挖矿必须的数据,这些数据都会放到内存里面.在数据生成好之后,挖矿就会开始,稍后就能在控制台输出中看到类似:

:hammer:Mined block

的信息,这说明挖到了一个块,合约已经部署到以太坊网络上了!此时我们可以把挖矿关闭:

miner.stop(1)

接下来我们就可以调用合约了.先通过token.address获得合约部署到的地址, 以后新建合约对象时可以使用.这里我们直接使用原来的contract对象:

// 本地钱包的第一个地址所持有的token数量

> token.getBalance(web3.eth.accounts[0])

0

// 发行100个token给本地钱包的第一个地址

> token.issue.sendTransaction(web3.eth.accounts[0], 100. {from: web3.eth.accounts[0]});

I1221 11:48:30.512296 11155 xeth.go:1055] Tx(0xc0712460a826bfea67d58a30f584e4bebdbb6138e7e6bc1dbd6880d2fce3a8ef) to: 0x37dc85ae239ec39556ae7cc35a129698152afe3c

"0xc0712460a826bfea67d58a30f584e4bebdbb6138e7e6bc1dbd6880d2fce3a8ef"

// 发行token是一个transaction, 因此需要挖矿使之生效

> miner.start(1)

:hammer:Mined block

> miner.stop(1)

// 再次查询本地钱包第一个地址的token数量

> token.getBalance(web3.eth.accounts[0])

100

// 从第一个地址转30个token给本地钱包的第二个地址

> token.transfer.sendTransaction(web3.eth.accounts[1], 30. {from: web3.eth.accounts[0]})

I1221 11:53:31.852541 11155 xeth.go:1055] Tx(0x1d209cef921dea5592d8604ac0da680348987b131235943e372f8df35fd43d1b) to: 0x37dc85ae239ec39556ae7cc35a129698152afe3c

"0x1d209cef921dea5592d8604ac0da680348987b131235943e372f8df35fd43d1b"

> miner.start(1)

> miner.stop(2)

> token.getBalance(web3.eth.accounts[0])

70

> token.getBalance(web3.eth.accounts[1])

30

其他

私有链的所有数据都会放在仓库根目录下的data目录中,删除这个目录可以清除所有数据,重新启动新环境。

做完这些之后你应该对在以太坊私有链上进行开发有了一个大概的了解吧,如果还想学习更多知识,一可以看一看上面执行的脚本代码,到底干了些什么,用了哪些命令行参数,二可以阅读正在ethfans上更新的solidity文档中文版。

10月下旬,中共中央政治局就区块链技术发展现状和趋势进行了集体学习。尽管学习中没有直接提出推动区块链在环境气候领域的应用,但提到的“供应链管理”“能源电力”“大数据”“公益”“城市管理”等既是独立领域,也和环境气候领域有所交叉重叠。比如,环境影响是供应链管理的一环、碳中和具备公益属性、环境大数据属于大数据的一类等。因此,在环境气候领域合理应用区块链技术,既是落实习近平总书记讲话精神的举措,也是应对环境气候挑战的创新实践。

区块链技术在环境气候领域的应用

国际社会积极推动区块链技术在环境气候领域的应用。早在2016年,IBM等针对中国推出了基于区块链的碳资产开发及碳交易平台,旨在提高数据透明度和交易流程。在2017年12月召开的“一个地球峰会”期间,联合国应对气候变化框架公约秘书处倡导成立了气候链联盟,旨在通过区块链技术促进气候融资、增强气候行动;截至2019年2月,联盟已有来自40多个国家的160多个成员。全球环境基金的科学技术咨询委员会在2019年10月召开了“利用区块链的优势实现全球环境效益”研讨会,探讨未来区块链技术在环境领域的应用。

结合区块链的实质及相关实例,笔者认为区块链在环境气候领域主要有以下应用:

提高气候行动力度及气候融资。区块链技术可用于加强对气候行动影响的监测、报告和核查,提高气候行动的透明度、可追溯性和成本效益,建立气候行动参与者之间的信任。可利用区块链技术更好地跟踪和报告温室气体减排量,有助于增加数据透明度,避免减排量的重复计算,还可进一步用于监测国家自主贡献的落实进度。可利用区块链开发众筹和点对点的金融交易,以鼓励更多个体支持气候行动,提高气候融资并确保资金的透明分配。

提升供应链管理的透明度和环境影响记录。区块链可用于跟踪产品从制造到货架的全流程,让消费者了解产品的制造、运输、销售等各环节情况。比如,是否使用化学品、是否是本地产品、运输中产生的环境影响等,从而有助于消费者做出更环保的选择,并且减少或避免整个流程中的浪费、低效、欺诈等行为。Provenace是一家在美国俄勒冈州注册的科技创业公司,旨在协助企业应用区块链技术使供应链更加透明。

促进垃圾回收利用。区块链可用于跟踪垃圾回收,通过制定相应的激励机制,比如发放加密令牌等形式,鼓励居民正确投放可回收垃圾。同时,通过跟踪可回收垃圾的收集情况,分析成本和利润,进一步评估参与地点和人群。Plastic Bank是一家于2013年在加拿大成立的社会企业,旨在减少海洋塑料垃圾并减轻贫困。其最初允许居民用塑料垃圾换取现金、燃料等;目前正与IBM合作,允许居民用塑料垃圾换取加密数字币,后者能在系统中换取其他服务。

促进可再生能源发展。区块链技术可促进点对点的可再生能源交易,众筹资金投资可再生能源并获得回报等。BESC是一家马来西亚的区块链企业,旨在通过众筹投资可再生能源项目,使参与筹款的企业或个人获得可再生能源项目产生的碳减排量对应的数字货币。

 1/4    1 2 3 4 下一页 尾页