以太坊私有链搭建_以太坊节点减少

2022-11-09 16:18:48 浏览数 (1)

网上关于如何搭建私链的文章很多,但是看来看去都是一样的,千篇一律,想找点不一样,新鲜的知识很难,本文总结归纳那些文章的内容,从使用私链的角度出发写了一篇比较全面的博客,内容包含以下几点:

  • windows单节点
  • windows多节点
  • linux创建节点并,windows远程使用linux节点
  • linux节点和Windows节点建立连接(网络原因,提供思路)

1.windows单节点

安装geth

下载地址:https://geth.ethereum.org/downloads/,下载之后是个 .exe文件,然后安装就好了,安装之后把geth的安装目录加入到系统环境变量的path里。验证是否安装成功,打开cmd窗口,输入 geth version 如果出来下面的内容,表示安装好了。(如果不加任何任何参数直接运行 geth ,会自动连接到以太坊公网,此时会开始同步区块)

初始化创世区块

新建个空文件夹,比如

然后在里面创建个first.json文件,文件名随意自己定吧,里面的内容如下:

代码语言:javascript复制
{
  "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"
}

然后打开cmd窗口,跳转到当前目录下执行命令:

代码语言:javascript复制
geth --datadir .nodedata0 init first.json

上面的命令的主体是 geth init,表示初始化区块链,命令可以带有选项和参数,其中–datadir选项后面跟一个目录名,这里为nodedata0,表示指定数据存放目录为 nodedata0, first.json是init命令的参数,就是刚才创建的json文件

出现Successfully表示初始化成功了(把这行命令保存为一个.cmd命令备用),这时候你会发现,你的目录下面自动生成了一个nodedata0的文件夹,目录如下:

其中geth/chaindata中存放的是区块数据,keystore中存放的是账户数据。

启动节点

执行命令:

代码语言:javascript复制
geth --rpc --nodiscover --datadir  "./nodedata0"  --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console 2>>geth.log

参数说明

代码语言:javascript复制
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--rpc 启用ipc服务,默认端口号8545
--datadir 区块链数据存储目录
--port 网络监听端口,默认30303
--rpcapi 表示可以通过ipc调用的对象
--rpccorsdomain 指定可以访问APi的domain地址,设置为“*”则任何地址都可以访问,这样做不安全
--networkid 网络标识,私有链取一个大于4的随意的值
console 打开一个可交互的javascript环境
2>>geth.log 把geth中的log信息导入geth.log,也可以不加这个,把信息直接输出在console里,这样直观
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
http://www.yaozihao.cn/2017/07/07/geth命令选项介绍/

出现javascript console说明节点启动成功了,geth.log文件也生成了

把这启动命令也保存start0.cmd命令,以后再启动这个节点直接双击这个cmd就行了

节点相关基本操作

  • 查看账户

这时候是没有账户的

  • 创建账户

personal.newAccount()

Passphrase是输入密码,下面的repeat passphrase是重复密码,创建的账户地址是:

0x8b2bd44cec6caedcc0664f965d895a17db326e0a

这是我们会看到nodedata0文件夹下面的keystore下面会多出个文件,就是保存账户信息

再查看账户列表,发现有账户了

如果你记不清楚personal有哪些方法,可以执行personal命令查看一下,其它的eth,miner也一样

  • 启动挖矿

miner.start()

看到null,不要慌,因为你的日志信息都保存到了geth.log文件里了,下面这小图标代表啥自己领会哈

挖了半天,到底挖了几个区块了?赚了多少以太币了?看下面的查询余额和查看区块数

另外说明一点,节点挖矿的以太币会自动存入到eth.coinbase账户里,默认是eth.accounts里的第一个,你也可以自己指定coinbase

  • 停止挖矿

miner.stop()

  • 查看账户余额

eth.getBalance

eth.accounts[0]得到的是账户地址而已,你可能被这么大的数值吓一跳,怎么这么多以太币?一个以太币等于10的18次方个wei,这里的数值是wei的个数,显示以太币的个数,可以用下面的命令,405个以太币,如果是真的,简直不要太爽,以太坊创始人V神以前肯定也在家里这么偷偷的挖了不少

  • 查看区块数

eth.blockNumber

81个区块,一个区块奖励5个以太币

  • 指定coinbase账户

先创建第二个账户,然后把第二个账户指定为coinbase,修改之前和修改之后已经改变

  • 转账

