近期在区块链的热潮推动下,我开始研究区块链技术,尤其是智能合约。可编程式的智能合约龙头老大非以太坊莫属了,其他的合约平台如 hyperledger,EOS 相对来说没以太坊成熟,以后陆续在研究。好了,废话不多说了,开始以太坊私有链搭建。

一.geth,mist 客户端下载

1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类。一个是后台命令行客户端,如:geth(go语言),parity(Rust语言),他们是一个与以太坊网络交互的命令行客户端。

其余的命令行客户还有 ethereumjs-lib(javascript),pyethapp(python),ruby-ethereum(ruby) ....主要 geth 使用的比较普遍,这里我就使用geth作为命令行客户端。

2.mist 是属于可视化钱包,这么说吧,你在geth 客户端中生成的用户,以太坊币数量可以通过mist 钱包可视化展示。当然mist 不只有这些简单的功能,最重要的是能部署智能合约,发布,调用。其他还有很多轻钱包,如 lightWallet,metamask...

下面是geth和mist下载地址,这里我使用的是windows系统安装。

Geth :  https://geth.ethereum.org/downloads/    ## 本篇使用1.8.2,免安装zip

Mist :  https://github.com/ethereum/mist/releases   ## 本篇使用0.10.0,免安装zip

二.创建以太坊初始区块文件 genesis.json

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

  

chainId : 以太坊区块链网络Id,ethereum主链是1,私有链只用不要与主链冲突即可。
alloc : 预留账户,如下"alloc":{"0x0000000000000000000000000000000000000001":{"balance":"121312321"},"0x0000000000000000000000000000000000000002":{"balance":"121312321"},}
Coinbase: 旷工账户
Difficulty: 挖矿难度,0x400,这个是简单。
extraData:相当于备注
gasLimit:最小消耗gas
nonce : 64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求
parentHash : 上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0
Timestamp : 时间戳

三.初始化区块节点

geth --datadir  data0  init  genesis.json

data0 是当前文件夹存储节点数据,注意:不要使用其他文章介绍的“%cd%\chain”目录

四.启动geth客户端节点

注意:在geth安装目录下执行

geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpcport "8486" --port "30304" --networkid "29382" console

  使用命令 geth -h 可以查看geth 相关的帮助文档。这里我说几个常用的属性。

  --Identity : 节点身份标识,起个名字

   --datadir : 指定节点存在位置,“data0”

  --rpc : 启用http-rpc服务器

   --rpcapi : 基于http-rpc提供的api接口。eth,net,web3,db...

    --rpcaddr : http-rpc服务器接口地址:默认“127.0.0.1”

   --rpcport : http-rpc 端口(多节点时,不要重复)

  --port : 节点端口号(多节点时,不要重复)

  --networkid : 网络标识符 随便指定一个id(确保多节点是统一网络,保持一致)

下图启动配置信息说明:

五. geth 常用命令

#创建账户

   personal.newAccount("123456")

#获取账户数组

eth.accounts

#解锁账户,转账时可使用

personal.unlockAccount(eth.accounts[0], "123456")

#节点主账户

eth.coinbase

#查看账户余额

eth.getBalance(eth.accounts[0])

#启动,结束挖矿,写区块

miner.start(),  miner.stop()

下面是运行miner.start() 开始挖矿的运行示意图。

六.配置多节点服务

单个节点运行太霸道,不能成为中心化,咱们给私有的以太坊网络在添加一个节点

1.再初始化一个节点

geth --datadir data1 init genesis.json

“data1”作为新节点的存储目录,同样使用 genesis.json作为初始化文件

2. 启动新节点

geth --identity "TestNode2" --datadir "data1" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --ipcpath "data1\geth\geth.ipc" --rpcport "8487" --port "30305" --networkid "29382" console

3. 给新节点创建一个账户,否则无法启动挖矿

personal.newAccout(“123”)

4.查看:新节点enode信息,使用你本机ip替换[::]

5.重要:主节点添加新节点,使两节点连上同一个私有链上

admin.addpeer("enode://d4f64272de882d2e2ccefc6466c6580ddecd253f5c9d87f977ac3881cbea7b141c07681ea605c53af5815cbfc25b5138b9ddb07be61b757850a55b7197939ba4@192.168.1.175:30304")

   这里"enode://......." 填写你节点 admin.nodeInfo.enode 的信息

