原文地址: 石匠的blog

为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链。在mac上搭建环境主要需要以下步骤。

geth安装

geth是go-ethereum的简写,是一个用go语言编写的以太坊客户端,是在以太坊智能合约开发中最常用的命令行工具。

在mac上可以通过brew工具直接安装:

brew tap ethereum/ethereum
brew install ethereum

详细的安装说明也可以查看官方文档

安装完成后,可以再mac的terminal中,用以下命令测试工具是否正常:

geth -h

创建私有链创世区块

为了创建一个自己测试的私有链,需要首先创建一个创世区块,可以自定义创世区块信息信息genesis.json:

{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}

区块参数释义:

chainId: 指定了独立的区块链网络ID。网络ID在连接到其他节点的时候会用到,以太坊公网的网络ID是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络ID。不同ID网络的节点无法相互连接。
HomesteadBlock: 当设置为0表示使用Homestead发布该链。
nonce: 一个64位随机数,用于挖矿,注意它和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
mixhash: 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意它和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty: 设置设置当前区块的难度,值越大挖矿就越难。
alloc: 用来预置账号以及账号的以太币数量。
coinbase: 矿工账号
timestamp: 设置创世块的时间戳
parentHash: 上一个区块的hash,创世块就为0
extraData: 附加信息,自己可以填写任意信息
gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和

找一个合适的目录,执行命令,创建创世区块:

geth --datadir "./" init genesis.json

运行成功后会在当前目录创建geth和keystore两个文件夹

  • geth目录:保存链上的区块数据
  • keystore目录:保存链上的用户信息

私有链测试

启动私有链

前面建立创世区块成功后,启动区块链程序:

geth --datadir "./" --nodiscover console 2>>geth.log

相关参数:

--nodiscover 使用这个参数,你的节点就不会被其他人发现,除非手动添加你的节点。否则,就只有一个被无意添加到一个陌生区块链上的机会,那就是跟你有相同的genesis文件和networkID。
--maxpeers 0 如果你不想有人连上你的测试链,就用maxpeers 0。或者,你可以调整参数,当你确切的知道有几个节点要连接上来的时候。
--rpc 允许RPC操作你的节点。这个参数在Geth上是默认的。
--rpcapi "db,eth,net,web3" 这个命令指示了允许通过RPC访问的命令。默认情况下,Geth允许web3。
--rpcport "8080"
--rpccorsdomain "http://chriseth.github.io/browser-solidity/"
--datadir "/home/TestChain1" 私有链存放路径(最好跟公有链路径不同)
--port "30303" 网络监听端口,用来和其他节点手动连接
--identity “TestnetMainNode" 用来标识你的节点的,方便在一大群节点中识别出自己的节点

console指定了启动成功后进入命令行界面,2>>将日志重定向到geth.log中,不然日志也会输出到界面上,会和命令行界面混在一起,不方便命令行测试。

创建账号

在命令行中创建账号:

>personal.newAccount()

然后会提示输入账号密码,成功后会返回一个账号地址,比如:0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb

也可以通过给newAccount传递密码作为参数,一次性完成创建:

>personal.newAccount("123456")

查看余额

查看账户的余额:

>eth.getBalance("0xc7ca64442b98cbfdb6f056841ccd40f8b7f054bb")

挖矿

开始挖矿:

>miner.start()

开始后,可以tailf geth.log看看挖矿初始化是否成功,以及挖矿过程细节。

停止挖坑:

>miner.stop()

转账

将一个账户的代币转移到另外一个账户,需要通过事务接口完成 eth.sendTransaction({from: acc0, to: acc1, value: amount}),比如:

>eth.sendTransaction({from: "0x01b5ecbcd8d46c1a9ee52e8b8a30bb6426dffb1b", to: "0xe6e4e20c95abc11dca8b3e9c292a34725bf89930", value: 20})

转出的账户需要密码解锁,不然会发生类似以下错误:

Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at <anonymous>:1:1

很好理解,如果转出别人账户的代币,不需要密码验证,那就毫无安全可言了,可以通过以下方式,解锁账户后继续转账:

>personal.unlockAccount("0xab04698365ed79ef22921edad8f6f516ca40cecb")

转账完成后,可以通过eth.getBalance()查看余额,但是马上查询却发现并没有变化,这是因为sendTransaction这是发起了一笔交易事务,还没有得到确认,只是将这个事务放到了待提交池中。区块链的机制中是新创建区块的时候,会就从事务池中找出所有事务,进行有效性验证,验证成功后进行挖矿并将所有相关事务打包到区块中,待新的去区块成功加入到区块链中后,之前的转账就得到了最终的确认和永久固话。

