
交易模型与适用范围
区块链交易是按照协议规则提交、验证并记录的数据。理解交易步骤,需要先分清网络如何表示资产与状态。以太坊交易可以改变账户余额或合约状态;比特币普通交易通过消耗已有输出、创建新输出表达资产转移。两者可以用于解释共同概念,但具体字段和验证规则不能直接互套。
构造数据:账户与UTXO
以太坊交易包含接收地址、转移数量、nonce、输入数据和费用参数等信息。nonce是账户的顺序计数。比特币普通交易包含输入与输出,输入通过交易标识和输出索引引用先前的未花费交易输出,即UTXO。

这两种模型对应不同的检查问题:账户模型需要考虑账户状态与交易顺序;UTXO模型需要确认被引用的输出是否仍可花费,以及花费条件是否满足。钱包显示的余额背后,因此可能是不同的数据结构。

签名与哈希:授权和标识
数字签名让节点验证交易是否获得相应密钥的授权,无须公开私钥。比特币资料中的P2PKH示例通过公钥、签名和脚本条件完成验证;该示例不代表所有交易类型都采用同一结构。
签名与交易哈希承担不同职责:签名服务于授权验证,交易哈希用于标识和引用交易。获得一个交易标识,并不能据此判断交易已经被区块收录。签名验证也不能证明签署者理解了交易的实际含义。
广播、验证与执行
广播使交易在节点之间传播,等待被纳入区块。节点依据协议规则检查交易,传播和区块收录属于不同阶段。以太坊的待处理交易可进入交易池;涉及合约时,输入数据用于表达调用内容,EVM负责执行。比特币则通过脚本等规则检查输出的花费条件。
因此,已提交、已传播和已收录应分别理解。界面显示提交成功,通常不足以说明链上的处理过程已经完成。
费用与常见理解误区
以太坊使用Gas计量执行所需的计算资源,Gas上限与每单位Gas的费用上限是不同参数。转移数量描述资产转移,执行费用描述处理交易的成本,二者不能混为一谈。
查询合约是否都要支付链上费用?通过eth_call进行的只读查询不提交状态变更交易;同样的函数若在链上交易执行过程中被调用,则会消耗Gas。函数名称或只读属性,需要结合调用方式理解。
确认与最终性
交易进入区块之后,还需要理解所在区块的确认状态。以太坊区块具有最终性相关状态;不同网络对确认的定义和保障方式存在差别,不能用一个网络的术语概括所有链。
判断交易结果时,应把三个问题分开:交易是否被收录、预期操作是否执行成功、所在区块达到什么确认状态。这种区分能避免把广播回执或交易标识误读为完整的处理结果。