#下载并安装Git、vim、gcc-c++、ntp组件、nodejs以及添加epel第三方安装源
yum update -y && yum install git bzip2 gcc-c++ ntp epel-release nodejs -y
#安装gmake
wget https://cmake.org/files/v3.15/cmake-3.15.2.tar.gz
tar zxvf cmake-3.15.2.tar.gz
mv cmake-3.15.2 /usr/local/
cd /usr/local/cmake-3.15.2
./bootstrap
gmake
gmake install
#配置环境变量
echo “export PATH=/usr/local/cmake-3.15.2/bin:$PATH” >> /etc/profile
source /etc/profile
cmake -version
#安装Golang
wget https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz
tar -C /usr/local -zxzf go1.10.2.linux-amd64.tar.gz
echo “export GOROOT=/usr/local/go” >> /etc/profile
echo “export PATH=/usr/local/go/bin:$PATH” >> /etc/profile
source /etc/profile
go version
#克隆并编译go-ethereum项目
cd /usr/local
git clone https://github.com/ethereum/go-ethereum.git
#或者用镜像网站将github.com替换为github.com.cnpmjs.org
git clone https://github.com.cnpmjs.org/ethereum/go-ethereum.git
cd go-ethereum/
#设置go语言的代理
go env -w GOPROXY=https://goproxy.cn
make all
echo “export PATH=$PATH:/usr/local/go-ethereum/build/bin” >> /etc/profile
source /etc/profile
geth version
#开启网络时间同步
systemctl enable ntpd
systemctl start ntpd
#打开Geth使用的8087和30303端口
systemctl start firewalld
firewall-cmd --zone=public --add-port=8087/tcp --permanent
firewall-cmd --zone=public --add-port=30303/tcp --permanent
#在root根目录下创建以太坊私链的根目录
mkdir joechain
cd joechain
#新建创世区块信息配置文件
vim genesis.json
{
“config”: {
“chainId”: 666,
“homesteadBlock”: 0,
“eip150Block”: 0,
“eip150Hash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“eip155Block”: 0,
“eip158Block”: 0,
“byzantiumBlock”: 0,
“constantinopleBlock”: 0,
“petersburgBlock”: 0,
“istanbulBlock”: 0,
“ethash”: {}
},
“nonce”: “0x0”,
“timestamp”: “0x5ddf8f3e”,
“extraData”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“gasLimit”: “0x47b760”,
“difficulty”: “0x00002”,
“mixHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“coinbase”: “0x0000000000000000000000000000000000000000”,
“alloc”: { },
“number”: “0x0”,
“gasUsed”: “0x0”,
“parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”
}
#mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.
#nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
#difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
#alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
#coinbase: 矿工的账号,随便填
#timestamp: 设置创世块的时间戳
#parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
#extraData: 附加信息,随便填,可以填你的个性信息
#gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
#创建以太坊私链根节点文档目录
mkdir data0
#初始化以太坊私链
geth --datadir data0 init genesis.json
#启动节点并进入控制台
geth --identity “joe” --networkid 5000 --datadir /root/joechain/data0 --http --http.port “8087” --http.api db,eth,net,web3,personal --http.addr 0.0.0.0 --allow-insecure-unlock --port “30303” --nodiscover console
#identity:节点的名称
#networkid:此网络标识符是一个任意值,用于配对同一网络的所有节点。该值必须不同于0到3(已经被活链使用)
#datadir:我们的私有区块链存储其数据的文件夹
#http和http.port:启用HTTP-RPC服务器并提供其侦听端口号
#http.api:http上的端结点提供的API
#http.addr:当想要实现从另一台电脑连接本电脑上开启的geth客户端时,需要将http.addr设置为本电脑的ip地址
#port:网络侦听端口号,节点彼此连接以传播新的事务和块
#nodiscover:禁用发现机制
#allow-insecure-unlock 新版本geth出于安全考虑默认禁止了HTTP通道解锁账户,要打开HTTP通道解锁账户需要加上该参数
#登录控制台
geth attach ipc:/root/joechain/data0/geth.ipc
#创建账户
personal.newAccount(“123456”)
eth.accounts
#查询账户余额
eth.getBalance(eth.accounts[0])
#开始挖矿,参数表示挖矿的线程数
miner.start(10)
#由合约文件生成java文件
1、构建私有网络
2、安装solc,用于solidity智能合约编译
npm install -g solc
3、切换到智能合约的路径编译智能合约(绝对路径不能有中文和空格)
solcjs.cmd joe.sol --bin --abi -o ./
4、根据bin,abi生成java代码(一定是bin在前abi在后)
web3j solidity generate joe_sol_JOE.bin joe_sol_JOE.abi -o 路径 -p pl.piomin.service.blockchain.sol