6. 如何确保两节点已连接

首先使用命令admin.nodeInfo,查看结果是否为空[],另外在其中一个节点启动挖矿命令 miner.start()

如果出现如下图所示,则两节点则已经连通

至此我们的节点钱包里有不少eth,可惜是私有链上的。下面就用可视化工具mist钱包查看,并使用mist钱包发布合约。

七. 启动mist钱包

首先默认启动主节点钱包,若是mist钱包不能打开。用命令启动, 进入mist钱包目录,用git Bash 在此启动。使用windows powershell启动很卡,没有安装git 客户端的,请先安装git 客户端。

启动mist 你可以看到右上脚有个net-private 说明启动的是私链钱包

2. 打开第二个节点钱包

 由于我使用的mist钱包,不能导入第二个节点钱包数据,所以我打算启动第二个节点的钱包,这里有个大坑!!!

 mist.exe --rpc ipc http://127.0.0.1:8545     ## 带ipc都是错的,很多网站,包括Ethereum github issue问答区都给出的错误要加ipc   (注意:这是错误的打开方式)

有两种方式打开多个节点钱包方式

(1)只读的http 方式打开钱包。不能转账,不能部署合约

mist.exe --rpc http://127.0.0.1:8545

(2)以rpc方式打开访问ipc接口方式打开mist钱包

mist.exe --rpc \\\\.\\pipe\\data1\\geth\\geth.ipc   ##这是节点二指定的ipcpath路径, 可以看下我启动节点二的配置 --ipcpath

至此,我们可以将第二个节点的钱包打开,进行节点可视化转账交易。

八. mist钱包部署合约

下面是写的简单的合约案例

