以太坊 私有链搭建 Geth+Mist钱包
近期在区块链的热潮推动下,我开始研究区块链技术,尤其是智能合约。可编程式的智能合约龙头老大非以太坊莫属了,其他的合约平台如 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钱包相关推荐
- docker 搭建以太坊私有链搭建
最近区块链,火得不行,身边也有朋友准备玩这个,说是搭了一个星期,没有把环境搭建起来,叫我帮忙看看环境怎么搭建 于是我找到了官方的地址 https://github.com/ethereum/go-et ...
- 如何在geth中创建genesis.json_基于以太坊的私有链搭建,mist+geth实现
以前让学生做毕业设计,今天有人问起来,就写一个小教程,说一说基于eth的私有链如何搭建.非常简单. 一.geth,mist 客户端下载 1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类. ...
- 区块链开发之搭建以太坊私有链
(一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...
- 如何搭建以太坊私有链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如何搭建以太坊私有链1 今天讲一下如何搭建以太坊私有连,当然了在你阅读这篇文章的时候,最好是有一定基础,比如知道什么是以 ...
- 以太坊区块链_以太坊区块链搭建与使用(一)-私有链
步骤 一.下载go语言,并配置环境变量 //以太坊源代码依赖的编译与运行环境 二.通过git clone以太坊源码(go-ethereum),并编译 一.go安装 step1:下载 官方(一般打不开) ...
- 区块链,使用 Go-Ethereum 搭建以太坊私有链
1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太 ...
- 在Ubuntu下成功搭建以太坊私有链挖矿并转账
前言 最近老师布置了一个任务,让我学习区块链的知识.刚开始乖乖的拿一本书看概念,有时候看书真的很无聊,我都睡过去好几回了.前几天老师说,你要是感觉看概念太无聊,就先尝试着搭一个以太坊私有链试一试.哇, ...
- 搭建以太坊私有链(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 ...
- 【手把手】如何在10分钟内搭建一个以太坊私有链?
在开发以太坊时,很多时候需要搭建一条以太坊私有链,这篇来自作者熊丽兵的文章,手把手教你10分钟内如何在Mac上进行搭建. 作者 | 熊丽兵 整理 | 科科 阅读本文前,你应该对以太坊语言有所了解,如果 ...
最新文章
- 收藏 | 一文打尽AI、机器学习网络资源!
- C++开源代码项目汇总
- Python_位_成员_身份运算符
- Qt Linguist 翻译
- 第九大陆服务器未找到文件,第九大陆服务器优化规则说明 拍卖行和寄售功能关闭公告...
- CCKS 2018 | 工业界论坛报告简介
- 多任务Python爬虫
- Python import容易犯的一个错误
- vsftp配置问题启示录
- 程序员软件工程常用的画图软件推荐
- 计算机abc分类法,ABC分类法.ppt
- dp动态规划分类详解
- excel两个指标相关性分析_相关分析与回归分析 Excel 和 R计算皮尔逊相关系数(Pearson correlation)...
- 基于拉丁超立方抽样与自适应策略的改进鲸鱼优化算法
- 密码学基础:Base64编码
- 【Python】windows下Eclipse中安装集成webpy框架
- 环评师c语言题目,C语言考试——编程题_文库吧
- Android 登陆界面
- 北大前沿交叉学院数据科学计算机,北京大学数据科学(统计学)考研经验-北大前沿交叉学科研究院考研...
- 【实战】FaceNet 人脸识别模型- 彭于晏和邓超人脸像吗
热门文章
- thinkphp5.1 利用 PHPMailer 发送邮件
- 苹果系统不能安装网上下载的软件怎么办?
- idea连接数据库的方法
- sched_clock
- 2010年智能手表的创意
- Centos7网络ip配置
- 苹果x屏幕出现一条绿线_部分用户反映苹果iPhone 12屏幕出现划痕|显示器|手机|显示屏...
- ArcMap 10.5.1发布高清影像地图服务并切片缓存
- ubuntu官方live cd和dvd下载地址
- 关于mybatis返回值使用包装类型还是基本类型