先创建第三个没有币的账户,从账户1转5个比特币到账户3里,有的同学会问,不是有个账户2吗,你怎么不用呢?因为转账发起了交易,然而发起交易仅仅是发起交易,交易要被确认需要打包进区块里,挖矿就是做这个的,挖矿本身的收益会存进coinbase账户里,而现在coinbase账户是账户2,所以不考虑账户2

再查看coinbase账户2的余额,不仅挖矿奖励,连交易费都收了哦

  • 退出

exit

验证私链

写了这么多,一顿操作猛如虎,这个私链到底能不能用?

我们用remix验证一样,连接这个私链

账户和余额信息会显示出来,如果你的工具找不到你的私链,请确认启动节点的参数中,有没有设置 –rpccorsdomain “*”

单节点就写到这里,下面是多节点的内容

2.windows多节点

我们在上面已经创建了一个节点了,下面我们直接创建第二个节点,然后连接两个节点,第二个节点的创建要满足下面条件

  • 创世区块的信息得一样

就是要用一样的.json配置文件初始化,因为区块链的本质就是所有节点记录的账本都是一样的,所以第一个区块的数据也得一致

  • rpcport 和 port参数必须和第一个不同

节点1 启动的命令没有这个参数rpcport,默认的值是8545,我们就用9545吧,port用30306

初始化创世区块

代码语言:javascript复制
geth --datadir .nodedata1 init first.json

自动创建了存放节点数据的文件夹nodedata1

启动节点

代码语言:javascript复制
geth --rpc --rpcport 9545 --nodiscover --datadir  "./nodedata1"  --port 30306 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console

nodiscover,ipcdisable,这两个参数很关键,windows没有ipcdisable参数,第二个节点启动会报错的。nodiscover让节点2不会被节点1自动扫描到。

节点1和节点2建立连接

我们用节点2主动添加节点1,两个节点只要一方主动建立连接就可以了,另一方会自动获得这个连接关系的,效果一样的

先查看节点1的enode信息,作为节点2 admin.addPeer()方法的参数

节点1的console:

节点2的console:

再看节点1的console:

再用remix连接一下我们的节点2吧

windows多个节点的私链就是这样了

3.linux创建节点并和windows节点建立连接

下载文件并上传服务器解压:https://geth.ethereum.org/downloads/

注意你的linux是多少位的就下载多少位的二进制文件,我的是32位的,我就下载32位的

然后把geth复制到/usr/bin目录下面,我们就可以使用geth命令了,geth help,出现下的界面,表示成功。

网上其它的文章都是先安装go语言,再下载geth源码编译安装,最终的效果都是一样的。

然后执行初始化区块的命令:

代码语言:javascript复制
geth --datadir nodedata2 init first.json

命令跟在windows差不多,自动生成的nodedata2文件夹也是一样的

启动节点,步骤跟在windous一样

代码语言:javascript复制
geth --rpc --rpcport 8545 --rpcaddr 65.49.132.28 --nodiscover --datadir  "/root/privatechain/nodedata2"  --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console

命令多了一个:

–rpcaddr 65.49.132.28

这个ip是linux服务器的地址,如果我们在windows本地想要访问服务器的私链,这个参数得加上

已经启动,我们可以在命令行窗口执行一些geth的命令

windows电脑上的remix访问一下linux的私链:

一个账户,地址也是一样的,it is working。

额外操作:把启动命令保存为linux可运行文件,方便以后启动

linux的私链运行成功了,接下来我们让window的节点和linux的节点连接起来(因为网络原因没实现,只有思路)

windows上已经有两个节点了,现在我们的linux要访问这两个节点,所以这两个节点的启动命令得加上–rpcaddr这个参数,但是这部分实现不了了,因为自己电脑连接的是路由器,直接用公网ip 端口号访问不到自己的电脑,要在路由器上做端口映射才能让服务器访问到自己的电脑,我没有路由器的登录权限,所以做不了了(有个什么软件,可以帮自己的电脑生成一个外网ip,有兴趣的朋友可以百度一下,然后继续走下去)

1.端口映射方法:http://service.tp-link.com.cn/detail_article_2441.html

2.节点建立连接方法应该跟windous连接点相连方法是一样的,关键是节点启动的时候加上–rpcaddr参数

3.祝好运!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184606.html原文链接:https://javaforall.cn

0 人点赞