首页 百科知识 独立交易验证

独立交易验证

时间:2023-07-17 百科知识 版权反馈
【摘要】:比特币共识机制的第一个步骤是各个节点独立验证每个交易。通过以上过程,新建的交易被发送到网络中的邻居节点,并传播到整个比特币网络。但是,将交易转发给邻居前,接收到交易的比特币节点首先会验证它的有效性。如果其对应的交易不在孤儿交易池中,将其加入孤儿交易池。

比特币共识机制的第一个步骤是各个节点独立验证每个交易。在第5章中,我们研究了钱包软件通过收集UTXO,提供合适的解锁脚本,创建指派给新所有者的输出,从而创建新交易的过程。通过以上过程,新建的交易被发送到网络中的邻居节点,并传播到整个比特币网络。

但是,将交易转发给邻居前,接收到交易的比特币节点首先会验证它的有效性。这使得只有有效的交易才会在网络中传播,而无效的交易在第一个接收到的节点就被丢弃了。

每个节点都要遵守一个很长的规则列表来验证交易的有效性。

●交易的语法和数据结构必须正确。

●交易的输入和输出均不能为空。

●交易字节数的大小必须小于MAX_BLOCK_SIZE。

●每个交易输出的汇总价值必须在允许范围内(小于2100万比特币,大于0)。

●任何交易输入的哈希不能为0,N不能等于-1(也就是铸币交易不能被转发)。

●nLockTime小于或等于INT_MAX。

●交易字节数必须大于或等于100。

●交易中签名操作的数量必须小于签名操作的限制值。

●解锁脚本(scriptSig)只能将数字压入堆栈,锁定脚本(scriptPubKey)必须匹配isStandard格式(这将拒绝“非标准”交易)。

●交易池或者主分支的区块中必须存在匹配的交易。

●对于每个输入,如果引用的输出在交易池的其他交易中存在,交易必须被拒绝。

●对于每个输入,需要在主分支和交易池中查找被引用的输出交易。如果任何输入对应的输出交易不存在,那么这就是个孤儿交易。如果其对应的交易不在孤儿交易池中,将其加入孤儿交易池。

●对于每个输入,如果引用的输出交易是一个铸币交易的输出,必须至少经过COINBASE_MATURITY(100)确认。

●使用输出交易计算输入价值,检查每个输入价值以及汇总值,看其是否超过允许范围(小于2100万比特币,大于0)。

●如果输入价值汇总小于输出价值,拒绝这笔交易。

●如果交易费用太小以致无法加入一个空的区块,拒绝这笔交易。

●每个输入的解锁脚本必须基于相应的输出锁定脚本进行验证。

这些规则的细节可以在比特币标准客户端的函数AcceptToMemoryPool,CheckTransaction,CheckInputs中查到。需要注意的是,这些条件经常变动,比如添加新约束条件以防范新类型的拒绝服务攻击,或者放松某些规则以支持新类型的交易。

通过对每一个交易在接收后和传播前进行独立验证,每个节点都会创建一个有效新交易的池子(交易池),而不同节点间交易池内交易的顺序也会大致相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