3、区块链与所有权:分布式账本的核心特性

聊所有权凭证,绕不开区块链。说白了,区块链就是一个谁都不能篡改的账本。我2017年第一次接触比特币源码时,最震撼的就是这个设计——它让「信任」从人转移到了数学。

3.1 分布式账本的核心特性

区块链作为分布式账本,有四个特性我每天都在用:

  • 去中心化:数据不存一家服务器上。我见过一个联盟链项目,甲方非要自己控制所有节点,结果被合作伙伴集体抵制——去中心化不是技术问题,是治理问题。
  • 不可篡改:一旦上链,想改数据?你得控制51%的算力或节点。嗯,理论上可能,但成本高到不现实。
  • 透明可追溯:每笔交易从哪来到哪去,链上清清楚楚。我做供应链溯源时,客户最看重的就是这条。
  • 共识机制:大家怎么达成一致?PoW、PoS、PBFT……各有各的适用场景。

核心理解:区块链不是数据库的替代品,而是信任机器。它解决的是「我怎么相信你没骗我」的问题。

3.2 UTXO模型 vs 账户模型

这两个模型,是区块链世界的「底层哲学分歧」。我当年从以太坊转去研究比特币时,被UTXO绕晕过好一阵。

UTXO模型(比特币)

UTXO全称是「未花费交易输出」。你可以把它想象成现金:你有一张10块、一张5块,想买12块的东西,就得把两张都花出去,找回3块。

核心规则:

  • 每笔交易有多个输入和输出
  • 输入必须是之前某个交易的未花费输出
  • 输入总额必须 ≥ 输出总额(差额是矿工费)
// 一个简化的UTXO交易结构
{
  "inputs": [
    { "txid": "abc123", "vout": 0, "amount": 10.0 },
    { "txid": "def456", "vout": 1, "amount": 5.0 }
  ],
  "outputs": [
    { "address": "1A1zP...", "amount": 12.0 },
    { "address": "1B2xQ...", "amount": 2.99 }  // 找零
  ]
}

我的经验:UTXO模型做并行处理特别爽。每笔交易只依赖之前的UTXO,互不干扰。我做过一个高性能支付系统,用UTXO模型轻松做到每秒几千笔。

账户模型(以太坊)

账户模型更像银行账户:你有一个余额,转账时直接扣减,系统帮你记账。

// 以太坊账户状态
{
  "nonce": 5,          // 交易序号,防重放
  "balance": "100.5",  // 余额
  "storageRoot": "...", // 合约存储
  "codeHash": "..."    // 合约代码
}

核心区别:

  • UTXO:关注「钱从哪来」,每笔钱都有来源证明
  • 账户模型:关注「谁有多少钱」,状态实时更新
对比维度 UTXO模型 账户模型
类比 现金 银行账户
并发能力 强(可并行验证) 弱(需串行处理)
隐私性 较高(地址可复用) 一般(余额公开)
智能合约 难实现 天然支持
典型代表 比特币、Cardano 以太坊、EOS

避坑指南:我曾经在一个项目中试图在UTXO上跑复杂业务逻辑,结果代码写得像意大利面。后来老老实实换了账户模型——选模型就是选战场,别拿UTXO做它不擅长的事。

3.3 资产发行协议:ERC-20与ERC-721

有了账本,怎么在上面发行资产?以太坊给出了标准答案。

ERC-20:同质化代币

ERC-20定义了可互换代币的标准。你的USDT和我的USDT,一模一样,可以互换。

核心接口:

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

我部署过十几个ERC-20合约,最常踩的坑是精度问题。ERC-20用18位小数,但有些项目用6位(USDT)或8位。跨链桥接时精度不匹配,资金直接卡死。

我的习惯:写ERC-20合约时,我一定加一个_beforeTokenTransfer钩子。这样后续加黑名单、手续费等功能,不用动核心逻辑。

ERC-721:非同质化代币(NFT)

ERC-721代表独一无二的资产。每个token都有一个ID,不能互换。你想想看,你的房子和我的房子能互换吗?不能。

interface IERC721 {
    function balanceOf(address owner) external view returns (uint256);
    function ownerOf(uint256 tokenId) external view returns (address);
    function transferFrom(address from, address to, uint256 tokenId) external;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

ERC-721有个「隐形炸弹」:safeTransferFrom会检查接收方是不是合约,如果是合约,必须实现onERC721Received接口。我见过有人用transferFrom直接转给合约,结果NFT永远锁死在里面。

特性 ERC-20 ERC-721
互换性 可互换 不可互换
唯一标识 无(靠余额) tokenId
典型用途 代币、稳定币 数字藏品、游戏道具
元数据 无标准 ERC-721 Metadata扩展

3.4 核心逻辑关系图

下面这张图,是我给团队培训时必画的。它把本章三个知识点串起来了:

区块链与所有权核心逻辑 区块链与所有权:核心逻辑关系 区块链(分布式账本) 去中心化 不可篡改 透明可追溯 共识机制 UTXO模型 账户模型 ERC-20(同质化) ERC-721(非同质化) UTXO模型天然适合ERC-20(现金逻辑),账户模型更适合ERC-721(状态管理) 但技术上,两种模型都可以发行两种资产

3.5 实战选择建议

你可能会问:那我到底该用哪个?

  • 做支付、结算系统:UTXO模型更安全、可审计性更强。比特币这么多年没出过大问题,不是没道理的。
  • 做DeFi、游戏、复杂业务:账户模型更灵活。以太坊的生态摆在那,工具链成熟。
  • 发行代币:ERC-20是标配。但如果你要发的是「一个萝卜一个坑」的资产,比如房产证、学位证书,ERC-721更合适。

最后提醒一句:不管选哪个模型,审计一定要做。我见过太多项目,代码写得花里胡哨,结果一个整数溢出漏洞,几百万美元直接归零。安全不是功能,是底线。