所以,sendTransaction成功后,需要调用挖矿命令miner.start()创建区块,然后再查看余额会发现转账金额变化已经生效。

Mac环境搭建以太坊私有链的更多相关文章

  1. 转:使用 Go-Ethereum 1.7.2搭建以太坊私有链

    使用 Go-Ethereum 1.7.2搭建以太坊私有链 目录 [toc] 1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底 ...

  2. 使用 Go-Ethereum 1.7.2搭建以太坊私有链

    目录 [toc] 1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球 ...

  3. 区块链--Ubuntu上搭建以太坊私有链

    1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...

  4. Mac搭建以太坊私有链

    记录过程与问题 一.安装 以go版本的ethereum进行安装 brew tap ethereum/ethereum brew install ethereum # 如果希望基于ethereum的de ...

  5. docker 搭建以太坊私有链搭建

    最近区块链,火得不行,身边也有朋友准备玩这个,说是搭了一个星期,没有把环境搭建起来,叫我帮忙看看环境怎么搭建 于是我找到了官方的地址 https://github.com/ethereum/go-et ...

  6. CentOS7搭建以太坊私有链

    1. 环境准备:Win10 64位安装 VM VirtualBox,操作系统版本: CentOS-7-x86_64-Everything-1611.iso(7.71G). 切换root账号,方便安装程 ...

  7. 区块链入门(2):搭建以太坊私有链(private network of ethereum),以及挖矿的操作..

    在做一些测试工作的时候, 为了方便控制以及更快的进入真正的测试工作,可能需要搭建一个私有的以太坊网络. 而以太坊节点之间能够互相链接需要满足1)相同的协议版本2)相同的networkid,所以搭建私有 ...

  8. ubuntu系统搭建以太坊私有链

    1.安装curl.git apt-get update apt-get install git apt-get install curl 2.安装go curl -O https://storage. ...

  9. win7环境搭建以太坊私链

    如何创建私链: 创建创世配置文件: 首先需要创建一个“创世”json配置文件,此文件描述了创世区块的一些参数.下面就是文件中的内容: { "coinbase": "0x0 ...

随机推荐

  1. openvpn 上外网

    Openvpn-2.2.2 实施记录 最终现象: Linux路由: [root@iZrj961wb7816wke73ql7qZ openvpm]# route -n Kernel IP routing ...

  2. 你知道CAN/RS-485总线为什么要隔离吗?

    您在使用CAN或RS-485总线进行调试时,是否遇到过偶尔通信出错?或者接收不到数据?一直正常使用的总线,突然出现大范围的错误,或者节点损坏?您还在为这些问题不知所措,摸不着头脑吗?使用总线隔离,或许 ...

  3. typename在C++中的用法

    . //在C++中typename一般用来声明模板的模板参数(template parameter): template<typename T> class X; //T是一个模板参数 . ...

  4. PHP访问数缓存处理

    利用Redis或Memcache作为MySQL的缓存,采用是ThinkPHP框架. 方法一 采用ThinkPHP的S方法: $savedata['uid']=session('uid'); $save ...

  5. Source Insight 创建工程(linux-2.6.22.6内核源码)

    1. 软件设置 安装完Source Insight,需要对其进行设置添加对“.S”汇编文件的支持: 2. 新建linux-2.6.22.6工程 1)选择工程存放的路径: 2)下载linux-2.6.2 ...

  6. 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd

    2017-2018-1 20155336 <信息安全系统设计基础>加分作业:实现mypwd 什么是PWD? 用man pwd查看: 用于打印当前工作目录的工作路径 1.命令格式:pwd[选 ...

  7. 【python3】爬取简书评论生成词云

    一.起因: 昨天在简书上看到这么一篇文章<中国的父母,大都有毛病>,看完之后个人是比较认同作者的观点. 不过,翻了下评论,发现评论区争议颇大,基本两极化.好奇,想看看整体的评论是个什么样, ...

  8. PyQt5 笔记(04):主窗口卡死问题

    本文基于:windows 7 + python 3.4 知识点: 1. 将 time.sleep 替换为 QTimer 2. 将 time.sleep 放入到 QThread 3. 使用 QThrea ...

  9. 使用Python代码处理Excel

    转载说明: 原文地址:http://my.oschina.net/alazyer/blog/223354 原文有十处左右的错误,修正后转载于此. 经验证,python 3.4.3下可用.请各位朋友明察 ...

  10. windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题

    在Windows7下调用vs2013生成的Caffe静态库时经常会提示Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer t ...