一、安装准备

① 查看当前 CPU 架构

  • 在终端中执行以下命令,确定是 32 位架构还是 64 位架构:
~$ uname –p
x86_64
  • 如果看到输出 x86_64,那么就是 64 位系统,否则是 32 位。

② 下载工具

  • 确保安装了下载工具 wget:
~$ wget –V
GNU Wget 1.17.1 built on linux-gnu
  • 如果还没有安装 wget,使用 apt-get 来安装:
~$ sudo apt-get install wget

二、安装 DApp 开发环境

① 安装 Node.js

  • 首先根据 ubuntu 是 32 位还是 64 位,分别下载不同的预编译版本,使用官方长期支持的 8.10.0LTS 版本:
    • 32 位:
~$ wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x86.tar.gz
  • 64 位:
~$ wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.gz
  • 然后解压到当前目录,以 64 位为例:
~$ tar zxvf node-v8.10.0-linux-x64.tar.gz
  • 然后接下来修改 .bashrc 来设置相关的环境变量:
~$ echo "export NODE_HOME=$HOME/node-v8.10.0-linux-x64"
>> .bashrc
~$ echo "export NODE_PATH=$NODE_HOME/lib/node_modules"
>> .bashrc
~$ echo "export PATH=$NODE_HOME/bin:$PATH" >> .bashrc
  • 最后重新载入 .bashrc(或者重新登录)来使 node 生效:
~$ source .bashrc
  • 现在,可以使用 node:
~$ node –v
v8.10.0

② 安装 Geth

  • 在终端执行以下命令:
~$ wget
https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.8.3-329ac18e.tar.gz
~$ mv get-linux-amd64-1.8.3-329ac18e geth
~$ echo export PATH=$HOME/geth:$PATH >> .bashrc
~$ soure .bashrc
  • 安装完毕后,执行命令验证安装成功:
~$ geth version
Geth
Version: 1.8.3-stable

③ 安装 solidity 编译器

  • 安装编译器:
~$ npm install –g solc
  • 安装完毕后,执行命令验证安装成功:
~$ solcjs –version
0.40.2+commit.3155dd80.Emscripten.clang

④ 安装 web3

  • 安装:
~$ npm install –g web3@0.20.2
  • 安装验证:
~$ node –p 'require("web3")'
{[Function: Web3]
providers:{…}}

⑤ 安装 truffle 框架

  • 执行以下命令安装 truffle 开发框架:
~$ npm install –g truffle
  • 验证安装:
~$ truffle version
Truffle v4.1.3 (core 4.1.3)

⑥ 安装 webpack

  • 执行以下命令安装 webpack:
~$ npm install –g webpack@3.11.0
  • 验证安装:
~$ webpack –v
3.11.0

三、运行私链节点

① 创世块配置

  • 创建一个节点目录 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" }}
}
  • config.chainId 用来声明以太坊网络编号,选择一个大于 10 的数字即可。difficulty 用来声明挖矿难度,越小的值难度越低,也就能更快速地出块。

② 初始化私链节点

  • 执行 geth 的 init 命令初始化私链节点:
~/node1$ geth --datadir ./data init private.json
  • 这会在当前目录下创建 data 目录,用来保存区块数据及账户信息:
~/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

③ 启动私链节点

  • 从指定的私链数据目录启动并设定一个不同的网络编号来启动节点:
~/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
  • rpcaddr 参数用来声明节点 RPC API 的监听地址,设为 0.0.0.0 就可以从其他机器访问 API;rpccorsdomain 参数是为解决 web3 从浏览器中跨域调用的安全限制问题。
  • 以后启动节点,只要直接执行这个脚本即可:
~/node1$ ./console.sh

四、账户管理

① 查看账户列表

  • 在 geth 控制台,使用 eth 对象的 accounts 属性查看目前的账户列表:
> eth.accounts
[
]
  • 因为还没有创建账户,所以这个列表还是空的。

