Bootstrap

“构建以太坊超级集群:解锁区块链应用新纪元,引领未来金融科技潮流!“

一、环境准备

1. 虚拟机系统为 ubuntu 22.04

2. 将ubuntu 的软件镜像源更换为国内的镜像源(命令如下)

sudo vim /etc/apt/source.list (vim下载与使用自行百度)

将文件内容清空,然后复制下方代码粘贴,保存退出即可。

deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

3. 安装docker

参考CSDN博客:https://blog.csdn.net/justlpf/article/details/132982953

4. 安装golang

下载二进制包:All releases - The Go Programming Language 选择go1.20.5版本

解压安装包 :tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz

设置环境变量:

编辑profile文件:vim ~/.profile

在文件的最后加上:

export GOROOT=/usr/local/go

export GOPATH=$HOME /test

export PATH=$PATH:$GOROOT/bin:$GOPATH

运行命令:source ~/.profile

验证是否完成安装:go version

5. 安装jq

sudo apt-get install jq

6. 安装make

Sudo apt-get install make

二、获取ethereum及准备工作

1. 创建ethereum文件夹

2. 在ethereum文件夹中打开命令行,输入以下命令(一步一步输入)

git clone https://github.com/ethereum/go-ethereum.git

git checkout remotes/origin/release/1.13

make all

3. 设置环境变量

vim ~/.profile

在文件最后加入

export PATH=$HOME/ethereum/go-ethereum/build/bin:$PATH

保存退出

运行命令:source ~/.profile

再运行 geth version 会有以下输出:

4. 创建文件夹 ethereumNode,并在此文件夹下创建data,log文件夹以及genesis.json文件

在genesis.json文件中写入以下内容

{

  "config": {

    "chainId": 123454321,

    "homesteadBlock": 0,

    "eip150Block": 0,

    "eip155Block": 0,

    "eip158Block": 0,

    "byzantiumBlock": 0,

    "constantinopleBlock": 0,

    "petersburgBlock": 0,

    "istanbulBlock": 0,

    "muirGlacierBlock": 0,

    "berlinBlock": 0,

    "londonBlock": 0,

    "arrowGlacierBlock": 0,

    "grayGlacierBlock": 0,

    "clique": {

      "period": 5,

      "epoch": 30000

    }

  },

  "difficulty": "1",

  "gasLimit": "800000000",

  "extradata": "0x0000000000000000000000000000000000000000000000000000000000000000C1B2c0dFD381e6aC08f34816172d6343Decbb12b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",

  "alloc": {

    "账户1": { "balance": "1000000000000000000" },

    "账户2": { "balance": "1000000000000000000" }

  }

}

三、启动节点

本节将介绍用于设置由两个节点组成的简单专用网络的命令。这两个节点都将使用相同的创世块和网络 ID 在本地计算机上运行。每个节点的数据目录将命名为 node1 和 node2。

1.在ethereumNode文件夹中创建 node1,和node2文件夹

2. 创建node1和node2的账户,再当前目录下(ethereumNode)打开命令行输入以下命令:

首先设置创建node1的账户信息

geth --datadir node1 account new

设置密码后,会有以下输出

然后设置node2的账户信息

geth --datadir node2 account new

输出如下:

分别在node1,node2文件夹下创建一个password.txt文件,并写入账户的密码(自己设置的密码)

3. 将genesis.josn文件中的账户1和账户2替换为node1和node2的账户的公钥,不需要带前导”0x”

即如下:

"alloc": {

        " 8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84": {

            "balance": "0xad78ebc5ac6200000"

        },

        " 79ADDe508A582Fbb5209Aab633E67E820a3fD8D5": {

            "balance": "0xad78ebc5ac6200000"

        }

    }

4. 初始化节点

使用命令:

geth init --datadir node1 genesis.json

geth init --datadir node2 genesis.json

结果如下:

5. 配置引导节点

首先,新打开一个命令行终端

输入命令生成密钥:bootnode -genkey boot.key

输入命令,生成引导节点:bootnode -nodekey boot.key -addr :30305

让该终端一直运行,不能关闭该终端!!

6. 启动节点

在初始好的命令行终端中(有两个终端)

在node1的终端输入:(注意替换enode以及账户的公钥,标黄部分)

geth --datadir node1 --port 30306 --bootnodes enode://9c21632cbb7560c03108326991021b96996ebfeccb58748effc43b22d9dcd300ad282954ac20a70d9f58aaaea63d5152d7f1791b9f513ab643de062b7d4e4ea3@127.0.0.1:0?discport=30305  --networkid 123454321 --unlock 0x8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84 --password node1/password.txt --authrpc.port 8551 --mine --miner.etherbase 0x8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84

在node2的终端输入:(注意替换enode以及账户的公钥,标黄部分)

geth --datadir node2 --port 30307 --bootnodes enode://9c21632cbb7560c03108326991021b96996ebfeccb58748effc43b22d9dcd300ad282954ac20a70d9f58aaaea63d5152d7f1791b9f513ab643de062b7d4e4ea3@127.0.0.1:0?discport=30305  --networkid 123454321 --unlock 0x79ADDe508A582Fbb5209Aab633E67E820a3fD8D5 --password node2/password.txt --authrpc.port 8552

7. 查看运行结果:

在ethereumNode文件夹中新开命令行终端:

运行:geth attach node1/geth.ipc 进入到以太坊节点node1的控制台中

输入:net.peerCount 查询节点是否连接到node2

输出如下:

输入admin.peers 查询对等节点的信息

输出如下;

输入:eth.getBalance(eth.accounts[0]) 查询自己的资金

然后可以使用以下命令解锁此帐户并将一些以太币发送到节点 2:

eth.sendTransaction({

  to: '账户地址',

  from: eth.accounts[0],

  value: 25000

});

查询指定地址的账户余额:

eth.getBalance('账户地址');

;