
误区一:数据上链就代表事实真实
区块链能够帮助核验记录是否符合链上规则,却不能仅凭记录存在就证明现实事件真实发生。比特币开发者指南介绍了区块间的哈希关联:修改历史交易需要连带改变后续区块。这解释了历史记录受到保护的机制,但没有解决信息最初是否准确的问题。
理解这一点,可以把核验分成两个问题:记录进入系统后有没有被改变,以及进入系统前是否反映真实情况。涉及链外事实的应用,需要分别处理这两类问题。

误区二:智能合约可以自行读取任何外部信息
以太坊开发者文档说明,智能合约默认不能直接访问链外数据,通常需要预言机提供输入。节点执行相同交易时,需要基于一致的输入得到一致结果;如果各自读取不断变化的外部接口,就可能产生分歧。

因此,设计依赖天气或事件结果的应用时,除了合约规则,还需要定义数据如何进入链上。外部信息的采集与传递属于应用的一部分,不能因使用智能合约而省略。
误区三:接入预言机就消除了信任问题
预言机连接链上与链外,但仍需解决来源可靠性、传输完整性和持续可用性等问题。以太坊文档也将数据提供者的激励与责任列为重要考量。
评价这种连接是否可靠,不能只看是否采用多个节点,还要问这些节点是否依赖相同来源,以及意见不一致时如何处理。多个报告若都来自同一个错误源头,并不能仅凭数量证明事实正确。
误区四:自动执行等于业务结果正确
合约按照输入和代码执行,执行一致性与业务正确性是不同层面的要求。即使节点计算结果完全一致,错误输入仍可能触发不符合实际情况的动作。
对于依赖外部条件的应用,需要明确数据有效期、缺失数据的处理方式和触发条件。这些属于业务规则设计,不能由链上共识替业务方作出判断。
误区五:交易进入区块就绝不会变化
比特币开发者指南描述了竞争区块与分叉:同一高度可能出现不同区块,节点依据有效链的累计工作量选择历史。因此,被某个区块收录与历史获得进一步稳定,并非同一个状态。
常见问题是“看到区块高度是否足以确认区块身份”。在比特币中,高度并非全局唯一标识,区块哈希才用于区分具体区块。应用展示和核验记录时,需要保留这种区别。
适用范围:不要把一种链的机制套用于所有应用
上述外部数据访问说明针对以太坊智能合约语境,累计工作量与竞争区块的说明针对比特币机制。讨论其他系统时,需要重新核对执行环境、共识方式和数据来源。
判断区块链应用的能力边界,可以依次追问:系统保护什么记录,事实由谁提供,程序依据什么条件执行,以及发生分歧时如何处理。回答这些问题,比单独使用“不可篡改”或“去中心化”等标签更能说明技术实际解决了什么。