以太坊私有链搭建(Geth版本1.9)

以太坊通过The Merge转变为PoS权益证明,所以这里选用了一个较早的版本geth1.9,此版本支持PoW工作量证明。

什么是区块链呢?

区块链是一种基于密码学原理的分布式账本技术,其核心是将数据打包成按时间顺序连接的“区块”,并通过去中心化的网络节点共同维护和验证。每个新区块包含前一个区块的哈希值,形成不可篡改的链式结构;节点之间通过共识机制(如工作量证明或权益证明)确保数据一致性,无需依赖中心化机构即可实现安全、透明、可追溯的数据管理。

OK,简单说下原理,下面是实现。

私有链实现

虚拟机和网络的配置

这里我准备了两台Ubuntu的虚拟机

这里我的虚拟机网络配置都为仅主机模式,同时虚拟机中取消用dhcp自动配置ip,而选用ipv4手动设置为192.168.23.121和192.168.23.122,网关和子网掩码都为192.168.23.0和255.255.255.0

这样可以将两台虚拟机放入同一网段下实现联通

Ubuntu1配置:

Ubuntu2配置:

查看连通性,能ping通就ok

下载geth1.9版本

然后再两台虚拟机分别下载geth(这里我用的二进制文件,注意下载前先cd进一个创建好的文件夹,方便后续操作 eg:mkdir ~/install)

wget https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz

解压:

tar zxvf geth-alltools-linux-amd64-1.9.10-58cf5686.tar.gz

将可执行文件移动到geth-home下(没有记得mkdir创建:mkdir -p ~/geth-home)

mv geth-alltools-linux-amd64-1.9.10-58cf5686 ~/geth-home

~/geth-home 添加到系统的 PATH 环境变量中

export PATH=$HOME/geth-home:$PATH

将上面的环境变量设置写入 ~/.bashrc 文件中

echo `export PATH=$HOME/geth-home:$PATH` >> ~/.bashrc

上述步骤完成好之后geth verison查看下版本

出现上述结果就ok啦(注意两台虚拟机记得都要配置)

编写创世区块

然后我们来编写创世区块文件

vi genesis.json

创世区块内容:

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

两台虚拟机的创世区块文件一样,不用做修改

初始化和启动geth

wq!保存退出后初始化

geth init genesis.json --datadir ./data

初始化成功后启动geth,注意这里两台虚拟机的操作就不一样了!这里port和rpcport都要修改!

我这里Ubuntu1 port用的是3000端口,rpcport用的是8545端口

           Ubuntu2 port用的是3001端口,rpcport用的是8546端口

Ubuntu1启动命令:

geth --port 3000 --networkid 18  --datadir="data" --maxpeers=2 --rpc --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*"  --rpcapi="db,eth,web3,personal,admin,txpool" console --allow-insecure-unlock

Ubuntu2启动命令:

geth --port 3001 --networkid 18  --datadir="data" --maxpeers=2 --rpc --rpcport 8546 --rpcaddr 127.0.0.1 --rpccorsdomain "*"  --rpcapi="db,eth,web3,personal,admin,txpool" console --allow-insecure-unlock

出现如下字样就启动成功了,成功后会进入一个交互式控制台

创建账户

然后在私有链上创建用户并解锁用户账户(交易时必须要解锁)

Ubuntu1创建用户1:

创建:personal.newAccount("1")

解锁:personal.unlock("password","1",0)三个参数分别为密码,账户,什么时候解锁的时间

密码会在创建账户时生成,密码可以单独touch一个文件放一下,后面挖矿时也会用

Ubuntu创建用户2:

创建:personal.newAccount("2")

解锁:personal.unlock("password","2",0)

连接节点

然后准备连接两台虚拟机,在目标虚拟机(192.168.23.122)输入admin.nodeInfo.enode来查看enode,然后用另一台虚拟机连接,执行admin.addPeer()指令来连接指令,peercount=1即连接成功了另一台虚拟机。我的两台虚拟机ip分别为192.168.23.121和192.168.23.122,这里我想用第一台121去连接第二台122

挖矿和转账

准备挖矿

首先输入指令Miner.setEtherbase()指令设置矿工受益账户

并通过web3.fromWei(eth.getBalance(eth.coinbase), "ether")查看账户余额

Miner.setEtherbase("password")

web3.fromWei(eth.getBalance(eth.coinbase), "ether")

分别将刚创建的两个账号"1"、"2"设为受益账户

miner.start()开始挖矿(参数为挖矿时使用的线程数)

miner.start(1)

Persentage=100 后就可以开始挖矿了

可以通过eth.blockNumber确认是否正在挖矿,如果返回的值在增加,说明在挖矿

Miner.stop()停止挖矿,再次查看余额:

可以看到余额增加到了150

账户间的交易:

注:发起的转账是一笔交易,需要矿工打包挖矿后,交易才会被确认,所以需要再次挖矿实现交易

向另一台虚拟机的账户2发起转账:

Eth.sendTransaction({from:”a”,yo:”b”,value:web3.toWei(10,ether”),gas:21000,gasPrice:web3.toWei(20,”gwei”)})

这里分别替换a、b为账户1、2的密码

然后再次挖矿实现转账

miner.stop()后去到第二台虚拟机查看余额

完成转账。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值