Web3系统学习系列02-Ethereum 到底是什么?
一、Ethereum 到底是什么?
可以把 Ethereum 理解成:
一台全球共享、永不停机、所有人共同维护的状态机。
它做的事情非常简单:
1 | 输入:交易(Transaction) |
这和你熟悉的:
1 | 请求 |
很像。
区别在于:
普通后端:
- 你的服务器执行
- 你的数据库存储
- 你可以改数据
Ethereum:
- 全网节点一起执行
- 全网共同保存状态
- 已确认数据极难修改
一个直观类比
想象一个银行总账本。
传统模式:
1 | 银行自己维护总账 |
区块链:
1 | 全世界一万人各自保存完整账本副本 |
这就是“去中心化”。
二、账户(Accounts)
Ethereum 有两种账户。
1. EOA(Externally Owned Account)
外部拥有账户。
就是普通钱包地址。
比如你用:
MetaMask
创建的钱包。
特点:
- 有私钥
- 能主动发交易
- 能签名
类似:
你的银行卡 + U盾
你本人授权,才能转账。
它长这样
1 | 0x742d35Cc6634C0532925a3b844Bc454e4438f44e |
它能做:
- 转 ETH
- 调用智能合约
- 部署合约
2. Contract Account(合约账户)
智能合约部署后形成的账户。
特点:
- 没私钥
- 不能主动发起交易
- 只能被调用
像:
银行核心系统里的自动结算程序
它不会自己跑。
必须有人触发:
1 | 用户发交易 |
核心区别
| 项目 | EOA | Contract |
|---|---|---|
| 有私钥 | 有 | 无 |
| 主动发交易 | 可以 | 不行 |
| 存代码 | 没有 | 有 |
| 用途 | 用户身份 | 业务逻辑 |
三、Transaction(交易)
这是最重要概念。
很多新人以为交易 = 转账。
不是。
在 Ethereum:
Transaction = 请求 EVM 执行一次状态变更
包括:
1. 普通转账
1 | A → B 转 ETH |
2. 调用合约
1 | transfer(...) |
3. 部署合约
把 bytecode 写上链。
从 Java 视角:
交易就像:
1 | POST /execute |
但它有:
- 签名
- nonce
- gas
- 不可撤销
一笔交易包含什么
from
谁发起
to
发给谁
value
转多少 ETH
data
调用哪个方法 + 参数
类似:
1 | transfer("0xabc", 100) |
编码后会变成十六进制。
nonce
这个很关键。
它是:
账户交易序号
例如:
1 | 第1笔 nonce=0 |
作用:
防重放
如果没有 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 | Gas Used = 21000 |
总手续费:
1 | 420000 Gwei |
六、区块(Block)
交易不会立即上链。
会先进内存池:
Mempool
类似:
消息队列。
然后验证者打包:
1 | tx1 |
形成一个 Block。
区块包含:
- Block Number
- Parent Hash
- Timestamp
- Transactions
- State Root
你可以理解成:
金融系统里的:
一个批次清算文件
七、交易生命周期(重点)
你以后做 indexer 会天天接触。
第一步:创建交易
钱包构造:
1 | { |
第二步:签名
用私钥签。
证明:
“确实是我发的”
第三步:广播
发给节点。
第四步:进入 Mempool
等待打包。
第五步:打包进区块
状态发生变化。
第六步:确认(Confirmations)
后续区块继续追加。
例如:
1 | block 100 ← 交易在这里 |
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 | PUSH |
EVM 执行。
九、为什么不可篡改?
核心不是“绝对不能改”。
而是:
修改成本极高。
如果你改某区块:
区块 hash 会变。
后面所有区块引用都会失效。
要重新生成后续所有区块,并压过全网。
成本巨大。
像:
你改银行流水第 100 页。
后面 1000 页都得重写,并让所有银行接受。
几乎做不到。
十、和你现在的 Java 金融经验怎么映射
你有巨大优势。
| 你会的 | Web3 对应 |
|---|---|
| MQ | Event Logs |
| 对账 | 链上状态校验 |
| 幂等 | nonce |
| 批处理 | block processing |
| checkpoint | block cursor |
| 风控规则 | on-chain monitoring |
| 高并发 | RPC/event ingestion |
所以你转 Web3 Backend,比普通 Java 转要自然得多。