pragma solidity ^0.4.18;contract Token {mapping (address => uint) public balancesOf;address public owner;event LogownerWitidras(address addr,uint amount);function Token() public {owner = msg.sender;balancesOf[msg.sender] = 10000;}function transfer(address _to, uint _value) public {if(balancesOf[msg.sender] < _value) revert(); //避免转移出去的代币超过当前的存货if(balancesOf[_to] + _value < balancesOf[_to]) revert();//避免自己调用自己,或者递归调用balancesOf[msg.sender] -= _value;balancesOf[_to] += _value;}function mint(uint _amount) public {balancesOf[owner] += _amount;}//向当前合约存款function deposit() payable public returns(address addr, uint amount){//msg.sender 全局变量,调用合约的发起方//msg.value 全局变量,调用合约的发起方转发的货币量,以wei为单位。return (msg.sender, msg.value * 1 ether);}modifier onlyOwner{if(msg.sender!=owner){revert();}_;}function getContractAddrees() public constant returns (address){return this;}function withdrawFromContract(address _toAddr,uint amount) public onlyOwner{_toAddr.transfer(amount * 1 ether);emit LogownerWitidras(_toAddr,amount * 1 ether);}//获取合约账户余额function getContractBalance() public constant returns (uint){return getContractAddrees().balance;}function getAddressBalance(address addr) public constant returns(uint){return addr.balance;}
}

View Code

点击部署,在矿池中产生一个待开采区块。启动miner.start() 挖矿。

 

待确认完毕,则合约部署完毕。具体的合约调用,我就不在本篇文章赘述了。

好了初步的以太坊客户端应用搭建完毕,之后还会陆续更新solidity 合约代码类文章,欢迎小伙伴们继续关注。

~~~转载请注明出处~~~

----------------------------------------请关注微信公众号“刻意链习”,持续带你理解更多的区块链技术------------------------------------------------------

                            

-----------------------------------------------------------------------------------------------------------------------------------------

更多参考文案

https://learnblockchain.cn/2017/11/29/geth_cmd_options/

https://g2ex.github.io/2017/09/12/ethereum-guidance/

https://medium.com/mercuryprotocol/how-to-create-your-own-private-ethereum-blockchain-dad6af82fc9f

https://souptacular.gitbooks.io/ethereum-tutorials-and-tips-by-hudson/content/private-chain.html

转载于:https://www.cnblogs.com/sumingk/articles/9030469.html

以太坊 私有链搭建 Geth+Mist钱包相关推荐

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

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

  2. 如何在geth中创建genesis.json_基于以太坊的私有链搭建,mist+geth实现

    以前让学生做毕业设计,今天有人问起来,就写一个小教程,说一说基于eth的私有链如何搭建.非常简单. 一.geth,mist 客户端下载 1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类. ...

  3. 区块链开发之搭建以太坊私有链

    (一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...

  4. 如何搭建以太坊私有链

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如何搭建以太坊私有链1 今天讲一下如何搭建以太坊私有连,当然了在你阅读这篇文章的时候,最好是有一定基础,比如知道什么是以 ...

  5. 以太坊区块链_以太坊区块链搭建与使用(一)-私有链

    步骤 一.下载go语言,并配置环境变量 //以太坊源代码依赖的编译与运行环境 二.通过git clone以太坊源码(go-ethereum),并编译 一.go安装 step1:下载 官方(一般打不开) ...

  6. 区块链,使用 Go-Ethereum 搭建以太坊私有链

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

  7. 在Ubuntu下成功搭建以太坊私有链挖矿并转账

    前言 最近老师布置了一个任务,让我学习区块链的知识.刚开始乖乖的拿一本书看概念,有时候看书真的很无聊,我都睡过去好几回了.前几天老师说,你要是感觉看概念太无聊,就先尝试着搭一个以太坊私有链试一试.哇, ...

  8. 搭建以太坊私有链(PoA)--CentOS7.6 on 阿里云ECS、macOS Catalina on Mac、Ubuntu20.04 on Raspberry Pi 4B

    使用Geth搭建以太坊PoA私有链 搭建以太坊私有链(PoA) 1 阿里云ECS上的操作步骤 1.1 准备环境 1.2 安装Geth及Tools 1.3 创建以太坊私有链的数据文件夹 1.4 用pup ...

  9. 【手把手】如何在10分钟内搭建一个以太坊私有链?

    在开发以太坊时,很多时候需要搭建一条以太坊私有链,这篇来自作者熊丽兵的文章,手把手教你10分钟内如何在Mac上进行搭建. 作者 | 熊丽兵 整理 | 科科 阅读本文前,你应该对以太坊语言有所了解,如果 ...

最新文章

  1. 收藏 | 一文打尽AI、机器学习网络资源!
  2. C++开源代码项目汇总
  3. Python_位_成员_身份运算符
  4. Qt Linguist 翻译
  5. 第九大陆服务器未找到文件,第九大陆服务器优化规则说明 拍卖行和寄售功能关闭公告...
  6. CCKS 2018 | 工业界论坛报告简介
  7. 多任务Python爬虫
  8. Python import容易犯的一个错误
  9. vsftp配置问题启示录
  10. 程序员软件工程常用的画图软件推荐
  11. 计算机abc分类法,ABC分类法.ppt
  12. dp动态规划分类详解
  13. excel两个指标相关性分析_相关分析与回归分析 Excel 和 R计算皮尔逊相关系数(Pearson correlation)...
  14. 基于拉丁超立方抽样与自适应策略的改进鲸鱼优化算法
  15. 密码学基础:Base64编码
  16. 【Python】windows下Eclipse中安装集成webpy框架
  17. 环评师c语言题目,C语言考试——编程题_文库吧
  18. Android 登陆界面
  19. 北大前沿交叉学院数据科学计算机,北京大学数据科学(统计学)考研经验-北大前沿交叉学科研究院考研...
  20. 【实战】FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗

热门文章

  1. thinkphp5.1 利用 PHPMailer 发送邮件
  2. 苹果系统不能安装网上下载的软件怎么办?
  3. idea连接数据库的方法
  4. sched_clock
  5. 2010年智能手表的创意
  6. Centos7网络ip配置
  7. 苹果x屏幕出现一条绿线_部分用户反映苹果iPhone 12屏幕出现划痕|显示器|手机|显示屏...
  8. ArcMap 10.5.1发布高清影像地图服务并切片缓存
  9. ubuntu官方live cd和dvd下载地址
  10. 关于mybatis返回值使用包装类型还是基本类型