本文同步发布于我的博客
一、更换镜像源
如果你使用的镜像源是可用或者和我所用镜像一样的话就不用再更改,不过还是建议在后面加上我的镜像。
指令:sudo gedit /etc/apt/sources.list
打开镜像配置⽂件后,在你的镜像后面加上下面内容并保存退出
#deb http://mirrors.tuna.tsinghua.edu.cn/debian/ stable main
deb http://mirrors.ustc.edu.cn/ubuntu/ focal main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ focal main universe restricted multiverse #Added by software-properties
#默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
#预发布软件源,不建议启用
#deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
输⼊命令更新apt软件包 sudo apt-get update
二、环境搭建
1.安装aptitude
使用aptitude安装软件包可以方便解决一些依赖性等问题。
在下面的安装过程中如果遇到apt-get无法安装的情况建议使用aptitude代替apt-get安装。
sudo apt-get install aptitude
2.安装Go
参考链接中说明安装即可:
https://www.jianshu.com/p/f35f07ce7a22
安装完成截图:
3.搭建以太坊
命令:
sudo apt-get update
sudo apt-get install ethereum
使用如下命令查看以太坊版本:
geth version
4.安装Nodejs
sudo apt-get install -y nodejs
安装成功查看版本:nodejs -v
5.安装Solidity
sudo apt-get install npm #报错的话使用sudo aptitude install npm
sudo snap install solc
solc --version
出现如下图所示的内容则说明安装成功:
6.安装Truffle
参考链接:
https://segmentfault.com/a/1190000013950908
https://liyuechun.com/162.html
sudo npm install -g truffle
安装过程比较长,需要等待
成功标志:truffle --version
三、以太坊开发
1.私链部署
ubuntu环境下的私链部署与win10环境下基本无异,同样是建立创世区块,初始化私链
参考win10搭建ETH私链这篇文章即可
https://blog.csdn.net/Tree_sea/article/details/121990419
也可参考这篇文章:https://blog.csdn.net/qq_39869387/article/details/115432897
注:上面这篇文章启动私链的命令有问题,新版的geth已经没有rpc相关指令所以要用http指令来代替
创世区块:
genesis.json
{
"config": {
"chainId": 8434,
"homesteadBlock": 1,
"eip150Block": 2,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 3,
"eip158Block": 3,
"byzantiumBlock": 4,
"alien": {
"period": 2,
"epoch": 300,
"maxSignersCount": 5,
"minVoterBalance": 100000000000000000000,
"genesisTimestamp": 1536136198,
"signers": [
"0x393faea80893ba357db03c03ee73ad3e31257469",
"0x30d342865deef24ac6b3ec2f3f8dba5109351571",
"0xd410f95ede1d2da66b1870ac671cc18b66a97778"
]
}
},
"nonce": "0x0",
"timestamp": "0x5b8f92c2",
"extraData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
初始化:
geth --datadir ./私链文件夹名 init genesis.json
启动指令:
geth --http --http.api db,eth,net,web3,personal --datadir ./私链文件夹名
–networkid 1997 console 2>> log2020526.log
2.连接第二个geth终端
路径切换到私链文件夹中
geth attach geth.ipc
3.挖矿和交易
建议连接可视化钱包如小狐狸来查看余额
新建两个账户
personal.newAccount(“1234”);
personal.newAccount(“12345”);
挖矿
挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户,如下图所示:
设置挖矿地址指令:
miner.setEtherbase(填地址或者地址数组)
下图为设置用户2地址为挖矿地址(数组从0开始)
输入指令开始挖矿miner.start(1)
停止挖矿指令miner.stop()
在我们私链的文件夹外面的日志文件可以查看到挖矿信息
停止挖矿后查看余额
eth.getBalance(地址)默认返回的单位:wei
帐户转账
我们打算从eth.accounts[1]向eth.accounts[0]转账,转账之前需要先解锁eth.accounts[1]:
解锁账户:
personal.unlockAccount(eth.accounts[1],“12345”,0)
参考文章https://blog.csdn.net/YM_1111/article/details/112753262
报错
原因是新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户。我们在启动私有链那个地方加部分代码:
–allow-insecure-unlock
退出原来的控制台指令exit(直接关闭原来挖出的区块会回滚,余额也会清零!)
整体指令:geth --http --http.api db,eth,net,web3,personal --datadir
./myblockchain --networkid 1997 console 2>> log2020526.log
–allow-insecure-unlock
重新解锁并转帐:
eth.sendTransaction({from:eth.accounts[1],to:eth.accounts[0],value:web3.toWei(1,‘ether’)})
查看余额发现账号[0]的余额仍旧为0,这是因为我们虽然发起了交易,但并没有矿工挖矿打包交易。
查看等待打包的交易
txpool.status:查看交易池中等待被打包的交易
txpool.inspect.pending:查看已提交但还未被处理的交易,pending表示已提交但还未被处理的交易
eth.getBlock(“pending”, true).transactions:查看当前待确认交易
打包(挖矿)
启动挖矿:
miner.start()
查看账号余额:
eth.getBalance(eth.accounts[0])
查看交易池:
txpool.status
推荐查阅文档及链接
https://geth.ethereum.org/docs/rpc/server 官方文档
http://cw.hubwiz.com/card/c/geth-rpc-api/ 中文API文档
https://ethereumdocch.readthedocs.io/zh/latest/account-management.html 中文文档
参考链接
https://blog.csdn.net/YM_1111/article/details/112753262
https://blog.csdn.net/qq_39869387/article/details/115432897
大佬的一个专栏(智能合约): https://blog.csdn.net/ym_1111/category_10740923.html
https://blog.csdn.net/ambtious_/article/details/105184779