<aside> 💡 UTXO、Account、签名、重放攻击、Rollup、隐私
</aside>
区块链的tx分为两种模型,分别是比特币为代表的UTXO(Unspent Transaction Output)模型,和以太坊为代表的Account模型。前者适用于货币记账,后者适用于链上应用。

比特币的tx结构(Github)
const std::vector<CTxIn> vin;
const std::vector<CTxOut> vout;
const int32_t nVersion;
const uint32_t nLockTime;
一个tx包含一个或多个输入(Input)、一个或多个输出(Output)。以币安热钱包地址为例:

UXTO模型
支付流程:用户A支付金额n给用户B
m-n-fee
UTXO selection
UTXO模型的特点
隐私性强

比特币的多地址钱包
并发容易
结论
例子回顾:双花攻击(Double-spending Attack)


tx和state
以太坊的tx结构(Github)
From可以从签名V,R,S中算出来To是目标地址Value是转账金额Data字段会在调用合约的时候用上,记录调用的method和输入的参数Gas相关的字段是付给矿工的手续费Type hexutil.Uint64 `json:"type"`
// Common transaction fields:
Nonce *hexutil.Uint64 `json:"nonce"`
GasPrice *hexutil.Big `json:"gasPrice"`
MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"`
MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"`
Gas *hexutil.Uint64 `json:"gas"`
Value *hexutil.Big `json:"value"`
Data *hexutil.Bytes `json:"input"`
V *hexutil.Big `json:"v"`
R *hexutil.Big `json:"r"`
S *hexutil.Big `json:"s"`
To *common.Address `json:"to"`
记录State

key是地址:既可以是普通用户地址,又可以是合约地址
value的结构(Github)
Nonce uint64
Balance *big.Int
Root common.Hash // merkle root of the storage trie
CodeHash []byte
Nonce :从0开始,每发出一个tx,记录进tx,然后加1;用来保证tx的顺序执行和签名的唯一性Balance :该地址的余额Root:合约的数据库的hashCodeHash :合约的源码stateRoot字段,用于验证State
stateRoot验证通过tx花费的gas主要取决于:新增存储空间+验证所需计算
Account模型的特点(用富豪榜和Polygon的地址观察)
Nonce串行的、顺序的,无法并发Balance用完