Web3系统学习系列02-Ethereum 到底是什么?

Web3系统学习系列02-Ethereum 到底是什么?

Posted by 十渊 on 2026-05-10

Web3系统学习系列02-Ethereum 到底是什么?

一、Ethereum 到底是什么?

可以把 Ethereum 理解成:

一台全球共享、永不停机、所有人共同维护的状态机。

它做的事情非常简单:

1
2
3
输入:交易(Transaction
执行:EVM
输出:新的全局状态

这和你熟悉的:

1
2
3
请求
→ 服务处理
DB状态更新

很像。

区别在于:

普通后端:

  • 你的服务器执行
  • 你的数据库存储
  • 你可以改数据

Ethereum:

  • 全网节点一起执行
  • 全网共同保存状态
  • 已确认数据极难修改

一个直观类比

想象一个银行总账本。

传统模式:

1
银行自己维护总账

区块链:

1
2
3
全世界一万人各自保存完整账本副本
任何转账必须所有人验证
验证通过才记账

这就是“去中心化”。


二、账户(Accounts)

Ethereum 有两种账户。


1. EOA(Externally Owned Account)

外部拥有账户。

就是普通钱包地址。

比如你用:

MetaMask

创建的钱包。

特点:

  • 有私钥
  • 能主动发交易
  • 能签名

类似:

你的银行卡 + U盾

你本人授权,才能转账。


它长这样

1
0x742d35Cc6634C0532925a3b844Bc454e4438f44e

它能做:

  • 转 ETH
  • 调用智能合约
  • 部署合约

2. Contract Account(合约账户)

智能合约部署后形成的账户。

特点:

  • 没私钥
  • 不能主动发起交易
  • 只能被调用

像:

银行核心系统里的自动结算程序

它不会自己跑。

必须有人触发:

1
2
3
用户发交易
→ 调用合约
→ 合约执行

核心区别

项目 EOA Contract
有私钥
主动发交易 可以 不行
存代码 没有
用途 用户身份 业务逻辑

三、Transaction(交易)

这是最重要概念。

很多新人以为交易 = 转账。

不是。

在 Ethereum:

Transaction = 请求 EVM 执行一次状态变更

包括:

1. 普通转账

1
AB 转 ETH

2. 调用合约

1
2
3
transfer(...)
mint(...)
swap(...)

3. 部署合约

把 bytecode 写上链。


从 Java 视角:

交易就像:

1
POST /execute

但它有:

  • 签名
  • nonce
  • gas
  • 不可撤销

一笔交易包含什么


from

谁发起


to

发给谁


value

转多少 ETH


data

调用哪个方法 + 参数

类似:

1
transfer("0xabc", 100)

编码后会变成十六进制。


nonce

这个很关键。

它是:

账户交易序号

例如:

1
2
3
第1笔 nonce=0
第2笔 nonce=1
第3笔 nonce=2

作用:

防重放

如果没有 nonce:

攻击者可以重复广播你的一笔交易。

类似支付系统:

重复提交订单。


四、Gas(最容易搞混)

你一定要彻底理解。


为什么要 Gas?

因为执行代码要消耗计算资源。

比如:

1
for (i=0; i<1000000; i++)

如果免费:

有人可以写死循环拖垮全网。

所以必须收费。


Gas 的作用:

1. 支付算力成本

像云服务器计费。


2. 防止滥用

反垃圾机制。


五、Gas Limit vs Gas Price

这俩是高频面试题。


Gas Limit

你愿意最多消耗多少 gas。

类似:

1
接口超时时间

你设置:

1
最多执行到这里

如果不够:

交易失败。

但已消耗 gas 不退。

为什么?

矿工已经帮你算了。

像:

数据库执行了复杂 SQL,最后 rollback。

资源已经用了。


Gas Price

每单位 gas 多少钱。

类似:

抢占优先队列的竞价。

你出高价:

更快打包。


实际手续费

公式:

1
Fee = Gas Used × Gas Price

举例:

1
2
Gas Used = 21000
Gas Price = 20 Gwei

总手续费:

1
420000 Gwei

六、区块(Block)

交易不会立即上链。

会先进内存池:

Mempool

类似:

消息队列。

然后验证者打包:

1
2
3
4
tx1
tx2
tx3
tx4

形成一个 Block。


区块包含:

  • Block Number
  • Parent Hash
  • Timestamp
  • Transactions
  • State Root

你可以理解成:

金融系统里的:

一个批次清算文件


七、交易生命周期(重点)

你以后做 indexer 会天天接触。


第一步:创建交易

钱包构造:

1
2
3
4
5
6
7
{
from,
to,
data,
gas,
nonce
}

第二步:签名

用私钥签。

证明:

“确实是我发的”


第三步:广播

发给节点。


第四步:进入 Mempool

等待打包。


第五步:打包进区块

状态发生变化。


第六步:确认(Confirmations)

后续区块继续追加。

例如:

1
2
3
4
block 100 ← 交易在这里
block 101
block 102
block 103

3 confirmations

通常更安全。


为什么要确认?

因为可能发生:

Reorg(链重组)

这对你后面做监听非常重要。


八、EVM(Ethereum Virtual Machine)

这是 Ethereum 的执行引擎。

你可以理解成:

区块链版 JVM

对比:

JVM EVM
执行 Java bytecode 执行 EVM bytecode
每台机器执行 全网节点执行
不收费 每步收费(Gas)

Solidity:

1
function add(uint a, uint b)

编译后:

1
2
3
4
PUSH
ADD
STORE
...

EVM 执行。


九、为什么不可篡改?

核心不是“绝对不能改”。

而是:

修改成本极高。

如果你改某区块:

区块 hash 会变。

后面所有区块引用都会失效。

要重新生成后续所有区块,并压过全网。

成本巨大。


像:

你改银行流水第 100 页。

后面 1000 页都得重写,并让所有银行接受。

几乎做不到。


十、和你现在的 Java 金融经验怎么映射

你有巨大优势。

你会的 Web3 对应
MQ Event Logs
对账 链上状态校验
幂等 nonce
批处理 block processing
checkpoint block cursor
风控规则 on-chain monitoring
高并发 RPC/event ingestion

所以你转 Web3 Backend,比普通 Java 转要自然得多。

引用资料

以太币技术介绍 | ethereum.org