Ethereum-部署Truffle project到以太坊私有链

这里假设你已经熟悉以太坊的基本原理,并且了解如何运用Solidity、Web3.js和Truffle进行以太坊项目开发。如果你对这一切还不熟悉,可能你需要先熟悉这些内容再继续读下去。今天我将介绍如何将一个Truffle project部署到我们自己搭建的以太坊私有网络上。

Environment

  • Truffle: v3.3.2 (core: 3.3.1)
  • Geth version: 1.6.6-stable
  • OS: ubuntu 16.04 x86-64

Details

step1

打开一个终端切换到你的工作目录,并执行以下命令获取一个Truffle 项目:

$ truffle init

执行ls命令可以看到新生成了一些文件和文件夹。这些是Truffle框架的一个简单的demo。要了解这些内容的具体含义可以浏览truffle tutorials 网页。

Figure 1

接下来我们来编译这个工程, 选项--reset 告诉truffle编译contracts目录下所有的 .sol 智能合约源文件。

$ truffle compile --reset

你将在终端看到如下输出:


Figure 2

step2

走到这里我们已经可以执行 truffle migrate 将我们的智能合约部署到testrpc(一个很受欢迎的以太坊本地测试链),但在这里我们不打算使用testrpc来部署我们的智能合约,而是要将其部署在我们自己搭建的以太网私有链上。
首先我们需要创建genesis.json 用来初始化配置我们的私有链网络。执行 touch genesis.json 然后拷贝 这里 的内容到genesis.json。你的genesis.json 文件应该看上去像下面这样:

Figure 3

然后,我们需要定制gnensis.json 来配置我们自己的网络,再进行了一些更改后你的genesis.json应该如下所示:


Figure 4
  • difficulty: 减小difficulty的值否则以我们笔记本的算力将很难挖出新区块。 在将值设为20后,在我的电脑上每秒可以挖出2-3个块。
  • gasLimit: 如果你部署的智能合约比较庞大你最好增加大 gasLimit 的值。
  • alloc: 可选的, 表示的是pre-funds 账户。我在这里删掉了它们因为待会我会手动创建账户。

更多关于genesis.json 和 以太坊私有链的细节可以参考 这里

step3

现在是时候来创建我们自己的网络了。执行下面的命令来对完成对网络的初始化配置。选项 --datadir 配置网络数据的存放位置,我们就设为当前目录;--networkid 配置网络的ID,将会在RPC服务里使用到它(1 是以太坊共有链的network ID)。

$ geth --datadir ./ --networkid 11 init genesis.json

执行上面的命令后你在终端应该看到下面的输出:


Figure 5

step4

执行下面的命令启动我们的网络。这里我们添加了一些选项,它们的作用是告诉geth客户端打开相应的API。

$ geth --datadir ./ --networkid 11 --rpc --rpcapi eth,web3,net,personal,ssh,db,debug

step5

另外打开一个终端并切换到刚才的工作目录,你可以看到现在已经有了更多的文件:


Figure 6

执行下面的命令进入geth console。注意geth.ipc文件必须存在。

$ geth attach geth.ipc

step6

由于我在genesis.json文件中删除了pre-funds账户,所以现在在我们的网络里还没有账户。在启动矿工进行挖矿之前我们必须创建至少一个账户,并将其设为ether base账户,这样矿工挖矿所得的以太币将自动存入我们设置的账户。

  • 创建一个账户:
$ personal.newAccount(“your account passwd”)

执行 eth.accounts你可以看到如下输出:

Figure 7

  • 设置矿工etherbase
$ miner.setEtherbase(eth.accounts[0])

accounts[0]是我们刚刚创建的账户。你也可以执行eth.coinbase 它同样返回accounts[0]。终端会返回你一个 "true"表示执行成功。

step7

当一个账户被创建时以太坊默认是将其锁住的。所以我们首先要解锁这个账户。执行下面的命令,传入需要解锁的账户地址,账户的密码以及需要保持解锁状态的时间(单位是秒)。如果这里不指定密码,执行过程中会提示你输入。

$ personal.unlockAccount(eth.accounts[0], "you account passwd", 15000)

如果执行成功,终端会返回给你一个"true"。

step8

一切OK的话我们可以开始挖矿了。

$ miner.start()

在你打开的的第一个终端上可以看到如下输出:

Figure 8

你可以执行 eth.blockNumber 来查看从开始挖矿到现在有多少区块已经成功生成。
Figure 9

step9

现在你已经完成了几乎所有的工作,最后一步让我们来将我们的Truffle project部署到我们搭建的私有网络上。

  • Truffle RPC网络连接配置
    新建第三个终端然后切换到你的工作目录。编辑truffle.js文件然后将下面的内容添加到对应位置。
privatenetwork: {
  host: 'localhost',
  port: 8545,
  network_id: 11
}

端口号 8545 是Etrereum RPC服务的默认端口号; network_id 必须设置为我们在 step3里创建配置网络时紧接着--networkid的值。现在你的truffle.js文件应该像下面这样:

Figure 10

  • 部署Truffle project到Ethereum网络
    执行命令将当前目录下的Truffle project部署到指定网络:
truffle migrate --network privatenetwork

这时你应该在终端看到如下内容:


Figure 11

所有工作已经完成,至此我们已经成功的将一个Truffle project部署到了我们自己搭建的以太坊私有网络上。

Trouble Shooting

i. Error: exceeds block gas limit

Increase the gas limit in file genesis.json.
Attention that block gas limit isn't down to your personal funds, it's a property of the network.

ii. Error: authentication needed: password or unlock
personal.unlockAccount(eth.coinbase)

Do not forget unlock your accounts before making them accept ether.

iii. Error: truffle Invalid JSON RPC response:

Tell the geth turn on RPC APIs.

$ geth --datadir ./ --networkid 11 --rpc --rpcapi eth,web3,net,personal,ssh,db,debug
iv. Error: insufficient funds for gas * price + value

Your balance isn't enough to deploy a contract, try start mining to earn more ether.

miner.start()
v. After running truffle migrate privatenetwork, the output message blocking at "Deploying Migrations…."

Run minner.start() if you have stopped mining. Deloy contract is a transaction request, so we need the minner commit the new block to our network.


版权所有,转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容

  • 本文是对以太坊文档 Ethereum Frontier Guide 和 Ethereum Homestead 的整...
    趁风卷阅读 9,492评论 0 16
  • 测试网络 Morden测试网 Morden是公开的以太坊替代测试网。它会贯穿于整个软件里程碑Frontier和Ho...
    juniway阅读 516评论 0 1
  • 一、区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。...
    Tenny1225阅读 33,595评论 5 35
  • 最新内容会更新在主站深入浅出区块链社区原文链接:以太坊是什么 - 以太坊开发入门指南 很多同学已经跃跃欲试投入到区...
    深入浅出区块链阅读 2,500评论 2 20
  • 成功 01 开始把绘画提到日程,画了三幅画。 02 开始试着用文字表达自己,写了一篇2000字的文,并投稿成功。 ...
    林静西阅读 231评论 3 1