② 创建新账户

  • 在 geth 控制台,使用 personal 对象的 newAccount() 方法创建一个新账户,参数为自己选择的密码:
> personal.newAccount(
'
78787878')
0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49
  • 输出就是新创建的账户地址(公钥),输出不会和上面的示例相同。geth 会保存到数据目录下的 keystore 文件中。密码要自己记住,以后还需要用到。

③ 查询账户余额

  • 在 geth 控制台,使用 personal 对象的 getBalance() 方法获取指定账户的余额,参数为账户地址:
> eth.getBalance(eth.accounts[0])
0
  • 或者直接输入账户地址:
> eth.getBalance('0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49')
0
  • 新创建的账户,余额果然为 0。

④ 挖矿

  • 没钱的账户什么也干不了,需要挖矿来挣点钱。在 geth 控制台执行 miner 对象的 start() 方法来启动挖矿:
> miner.start(1)
  • 等几分钟以后,检查账户余额:
> eth.getBalance(eth.accounts[0])
2.695e+21
  • 钱不少了,2695ETH,目前市值将近 500 万人民币,执行 miner 对象的 stop() 方法停止挖矿:
> miner.stop()

⑤ 解锁账户

  • 在部署合约时需要一个解锁的账户,在 geth 控制台使用 personal 对象的 unlockAccount() 方法来解锁指定的账户,参数为账户地址和账户密码(在创建账户时指定的那个密码):
> eth.unlockAccount(eth.accounts[0],'78787878')
true

五、构建示例项目

① 新建 DApp 项目

  • 执行以下命令创建项目目录并迚入该目录:
~$ mkdir demo
~$ cd demo
  • 然后用 webpack 模版初始化项目骨架结构:
~/demo$ truffle unbox webpack
Downloading…
Unpacking…
Setting up…
Unbox successful. Sweet!

② 安装项目依赖的 NPM 包

  • 执行以下命令安装 nmp 包:
~/demo$ npm install

③ 修改 truffle 配置

  • truffle.js 中,修改 port 为 8545,因为 geth 默认在 8545 端口监听:
module.exports = {networks:{development: {…port: 8545…}}
}

④ 启动节点

  • 在另一个终端,执行以下命令启动节点软件,以便部署合约并执行交易:
~$ cd node1
~/node1$ ./console.sh
>
  • 为了在节点上部署合约,别忘了启动 geth 后先解锁账户:
> personal.unlockAcount(eth.accounts[0],'78787878')
true

⑤ 编译合约

  • 执行以下命令编译项目合约:
~/demo$ truffle compile

⑥ 部署合约

  • 执行以下命令来部署合约:
~/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 那个终端,部署过程也正确地执行完成。

⑦ 启动 DApp

  • 执行以下命令来启动 DApp:
 ~/demo$ npm run dev
  • 在浏览器里访问 http://localhost:8080 即可。

  • 如果希望从别的机器也可以访问 DApp 应用,修改一下package.json:
{scripts:{"dev":"webpack-dev-server –-host 0.0.0.0"}
}

以太坊之Ubuntu平台DApp私链环境的搭建相关推荐

  1. 以太坊之Windows DApp私链环境的搭建

    一.安装 DApp 开发环境 ① 安装 Node.js 安装 Node.js 可以使用官方长期支持的 8.10.0LTS 版本,根据 ubuntu 是 32 位还是 64 位,分别下载不同的预编译版本 ...

  2. 以太坊私链环境搭建和发币全过程

    以太坊框架搭建网上已经有很多,我不在啰嗦,我主要说下我搭建过程中踩过的坑及全过程解析. 搭建以太坊节点 主要有两种方式: 1.geth+mist 搭建 2.nodejs + truffle + gan ...

  3. 基于以太坊的58同城 | DApp开发与应用案例

    基于以太坊的58同城 | DApp开发与应用案例 今天,Origin开发团队很高兴地宣布在以太坊Rinkeby测试网络上推出Origin Protocol Demo DApp ! 在这个DApp中,你 ...

  4. 以太坊联盟链-多节点私链搭建手册

    修订日期 姓名 邮箱 2018-09-23 brucefeng brucefeng@brucefeng.com 一. 前言 这半个月都在处理其他的事情,没来得及更新博客,今天看了下最近的博客访问量增加 ...

  5. 以太坊Truffle框架构建Dapp

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 1.安装环境 通过node安装truffle,推荐在ubuntu 14.04下进行开发,window下可能会遇到各种 ...

  6. 如何分叉以太坊并变成自己的私链?

    帅初 写于 2016年2月11日 随着大家对区块链技术的深入了解,越来越多的企业和个人开发者认识到ethereum区块链平台的价值,由于ethereum平台开发语言是图灵完备的,也给区块链相关应用的开 ...

  7. 【以太坊】ubuntu安装以太坊ethereum的测试网络ropsten-net以及雷电网络raiden-network环境...

    ubuntu安装以太坊ethereum的测试网络ropsten-net以及雷电网络raiden-network环境 前言 为了保证环境稳定,我从头开了一个虚拟机. 环境如下 xiaoyu@xiaoyu ...

  8. [币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

    阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,你最好还了解一些HTML及JavaScript知识. 本文通过实例教大家来开发去中心化应用,应用效果如图 ...

  9. 【以太坊】ubuntu安装以太坊ethereum的测试网络ropsten-net以及雷电网络raiden-network环境

    ubuntu安装以太坊ethereum的测试网络ropsten-net以及雷电网络raiden-network环境 前言 为了保证环境稳定,我从头开了一个虚拟机. 环境如下 xiaoyu@xiaoyu ...

最新文章

  1. 益老而弥坚:软件开发哲学反思录
  2. 智慧AI组对于激光投影的检测方案
  3. 《程序员代码面试指南》第二章 链表问题 删除无序链表中值重复的链表
  4. linux网站宝塔无法访问ipv6,centos7宝塔面板服务器开启纯IPV6访问
  5. 各种移动GPU压缩纹理的使用方法
  6. css按钮大小固定,在CSS中创建一个固定宽度的按钮
  7. oracle二进制转换字母,如何将oracle二进制数据转换为word文本
  8. 用Python强制子类重写父类,如此简单就能做到
  9. 图像灰度化的三种方法(matlab、C++、Python实现)
  10. rootfs文件系统的制作(一)
  11. unity3d 虚拟博物馆_基于Unity3d的博物馆移动信息化系统
  12. 英国高端SPA级奢养护肤品牌EVE LOM相继入驻成都IFS、北京连卡佛;FILA斐乐携手梵高博物馆推出全新联名系列 | 知消...
  13. Chui-Wen Chius Note: C++ 使用 JScript 和 VBScript
  14. Error: Cannot find module 'chalk'
  15. 苹果系统怎么链接共享服务器,mac连接共享服务器设置
  16. 40行Python代码,实现卷积特征可视化
  17. 手机上怎么打开md格式的文件_IPHONE手机转为安卓手机,iCloud上的日历迁移方法...
  18. 关于PostMan发送请求获得响应
  19. python分析股票主力_python-个股聪明钱因子追踪
  20. JVM的三种常见GC:Minor GC、Major GC与Full GC

热门文章

  1. [网络工程师]-防火墙-入侵检测系统IDS
  2. 【100个 Unity实用技能】☀️ | 求反射向量的方法,让小球按照物理反射的角度反弹(出射角=入射角)
  3. Scrum板与Kanban如何抉择?敏捷工具:ybagv板与按照qfslevwp
  4. [trouble shooting] mysqlhotcopy 报错 Can't locate Data/Dumper.pm in @INC
  5. python实现微信接口(itchat)
  6. 西门子运动控制卡使用详解
  7. python在线电影网站-一
  8. Android:自定义View之番茄钟
  9. python爬虫实例-运用requests抓取豆瓣电影TOP250(详解)
  10. 互联网人,不拼体力拼什么?