作者Jan声明:ethereum-bootstrap是我建立的一个github项目,目的是帮助刚接触以太坊的同学快速的搭建起自己的本地开发环境,体验智能合约的开发。阅读本文需要有基本的编程知识。项目地址:?https://github.com/janx/ethereum-bootstrap

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

仓库中包含的工具有:

  • 一个测试账户导入脚本,在首次部署时将五个测试账户私钥导入以太坊节点。
  • 一个genesis.json配置文件,为对应的五个测试账户提供初始资金(以太币),方便开发测试。
  • 一个快速启动私有链节点并进入交互模式的脚本。
  • 一个合约样例:。这是一个使用合约语言Solidity编写的智能合约。Token合约的功能是发行一种token(可以理解为货币,积分等等),只有合约的创建者有发行权,token的拥有者有使用权,并且可以自由转账。

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

  1. 在本地安装好go-ethereum和solc, 可以执行和命令。如果操作系统是ubuntu, 安装官方的ethereum安装包即可。
  2. 将本仓库通过命令下载到本地。
  3. 安装expect,工具脚本用它来自动化一些过程。例如在ubuntu上:?
  1. 进入本仓库目录:?
  2. 导入测试账户私钥:?
  3. 启动私有链节点:?. 启动成功后可以看到类似如下输出:?
  4. 此时以太坊交互式控制台已经启动,我们可以开始测试和开发了。

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

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

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

第一步,我们先把合约代码压缩为一行.新建一个ssh session, 切换到geth用户环境, 然后输入:.

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

 

然后编译合约代码:

 

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

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

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

 

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

 

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

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

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

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

 

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

 

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

 

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

 

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

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