https://decert.me/tutorial/solidity/intro
1 账户#
- 外部用户账户 (EOA)
- 合约账户
特点:
地址格式相同,20 字节的 16 进制数
交易只能由外部账户发起,所有 Gas (手续费) 由外部账户支付
2 账户状态#
四个基本组成部分:
nonce:
分两种 1 - 一个账户的交易数量,2 - 工作量证明 nonce (用于计算满足工作量证明的随机数)
EOA:从此账户发送的交易序号
合约账户:此账户创建的合约序号
balance:
拥有的以太币余额数量,单位:Wei, 1ether = 10^18 wei,以太币交易时,balance 会改变。EOA 和合约账户都有 balance;合约账户使用代码管理所拥有的资金,外部用户账户则是使用私钥签名来花费资金;合约账户存储了代码,外部用户账户则没有。
storageRoot:
Merkle Patricia 树的根节点哈希值。Merkle 树会将此账户存储内容的哈希值进行编码,默认是空值。
codehash:
账户代码的 hash 值。
合约账户:合约代码被 hash 计算后的结果作为 hashcode 保存
EOA:空字符串 hash 值
可视化示例来总结上述内容:
3 以太币#
以太坊的货币,类似于法币中不同的面额,用户最常用的是 ether,开发者常用的是 wei,wei 是以太币中的最小单位,还有两个单位是 finney 和 szabo,wei 的衍生单位:Kwei、Mwei、Gwei
1 ether = 10^3 finney(即1000 finney)
1 ether = 10^6 szabo
1 ether = 10^18 wei
1 Gwei = 10^9 wei
1 Mwei = 10^6 wei
4 以太坊虚拟机 (EVM)#
一种虚拟计算机,用于执行智能合约与 Dapp,EVM 是以太坊核心组件之一,负责处理和执行智能合约代码。
工作原理与传统虚拟机类似,它专门用于区块链和智能合约。他是以太坊上的自动化合同。
执行智能合约:将智能合约字节码加载到内存,按照预定规则执行。
gas:防止恶意代码无限循环消耗资源。
5 以太坊客户端#
是连接到以太坊网络的节点程序,EVM 是客户端的重要组成,运行节点程序,即可成为以太坊网络节点之一。
两个层次
执行层:
负责处理交易执行,包括智能合约的部署执行
共识层:
负责处理共识算法,即出块和交易
执行层客户端:
Geth(官方 - Go 语言实现)、Nethermind(C# 实现)和 Erigon(Go 语言实现)。这些客户端用于处理以太坊网络上的智能合约操作和交易执行。
共识层客户端:
Prysm(Go 语言实现)和 Lighthouse(Rust 实现)。这些客户端用于参与共识过程,确保区块链网络的一致性和安全性。
6 钱包#
管理账户的重要工具,可以使用钱包创建账户、交易签名,连接到区块链节点来执行交易。钱包本身并不存储用户的资产,而是管理访问这些资产的密钥和签名功能。
常见的移动端钱包 ImToken、Trust Wallet
网页钱包:metamask、Phantom (Solana)
7 Gas 机制#
防止恶意行为而引入,衡量执行操作需要的工作量的单位。相当于手续费
8 以太坊交易#
三种类型
- 普通交易
- 创建合约
- 调用合约函数
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
"value": 0.0005,
"data": "0x" // 可以包含消息或留言
}
这是一个非常简单的普通交易,它将一定数量的以太币转移到指定地址,
如果愿意,还可以在交易中包含一条消息。
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85", // 合约地址
"value": 0.0,
"data": "0x06661abd"
}
调用智能合约函数的信息封装在DATA字段中,将此交易信息发送到要调
用的智能合约的地址。假设我们要调用前面的count()函数,传递的
是 count()函数的选择器。