美文网首页
Ethereum-部署Truffle project到以太坊私有

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

作者: tolak | 来源:发表于2017-07-26 19:49 被阅读918次

这里假设你已经熟悉以太坊的基本原理,并且了解如何运用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.


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

相关文章

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

    这里假设你已经熟悉以太坊的基本原理,并且了解如何运用Solidity、Web3.js和Truffle进行以太坊项目...

  • 3.1.1 truffle migrate

    truffle migrate 迁移脚本是 JavaScript 文件,用于将智能合约部署到以太坊网络。这些文件负...

  • 搭建Truffle

    title: 以太坊环境搭建-Truffle安装tags: Truffle Truffle是目前最流行的以太坊开发...

  • 以太坊网建立、合约编译、部署

    以太坊网建立、合约编译、部署 在本地建一套以太坊私有链,进行智能合约的开发测试。开发好的智能合约切换接口部署到以太...

  • 5.1 智能合约的部署

    智能合约的部署 本示例展示如何将智能合约部署到以太坊网络。 1. 创建 Truffle 项目 1.1 创建目录 1...

  • truffle部署合约到以太坊主网上

    truffle集以太坊智能合约编译、测试、部署为一体的开源框架,方法简单,功能强大。 1、安装truffle 安装...

  • 区块链技术(一):Truffle开发入门

    以太坊是区块链最好的开发平台truffle是以太坊(Ethereum)最受欢迎的一个开发框架 安装truffle ...

  • Truffle Provider 构造及其解释

    Truffle default web3 HttpProvider 定义 Truffle[1] 是以太坊上智能合约...

  • Truffle 入门

    Truffle是以太坊的开发者工具,是一个开发环境,测试框架,以太坊的资源管理通道 一、安装Truffle npm...

  • 以太坊主网同步踩过的坑

    之前是用geth和Ethereum Wallet搭建了自己的以太坊私有网络(搭建自己的以太坊网络)并在上面部署了智...

网友评论

      本文标题:Ethereum-部署Truffle project到以太坊私有

      本文链接:https://www.haomeiwen.com/subject/wllokxtx.html