智能合约
前言
- 学eth碰上好时代了,geth刚好在
1.13
和1.14
之间存在很大改动。而我下载的是1.14
版本,教程什么的都是旧版本的。对于我这个初学eth的来说非常的不友好。现在先来介绍一下geth1.13和geth1.14之间的改动。
改动1移除 personal
命名空间
- 在 1.14 版本中,
personal
命名空间中的许多功能被移除。尽管你可以通过--rpc.enabledeprecatedpersonal
标志继续使用一些功能,但在未来的版本中,可能会完全移除该功能。
改动2矿工命令
- 1.14 版本中,矿工相关命令有所简化,某些功能可能会在将来的版本中进一步修改或移除。
改动3API 更新
-
1.14 版本更新了一些 API,增加了对新的 Ethereum 改进提案(EIP)的支持。
-
geth1.13主要依赖的是PoW网络,PoS网络还没怎么实施,但是在
-
Geth 1.14:进一步简化了 PoW 的相关操作,并继续引入与 PoS 相关的支持,强调了向以太坊 2.0 的转型。
改动4配置文件
-
配置文件中的这个
Clique
在geth1.14被弃用 -
智能合约有一个开发环境,该开发环境为
geth
-
geth实际上是以太坊的客户端,是go语言开发的以太坊的客户端
-
使用geth可以连接到
mainnet
、testnet
、privatenet
,建议使用类unix
操作系统如linux
或者mac
,windows上运行geth
可能会有些问题 -
在配置文件出现如下配置会导致报错
-
ethash
共识算法,也是PoW的运行机制
1 | "clique": { |
- 而新版的最好要在配置文件中添加这一个配置,来标识你用PoS网络,要不然就会报错
1 | "terminalTotalDifficultyPassed": true, |
- 示例配置文件:旧版
1 | { |
- 示例配置文件新版:
1 | { |
改动5废除挖矿机制
- 在 Geth 1.14 及更高版本中,传统意义上的“挖矿”概念已经被替代为“验证”或“出块”。
- 所以geth1.14没有挖矿机制了
geth环境搭建
windows上安装(不推荐)
-
下面先配一个智能合约的环境,这里直接去官网下载:首页 |去以太坊
-
点击下载后会跳转到如下界面,然后点击下图红框
- 接下来就是安装了,基本上没啥问题,我这边安装没有额外安装一个开发工具。
- 安装好后就会出现
geth.exe
点击运行该程序即可
- 运行好后就会出现该环境
- 这里出现了没有添加环境变量的问题,手动添加环境变量。这里就不介绍如何添加环境变量了
linux上安装
方法1–ppa源安装
- 打开linux虚拟机,我使用的是
wsl2
,输入指令,等待下载安装完即可
1 | sudo apt-get install software-properties-common |
- 但是这里出现了一个问题,这个问题就是在国内使用ppa源下载网速非常的慢
- 所以我选择使用方法而下载
方法2–官网下载
- 继续来到他们官网这边Downloads | go-ethereum,往下滑会找到如下界面,选择
linux
下的文件
- 找到对应架构的程序,点击下载
- 下载到Windows上的指定文件夹
- 由于我使用的是
wsl2
,所以我可以将该文件移动到linux系统的文件目录里面
- 之后使用命令,将该文件包进行解压缩
1 | tar -xzvf geth-alltools-linux-amd64-1.14.11-f3c696fa.tar.gz |
- 解压缩后使用mv命令修改文件名
1 | mv geth-alltools-linux-amd64-1.14.11-f3c696fa geth |
- 然后添加环境变量,临时加入环境变量
1 | PATH=$HOME/geth:$PATH |
- 然后查看环境变量是否添加成功(永久加入环境变量)(建议使用)
1 | echo 'export PATH=$HOME/geth:$PATH' >> ~/.bashrc |
- 这下geth就安装完成了,使用
geth -h
也可以查看帮助了
geth使用
-
注意:不同版本的命令会不一样
-
在启动之前先熟悉一下geth的命令
-
连接geth到网络:
geth --datadir ./path/chain --networkid 1
,注意chain是一个文件夹--datadir
:用于指定在哪里存储区块链,默认路径为~/.ethereum
--networkid
:用于指定网络ID(默认为1)。1代表主网ID。非1的数字代表测试网络的ID。
-
对于
geth
与账户有关的命令
1 | eth.accounts //查看现有账户 |
geth
初始化测试
1 | geth --datadir ./chain init ./genesis.json |
- geth有两种模式,普通模式和开发者模式。开发者模式的好处就是能自动的去挖矿,出矿速度很快
- 如果启用geth开发者模式,就会先初始化一个账户,该账户里面会有大量的以太,该账户默认已经是解锁状态可以直接使用
普通模式启动
- 搭建私有链的步骤如下:
1 | 1.创建并配置一个创世块文件 |
- 我们先创建一个
chain
文件夹,该文件夹用于存放一些数据
-
接下来我们要自定义并初始化一个创世块
-
这时我们要进行一些配置文件,创建一个
genesis.json
,该文件与chain目录同级,创建如下内容,这里不同版本的geth配置文件会不一样,作为初学者尽量先使用AI跑出能用的json文件,先玩起来后面再理解config
:配置文件,里面的内容会逐一介绍
+
1 | { |
- 先输入命令初始化一下,在我们所创建的chain文件夹下执行如下命令
- 这里注意,在第一次init的时候Geth 会从
genesis.json
中创建新的创世块并写入到链数据库中。这时链的首个状态尚未完全更新,因而出现 “Head block is not reachable” 错误。 - 一旦创世块写入成功,再次运行
init
命令,Geth 发现链数据库已经包含了创世块,因此跳过了新建创世块的步骤,这时链头状态是正常的,ERROR
信息不再出现,显示初始化成功。
1 | geth --datadir ./chain init ./genesis.json |
- 通过
geth
控制台进行操作,使用如下命令就
1 | geth --identity chainpi --http --http.port 8545 --http.corsdomain "*" --datadir ./chain --port 30303 --nodiscover --http.api "db,eth,net,web3,personal,miner" --networkid 8888 --rpc.enabledeprecatedpersonal console |
- 在 Geth 中,8545 端口是默认用于 HTTP RPC (Remote Procedure Call) 的端口。当你启动 Geth 节点并启用 HTTP RPC 时,它会监听该端口,以便外部应用程序或用户可以通过 HTTP 请求与以太坊节点进行交互。
- 输入上方指令后就会出现如下界面
- 现在我查看账户,目前工作台还没有账户
1 | > eth.accounts |
- 接下来我们创建一个账户,输入
personal.newAccount("123456")
,下一行会返回你的账户
1 | > personal.newAccount("123456") |
- 我们可以使用如下命令来查看我们的账户,查看第一个账户
1 | > eth.accounts[0] |
- 还可以使用该指令查看所有账户
1 | > eth.accounts |
- 创建好账户后我们来查看该账户的余额,发现该账户的余额为0
1 | > eth.getBalance(eth.accounts[0]) |
开发者模式
MetaMask和Ethereum Wallet环境搭建
- MetaMask是一个去中心化的、分散的web3.0应用浏览器。
- Ethereum Wallet是一个只绑定了以太坊钱包的Mist浏览器(它只绑定了以太坊钱包一个应用)。
MetaMask环境搭建
- 直接去官网下载https://metamask.io/
- 进入官网后点击
- 然后再点击
- 然后在eg会提示你要不要安装
MetaMask
插件,同意安装即可 - 安装好后就会出现该网页
- 然后就是一步一步的注册账号
Ethereum Wallet环境搭建
智能合约
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!
评论