区块链2
区块链技术实验2
安装以太坊
sudo apt clear cache
sudo apt update
sudo apt-get install golang
sudo apt-get install make
sudo apt-get install git
sudo apt install build-essential
sudo apt-get install libltdl-dev
wget https://github.com/ethereum/go-ethereum/archive/refs/tags/v1.9.25.tar.gz
tar zxvf v1.9.25.tar.gz
获取压缩文件,并解压
设置go代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
cd go-ethereum-1.9.25
make geth
编译成功后添加path
nano .bashrc
#末尾添加
export PATH=”$PATH:/home/kali/go-ethereum-1.9.25/build/bin/“
#ctrl+x 输入Y保存后执行
source .bashrc
搭建私有链
nano /home/kali/genesis.json
#输入如下内容
1 |
|
相关说明
chainID:指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。
alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以,默认为空即可。
coinbase: 矿工的账号,随便填即可。
difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度。
extraData: 附加信息。这里要注意一下,新版本该值需要为16进制数据,以0x 开头。
gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们要做的是私有链,所以此处填最大。
nonce: nonce就是一个64位随机数(0x后一位为4个二进制位,故有16位),用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0。
timestamp: 设置创世块的时间戳。
初始化创世区块
mkdir /home/kali/privatechain
mv /home/kali/genesis.json /home/kali/privatechain
cd /home/kali/privatechain
geth –datadir data0 init genesis.json
#返回successfully wrote genesis state 即成功
成功生成创世区块
启动私有链
geth –identity “SCAU” –rpc –rpcport “8545” –datadir data0 –port “30303” –rpcapi “db,eth,net,web3” –allow-insecure-unlock –networkid 65534 –nodiscover console
‘’’
启动成功
创建账户
personal.newAccount(“0000”)
personal.newAccount(“1234”)
查看用户,我们创建了两个用户,并获取账号
personal.listAccounts
personal.listAccounts[0]
查看账户余额,没有挖矿的情况下显示为0
eth.getBalance(personal.listAccounts[0])
解锁我们的0号账户输入密码,就是我们创建账户时用的0000
personal.unlockAccount(personal.listAccounts[0]);
然后我们开始挖矿
miner.start()一般用这个就行
注意这里开始挖矿后会提示Generating DAG in progress:生成DAG,它是用于以太坊工作量证明PoW算法的数据集,需要花一些时间去生成,是一个比较大的文件,每当生成30000块才会更新
停止挖矿
miner.stop()
eth.accounts:枚举系统中的账户;
eth.getBalance():查看账户余额,单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.getTransaction():获取交易;
eth.getBlock():获取区块;
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
admin.addPeer():连接到其他节点;
挖矿成功后可以查看账户余额
打钱之前先解锁一下出钱的账户
personal.unlockAccount(personal.listAccounts[0]);
金额转换
amount = web3.toWei(1,’ether’)
eth.sendTransaction({from:personal.listAccounts[0],to:personal.listAccounts[1],value:amount})
交易没有发生,要在打包挖矿后才会发生
开始挖矿,交易成功