主页 > 下载imtoken钱包app中国版 > 以太坊私链DApp开发环境搭建(二)

以太坊私链DApp开发环境搭建(二)

下载imtoken钱包app中国版 2024-01-26 05:15:39

3. 运行私有链节点 3.1 创世块配置

创建节点目录node1,并在其中创建私有链的创世块配置文件:

~$ mkdir node1
~$ cd node1
~/node1$ touch private.json

然后编辑内容如下:

{
    "config": {
        "chainId": 7878,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "200",
    "gasLimit": "2100000",
    "alloc": {
        "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
        "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
    }
}

3.2 初始化私有链节点

执行geth的init命令初始化私有链节点:

~/node1$ geth --datadir ./data init private.json

这将在当前目录下创建一个数据目录,用于存储区块数据和账户信息:

~/node1$ ls
data private.json

上面的命令可以写成一个脚本init.sh,这样可以避免每次输入太多记不住的东西:

~/node1$ touch init.sh
~node1$ chmod +x init.sh

编辑后的内容如下:

#!/bin/bash
geth --datadir ./data init private.json

在部署下一个节点时,可以直接执行这个脚本进行初始化。 例如,在另一台机器上:

~/node1$ ./init.sh

3.3 启动私链节点

从指定的私链数据目录启动,设置不同的网络号启动节点:

~/node1$ geth --rpc --datadir ./data --networkid 7878 console

此外,您可以使用脚本 console.sh 来简化启动节点时的输入:

~/node1$ touch console.sh
~/node1$ chmod +x console.sh

编辑后的内容如下:

#!/bin/bash
geth --rpc \
      --rpcaddr 0.0.0.0 \
      --rpccorsdomain "*" \
--datadir ./data \
--networkid 7878 \
console

~/node1$ ./console.sh

3.4 账户管理 3.4.1 查看账户列表

在geth控制台,使用eth对象的accounts属性查看当前账户列表:

> eth.accounts
[]

由于我们还没有创建帐户,因此列表仍然是空的。

3.4.2 创建新账户

在 geth 控制台中,使用个人对象的 newAccount() 方法使用您选择的密码创建一个新帐户:

> personal.newAccount('78787878')
0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49

输出的是新创建的账户地址(公钥),你的输出不会和上面的例子一样。 geth 将被保存到数据目录中的密钥库文件中。 自己记住密码,稍后您将需要它。

3.4.3 查询账户余额

在geth控制台使用personal对象的getBalance()方法获取指定账户的余额,参数为账户地址:

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

> eth.getBalance('0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49')
0

新创建的账户余额为 0。

3.4.4 挖矿

没有钱的账户什么也做不了,需要挖矿赚点钱。

在geth控制台执行miner对象的start()方法开始挖矿:

> miner.start(1)

几分钟后,查看账户余额:

> eth.getBalance(eth.accounts[0])
2.695e+21

钱不少,2695个ETH以太坊是私有链,目前市值近500万元,哈。

执行miner对象的stop()方法停止挖矿:

> miner.stop()

3.4.5 解锁账户

部署合约需要解锁帐户。 在geth控制台,使用personal对象的unlockAccount()方法解锁指定账号。 参数为账户地址和账户密码(创建账户时指定的密码):

> eth.unlockAccount(eth.accounts[0],'78787878')
true

4.1 创建一个新的DApp项目

执行以下命令创建项目目录并进入该目录:

~$ mkdir demo
~$ cd demo

然后用webpack模板初始化项目骨架结构:

~/demo$ truffle unbox webpack
Downloading…
Unpacking…
Setting up…
Unbox successful. Sweet!

4.2 安装项目依赖的npm包

执行以下命令安装nmp包:

~/demo$ npm install

4.3 修改truffle配置

在truffle.js中修改端口为8545,因为geth默认监听8545端口:

module.exports = {
  networks:{
    development: {
      …
      port: 8545
      …
    }
  }
}

4.4 启动节点

在另一个终端中,执行以下命令启动节点软件以部署合约并执行交易:

~$ cd node1
~/node1$ ./console.sh
>

> personal.unlockAcount(eth.accounts[0],'78787878')
true

4.5 编译合约

执行以下命令编译项目合约:

~/demo$ truffle compile

4.6 部署合约

执行以下命令部署合约:

~/demo$ truffle migrate

如果之前忘记在geth控制台解锁账号,会看到如下错误,按照之前的说明解锁即可:

Error: authentication needed: password or unlock

如果帐户已正确解锁,您将看到部署过程停止在以下状态:

Replacing Migrations…
… 0x3088762a5bc9…

这是因为truffle在等待部署交易提交,但是我们还没有开始在私有链上挖矿。

现在切换回 geth 终端窗口并检查交易池的状态:

> txpool.status
{
  pending:1,
  queued:0
}

> miner.start(1)

稍等片刻,然后查看交易池的状态:

> txpool.status
{
  pending:0,
  queued:0
}

交易已成功提交。 我们可以停止挖矿,因为它太占用 CPU:

> miner.stop()

现在切换回truffle终端以太坊是私有链,部署过程正确执行。

4.7 启动DApp

执行以下命令启动 DApp:

~/demo$ npm run dev

最后在浏览器中访问:8080。

如果你想从其他机器访问你的 DApp 应用程序,修改 package.json:

{
  scripts:{
    "dev": "webpack-dev-server –-host 0.0.0.0"
  }
}

推荐一个以太坊DApp教程:

最后在浏览器中访问:8080。

如果你想从其他机器访问你的 DApp 应用程序,修改 package.json:

{
  scripts:{
    "dev": "webpack-dev-server –-host 0.0.0.0"
  }
}