以太坊之Windows DApp私链环境的搭建
一、安装 DApp 开发环境
① 安装 Node.js
- 安装 Node.js 可以使用官方长期支持的 8.10.0LTS 版本,根据 ubuntu 是 32 位还是 64 位,分别下载不同的预编译版本:
- 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
- 下载后直接安装即可,安装完毕,打开一个控制台窗口,可以使用 node:
C:\Users\xxx> node –v
v8.10.0
② 安装 Geth
- 下载 64 位或者 32 位 Geth 安装程序,然后进行安装,下载地址:Ethereum 或者 直接下载。
- 安装完毕后打开一个控制台,执行命令验证安装成功:
C:\Users\xxx> geth version
Geth
Version: 1.8.3-stable
③ 安装 solidity 编译器
- 执行以下命令安装:
C:\Users\xxx> npm install –g solc
- 安装完毕后,执行命令验证安装成功
C:\Users\xxx> solcjs –version
0.40.2+commit.3155dd80.Emscripten.clang
④ 安装 web3
- Web3 的安装过程使用 git,因此需要先安装 windows 版的 git 命令行。下载 64 位或者 32 位的 git 安装程序,本地安装后在继续安装web3:
C:\Users\xxx> npm install –g web3@0.20.2
- 安装验证:
C:\Users\xxx> node –p 'require("web3")'
{[Function: Web3]
providers:{…}}
⑤ 安装 truffle 框架
- 执行以下命令安装 truffle 开发框架:
C:\Users\xxx> npm install –g truffle
- 验证安装:
C:\Users\xxx> truffle.cmd version
Truffle v4.1.3 (core 4.1.3)
⑥ 安装 webpack
- 执行以下命令安装 webpack:
C:\Users\xxx> npm install –g webpack@3.11.0
- 验证安装:
C:\Users\xxx> webpack –v
3.11.0
二、运行私链节点
① 创世块配置
创建一个节点目录 node1,并在其中创建私链的创世块配置文件:
C:\Users\xxx> mkdir node1
C:\Users\xxx> cd node1
C:\Users\xxx\node1> notepad 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 命令初始化私链节点:
C:\Users\xxx\node1> geth --datadir .\data init private.json
- 这会在当前目录下创建 data 目录,用来保存区块数据及账户信息:
C:\Users\xxx\node1> dir
data private.json
- 可以上述命令写到一个脚本 init.cmd 里,这样避免每次都输入那么多记不住的东西。文件内容如下:
geth --datadir .\data init private.json
- 在部署下一个节点时,就可以直接执行这个脚本进行初始化。例如,在另一台机器上:
C:\Users\xxx\node1> init.cmd
③ 启动私链节点
- 从指定的私链数据目录启动并设定一个不同的网络编号来启动节点:
C:\Users\xxx\node1> geth --rpc --datadir .\data --networkid 7878 console
- 同样,可以用一个脚本 console.cmd 来简化启动节点时的输入,文件内容如下:
geth --rpc \--rpcaddr 0.0.0.0 \--rpccorsdomain "*"\--datadir ./data \--networkid 7878 \console
- rpcaddr 参数用来声明节点 RPC API 的监听地址,设为 0.0.0.0 就可以从其他机器访问 API;rpccorsdomain 参数是为了解决 web3 从浏览器中跨域调用的安全限制问题。
- 以后启动节点,只要直接执行这个脚本即可:
C:\Users\xxx\node1> console.cmd
④ 账户管理
(A)查看账户列表
- 在 geth 控制台,使用 eth 对象的 accounts 属性查看目前的账户列表:
> eth.accounts
[
]
- 由于还没有创建账户,因此这个列表还是空的。
(B)创建新账户
- 在 geth 控制台,使用 personal 对象的 newAccount() 方法创建一个新账户,参数为自己选择的密码:
> personal.newAccount('78787878')
0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49
- 输出就是新创建的账户地址(公钥),你的输出不会和上面的示例相同,geth 会保存到数据目录下的 keystore 文件中。密码要自己记住,以后还需要用到。
(C)查询账户余额
- 在 geth 控制台,使用 personal 对象的 getBalance() 方法获取挃定账户的余额,参数为账户地址:
> eth.getBalance(eth.accounts[0])
0
- 或者直接输入账户地址:
> eth.getBalance('0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49')
0
- 新创建的账户,余额果然为0。
(D)挖矿
- 没钱的账户什么也干不了,需要挖矿来挣点钱。在 geth 控制台执行 miner 对象的 start() 方法来启动挖矿:
> miner.start(1)
- 等几分钟以后,检查账户余额:
> eth.getBalance(eth.accounts[0])
2.695e+21
- 钱比较多,2695ETH,目前市值将近 500 万人民币。执行 miner 对象的 stop() 方法停止挖矿:
> miner.stop()
(E)解锁账户
- 在部署合约时需要一个解锁的账户,在 geth 控制台使用 personal 对象的 unlockAccount() 方法来解锁指定的账户,参数为账户地址和账户密码(在创建账户时指定的那个密码):
> eth.unlockAccount(eth.accounts[0],'78787878')
true
三、构建示例项目
① 新建 DApp 项目
- 执行以下命令创建项目目录并进入该目录:
C:\Users\xxx> mkdir demo
C:\Users\xxx> cd demo
- 然后用 webpack 模版初始化项目的骨架结构:
C:\Users\xxx\demo> truffle.cmd unbox webpack
Downloading…
Unpacking…
Setting up…
Unbox successful. Sweet!
② 安装项目依赖的 NPM 包
- 执行以下命令安装 nmp 包:
C:\Users\xxx\demo$ npm install
③ 修改 truffle 配置
- 如果使用图形版的 ganache,不需要修改 truffle.js 配置文件。否则,需要在 truffle.js 中,修改 port 为 8545,因为 ganache-cli 在 8545 端口监听:
module.exports = {networks: {development: {port: 8545}}
}
④ 启动节点
- 执行以下命令启动节点仿真器,以便部署合约并执行交易:
C:\Users\xxx\node1> console.cmd
- 为了在节点上部署合约,别忘记启动 geth 后先解锁账户:
> personal.unlockAcount(eth.accounts[0],'78787878')
true
⑤ 编译合约
- 执行以下命令编译项目合约:
C:\Users\xxx\demo> truffle.cmd compile
⑥ 部署合约
- 执行以下命令来部署合约:
C:\Users\xxx\demo> truffle.cmd 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:
C:\Users\xxx\demo> npm run dev
- 在浏览器里访问 http://localhost:8080 即可:
- 如果希望从别的机器也可以访问 DApp 应用,可以修改一下 package.json:
{scripts:{"dev":"webpack-dev-server –-host 0.0.0.0"}
}
以太坊之Windows DApp私链环境的搭建相关推荐
- 以太坊之Ubuntu平台DApp私链环境的搭建
一.安装准备 ① 查看当前 CPU 架构 在终端中执行以下命令,确定是 32 位架构还是 64 位架构: ~$ uname –p x86_64 如果看到输出 x86_64,那么就是 64 位系统,否则 ...
- 以太坊之Windows DApp开发环境的搭建
一.安装 DApp 开发环境 ① 安装 Node.js 安装 Node.js 可以使用官方长期支持的 8.10.0LTS 版本,根据 ubuntu 是 32 位还是 64 位,分别下载不同的预编译版本 ...
- 以太坊私链环境搭建和发币全过程
以太坊框架搭建网上已经有很多,我不在啰嗦,我主要说下我搭建过程中踩过的坑及全过程解析. 搭建以太坊节点 主要有两种方式: 1.geth+mist 搭建 2.nodejs + truffle + gan ...
- 以太坊geth区块链私链建立
想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答!! 以太坊geth区块链私链建立 geth的github https://github.com/ethereum/g.. ...
- 视频教程-区块链项目:基于以太坊开发拍卖系统DApp教程(含资料)-区块链
区块链项目:基于以太坊开发拍卖系统DApp教程(含资料) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动 ...
- 以太坊(Ethereum) - 分布式应用(DApp)
章节 以太坊(Ethereum) – 是什么 以太坊(Ethereum) – 什么是智能合约 以太坊(Ethereum) – 以太币 以太坊(Ethereum) – 虚拟机(E.V.M.) 以太坊(E ...
- 以太坊和EOS DApp数量上升
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 目前,在最受欢迎的智能合约平台以太坊和EOS上,每月大约有180个新的去中心化应用程序(DApps),该数量处于历史最高 ...
- 2018年2月DappRadar以太坊10大DApp应用
这是2018年2月以太坊DApp应用活跃度排行榜,DappRadar根据其对以太坊交易的监测而自动生成,计算的主要依据是DApp在一周内的交易量: 没准下一个明星DApp就是你开发的:) 1. Eth ...
- 以太坊学习路线——(二、上)搭建testrpc测试链
这篇博客演示的基本操作系统环境是CentOS 7,参考书籍:以太坊开发实战--以太坊关键技术与案例分析 第五章(吴寿鹤.冯翔.刘涛.周广益 著).首先请自行搜索安装并更新nodejs到较高版本. ...
最新文章
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
- 4.二叉树的先序、中序以及后序遍历的递归写法与非递归写法(LeetCode第94、144、145题)
- .NET经典资源站点汇总
- Tensorflow中GRU和LSTM的权重初始化
- [译]GC专家系列1:理解Java垃圾回收
- NSUInteger和NSInteger和int
- java常见命名规则
- 是什么决定了创业的成败?
- 后浪“95”获 CVPR 2020 最佳论文,前得主这样解读
- 大数据分块_谷歌卫星影像金字塔分块下载原理说明
- 磁盘阵列(RAID) 级别
- java import list_Java中的List集合
- c语言经纬度和大地坐标转换,经纬度与我国54、80大地坐标转换的小工具
- zabbix监控打印机并自动更新监控项
- 安泰测试-安捷伦N5182A射频矢量信号发生器
- SuperMemo导出html,使用思维导图和SuperMemo一起来快速复习(1)
- 一体广告机实现思路,非常实用(一)
- 数值分析:研究高次插值的龙格现象
- Android 经验: 本地 5555 端口会被 adb 误认为 emulator
- 微博为何做绿洲?社交化、生活化和垂直化
热门文章
- PB对excel的操作
- mock.js教程 2017-02-08 15:02:39| 分类: 浏览器调试|举报|字号 订阅 下载LOFTER我的照片书 | 由于近期项目需求改动比较大,对于数据的频繁
- 渗透测试培训-渗透测试学习些啥呀?
- SAP BASIS ADM100 中文版 Unit 5(2)
- HTML聊天框特效,利用jQuery实现响应式聊天窗口界面特效
- ubuntu下迅雷安装完全策略
- MFi技术 和 苹果生态系统
- C++ template —— 模板基础(一)
- linux脚本 校准时区,Linux中自动校准时间,并且非常好用。
- EMR 重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器