搭建以太坊私链(单节点,多节点,windows,linux)

1 篇文章 0 订阅
1 篇文章 0 订阅

 

 

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

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

1.windows单节点

安装geth

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

初始化创世区块

新建个空文件夹,比如

然后在里面创建个first.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"
}

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

geth --datadir .\nodedata0 init first.json

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

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

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

启动节点

执行命令:

geth --rpc --nodiscover --datadir  "./nodedata0"  --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console 2>>geth.log

参数说明

--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%E5%91%BD%E4%BB%A4%E9%80%89%E9%A1%B9%E4%BB%8B%E7%BB%8D/

出现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

 

初始化创世区块

geth --datadir .\nodedata1 init first.json

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

 

启动节点

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源码编译安装,最终的效果都是一样的。

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

geth --datadir nodedata2 init first.json

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

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

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.祝好运!

  • 14
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
搭建本地以太坊私链并连接钱包实现转账,需要以下步骤: 1. 安装Geth客户端 Geth是以太坊客户端软件,可以用于连接以太坊网络。可以从https://geth.ethereum.org/downloads/下载Geth安装包并安装。 2. 创建创世块 在创建私链之前,需要先创建创世块。可以使用Puppeth工具来创建创世块,该工具可以从https://github.com/ethereum/go-ethereum/releases下载。使用Puppeth可以选择网络ID、区块时间、初始难度等选项,并生成创世块配置文件。 3. 初始化私链 使用以下命令来初始化私链: ``` geth --datadir /path/to/chaindata init /path/to/genesis.json ``` 其中,/path/to/chaindata为私链数据存储路径,/path/to/genesis.json为创世块配置文件路径。执行该命令后,私链数据存储路径下会生成相应的数据文件。 4. 启动私链 使用以下命令来启动私链: ``` geth --datadir /path/to/chaindata --networkid 1234 --rpc --rpcport "8545" --rpcaddr "127.0.0.1" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --nodiscover console ``` 其中,/path/to/chaindata为私链数据存储路径,--networkid为私链的网络ID,--rpc为启用RPC服务,--rpcport为RPC服务端口,--rpcaddr为RPC服务IP地址,--rpccorsdomain为跨域访问配置,--rpcapi为RPC接口配置,--nodiscover为禁用节点发现。执行该命令后,会启动私链节点并进入控制台。 5. 创建钱包 在私链节点控制台中,使用以下命令来创建钱包: ``` personal.newAccount() ``` 执行该命令后,会提示输入密码,并返回钱包地址。 6. 解锁钱包 使用以下命令来解锁钱包: ``` personal.unlockAccount("钱包地址", "密码", 0) ``` 其中,"钱包地址"为钱包地址,"密码"为钱包密码,0为解锁时长,表示永久解锁。执行该命令后,会返回true表示解锁成功。 7. 转账 在私链节点控制台中,使用以下命令来转账: ``` eth.sendTransaction({from: "发送方钱包地址", to: "接收方钱包地址", value: web3.toWei(1, "ether")}) ``` 其中,"发送方钱包地址"为发送方钱包地址,"接收方钱包地址"为接收方钱包地址,web3.toWei(1, "ether")为转账金额,表示1个以太币。执行该命令后,会返回交易哈希值。 8. 查询余额 使用以下命令来查询钱包余额: ``` eth.getBalance("钱包地址") ``` 其中,"钱包地址"为钱包地址。执行该命令后,会返回钱包余额。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值