资讯专栏INFORMATION COLUMN

Mac环境搭建以太坊私有链

张金宝 / 3042人阅读

摘要:原文地址石匠的为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链。网络在连接到其他节点的时候会用到,以太坊公网的网络是,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络。当设置为表示使用发布该链。

原文地址: 石匠的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 :1:1

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

>personal.unlockAccount("0xab04698365ed79ef22921edad8f6f516ca40cecb")

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95605.html

相关文章

  • 如何搭建以太私有

    摘要:本文首发于深入浅出区块链社区原文链接如何搭建以太坊私有链原文已更新,请读者前往原文阅读在开发以太坊时,很多时候需要搭建一条以太坊私有链,通过本文一起看看如何在上进行搭建。 本文首发于深入浅出区块链社区原文链接:如何搭建以太坊私有链原文已更新,请读者前往原文阅读 在开发以太坊时,很多时候需要搭建一条以太坊私有链,通过本文一起看看如何在Mac上进行搭建。 写在前面 阅读本文前,你应该对以太...

    J4ck_Chan 评论0 收藏0
  • Mac以太构建本地私有网络,解决Ethereum Wallet无法连接本地私有

    摘要:打开私有链文件夹下的日志文件,大概在行左右有个的地址。命令行启动命令私有链地址这样启动链接的仓库就是私有链了。 先上一张搭建好的私有链,Ethereum Wallet连接后的效果图 showImg(https://segmentfault.com/img/remote/1460000013635764); 待安装系统环境 系统:macOS 10.13.2Ethereum Wallet版...

    whinc 评论0 收藏0
  • 搭建以太本地开发环境

    摘要:本文所搭建的环境是在上的开发环境,其他操作系统上与此非常相似,依然有参考价值。作为一枚区块链开发工程师,本地的开发环境是必不可少的。因为我们是私有链,所以可以写的大一些,方便开发测试。 本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。 作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具: go-ethereum so...

    Ethan815 评论0 收藏0
  • 以太本地开发环境搭建

    摘要:本文所搭建的环境是在上的开发环境,其他操作系统上与此非常相似,依然有参考价值。作为一枚区块链开发工程师,本地的开发环境是必不可少的。因为我们是私有链,所以可以写的大一些,方便开发测试。 本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。 作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具: go-ethereum so...

    fancyLuo 评论0 收藏0
  • SegmentFault 技术周刊 Vol.41 - 深入学习区块

    摘要:和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。超级账本区块链的商业应用超级账本超级账本是基金会下的众多项目中的一个。证书颁发机构负责签发撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 从比特币开始 一个故事告诉你比特币的原理及运作机制 这篇文章的定位会比较科普,尽量用类比的方法将比特币的基本原理讲出来...

    qianfeng 评论0 收藏0

发表评论

0条评论

张金宝

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<