如何创建一个GETH节点(单节点,windows环境)
所有命令都是在powershell上执行的
1、创建“创世块”
初始化配置
创建一个 hdgenesis.json文件,拷贝到geth根目录
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x40000",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00",
"alloc": {}
}
参数说明如下图:
创建数据存放地址并初始化创世块
(同一个网络中,创世块必须是一样的,否则无法联通)
走到数据目录
cd E:\blockchain\private_chain_env\1_node
cat .\hdgenesis.json
初始化创世纪节点
geth --datadir ".\" init hdgenesis.json --datadir 参数是指定数据存放文件夹
2、启动一个网络节点
查看端口占用情况
netstat -ano | findstr "30303"
(查找所有占用30303端口的进程)
get-process -Id 11276
(如何能查到进程,说明已经开启了Mist.exe,将其关闭,否则geth命令无法执行)
执行命令
geth --identity "HDetherum" --rpc --rpccorsdomain "*" --datadir ".\" --port "30303" --rpcapi "db,eth,net,web3,personal" --networkid 95520 console
启动节点, 加上console 表示启动后,启用命令行;第二次也执行该命令
注意 networkid 95520,以太坊节点之间能够互相链接需要满足
1)相同的协议版本
2)相同的networkid
所以搭建私有网络最方便的方法就是通过geth命令中的--networkid选项,设置一个与主网不同的networkid(主网的networkid为1),这也是官方推荐的方法.
参数说明:
参数解析:
--identity 自定义节点名称
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象,一般为 db,eth,net,web3
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境
更多参数说明:(https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options )
执行结果:
在shell内,可以执行exit退出shell
验证:
1)telnet localhost 8545
ctrl+] 退出shell
quit退出telnet
2)netstat -ano | findstr "30303"
(查找所有占用30303端口的进程)
3)另外打开一个powershell的geth客户端访问
geth attach http://127.0.0.1:8545
(这种方式访问时,必须增加 personal选项 (资料来源于:https://ethereum.stackexchange.com/questions/3996/error-personal-unlockaccount-method-not-implemented))
4)通过mist客户端访问
5)示意图
3、账号管理
创建主账户 personal.newAccount(‘密码')
personal.newAccount("123456")
(geth console启动后,运行如上命令创建一个主账户(没有账户不允许挖矿),根据提示设置交易密码,创建成功后就可以使用console进行相关的单节点命令操作)
测试环境设置两个账号:挖矿账号和普通账号
account[0] -- 挖矿账户
account[1] -- 普通账户
查看账号
查询账户余额
思路:把账户赋值给某一个变量,同时查询账户中的余额
//查看挖矿账户余额
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)
//查看普通账户的余额
account1 = eth.accounts[1]
num1=eth.getBalance(account1)
4、挖矿
示意图
开始挖矿
miner.start()
停止挖矿
miner.stop()
查看结果
num = eth.getBalance(eth.accounts[0])
web3.fromWei(num)
5、转账
执行
查看挖矿账户余额
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)
查看普通账户的余额
account1 = eth.accounts[1]
num1=eth.getBalance(account1)
转账
//从baseAccount账户转给account1账户1eth
personal.unlockAccount(baseAccount,"123456")
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
// 查看账户余额
num = eth.getBalance(baseAccount)
num1=eth.getBalance(account1)
查看挂起的交易
eth.pendingTransactions
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
示意图
可能的错误解析
操作间隔过长
挖矿的shell需要 --rpcapi "db,eth,net,web3,personal" personal,另一个shell才能管理个人账户信息
6、其他geth命令
待续....
如何创建一个GETH节点(单节点,windows环境)的更多相关文章
- HierarchyId通过父节点创建一个新的子节点
--HierarchyId通过父节点创建一个新的子节点 CREATE TABLE #temp( node HierarchyID ); insert into #temp select '/' uni ...
- [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...
- JavaScript 创建一个 form 表单并提交
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- ROS学习记录(三)————创建一个简单的发布节点和订阅节点
暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. ...
- consul 多节点/单节点集群搭建
三节点配置 下载安装包 mkdir /data/consul mkdir /data/consul/data curl -SLO https://github.com/consul/1.9.5/con ...
- C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...
- .NET创建一个即是可执行程序又是Windows服务的程序
不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以 ...
- python使用__new__创建一个单例模式(单例对象)
#单例模式:使一个类只产生一个对象.他们的id地址都指向同一个内存地址 第一步:理解谁创建了对象 # 单例模式# 首先明白,我们在创建一个类的对象的时候,其实是调用的这个类的父类,即继承object, ...
- 一个简单的例子说明windows环境变量配置
关于win下环境变量的问题 配置环境变量其实就像是创建一个快捷键一样,我们把安装程序的路径告诉系统环境变量,这样下次我们在命令行中就可以直接使用一个简单的命令来调用我们安装的程序,因为此时计算机已经知 ...
随机推荐
- ctfhub技能树—信息泄露—git泄露—Stash
打开靶机环境 查看页面内容 使用dirsearch进行扫描 使用Githack工具处理git泄露情况 进入.git/refs目录 发现stash文件,使用notepad++打开文件 使用git dif ...
- 一句话木马拿下webshell
1.我们先建立一个简单的一句话木马文件,我们这里就命名为shell2吧. 2.因为提交的文件可能是有过滤的,我们这个靶场的这个题目就是禁止上传危险的文件类型,如jsp jar war等,所以就需要绕过 ...
- Graph Explore的使用介绍
我在Graph API开发中用的最多的测试工具就是Graph Explore,这个是微软开发的网页版的Graph API的测试工具,能满足我大部分需求. 访问网址是:Graph Explorer - ...
- [CPP] STL 简介
STL 即标准模板库(Standard Template Library),是 C++ 标准库的一部分,里面包含了一些模板化的通用的数据结构和算法.STL 基于模版的实现,因此能够支持自定义的数据结构 ...
- NOIP2020 T2 字符串匹配题解
首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...
- CMU数据库(15-445)-实验2-B+树索引实现(中)删除
3. Delete 实现 附上实验2的第一部分 https://www.cnblogs.com/JayL-zxl/p/14324297.html 3. 1 删除算法原理 如果叶子结点中没有相应的key ...
- JavaScript中创建数组的方式!
JavaScript中创建数组的方式! 利用数组字面量 // 1 直接量 console.log(Array.prototype); var arr = [1, 2, 4, 87432]; // 注意 ...
- 如何实现new,call,apply,bind的底层原理。
new做了什么? new是用来实例化对象的,当new了一个对象后 1.创建一个新对象 2.将构造函数的作用域赋值给新对象(this指向新对象) 3.执行构造函数里面的代码(为这个新对象添加属性) 4. ...
- Oracle19c的多租户笔记
Oracle19c的多租户笔记 1.多租户的概念 PDB(PLUGGABLE DATABASE)可以理解为我们Oracle11gR2的数据库,只不过是一个实例上面可以放置多个数据库了.名称为插件式数据 ...
- map 传递给函数的代价
https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/08.1.md map 传递给函数的代价很小:在 32 位机器上占 4 ...