@轮子偷盗者 请注明转载出处
区块的持久化之BoltDB(一)在前面文章中,我们介绍说Bitcoin网络通过PoW共识以及选择最长链为主链来逐步达到共识,使得网络中各节点本地的区块链最终保持一致;同时,交易时节点会根据解锁脚本与锁定脚本...
@轮子偷盗者 请注明转载出处
区块的持久化之BoltDB(一)在前面文章中,我们介绍说Bitcoin网络通过PoW共识以及选择最长链为主链来逐步达到共识,使得网络中各节点本地的区块链最终保持一致;同时,交易时节点会根据解锁脚本与锁定脚本...
@Kevin陳大大 不可以,它只支持单一文件。
区块的持久化之BoltDB(五、完结篇)在上篇文章《区块的持久化之BoltDB(四)》中,我们分析了读写Transaction Commit时的各个步骤,其中重要的是与Bucket对应的B+Tree节点的旋转与分裂...
如果节点重启,侧链相关的utxo会丢失,会发生这种情况。
Btcd区块链的构建(五)在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
区块链的一致在于区块和utxoset的一致,这里说侧链只存在于内存中,严格来讲是指对应的utxos只在内存中,不会写入db。在maybeAcceptBlock中区块还是会写入磁盘。
Btcd区块链的构建(五)在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
对于一个"正常"节点,它打包的块中的交易"花费"的utxo,肯定是主链上的块中的交易的输出,所以如果主链是一致的,尽管接收节点收到的块是侧链,但其中的交易的input utxo一定要主链上;如果查找失败,说明主链不一致或者是恶意交易。
Btcd区块链的构建(四)上一篇文章我们介绍了maybeAcceptBlock()中将区块连入主链的主要步骤,其中checkConnectBlock()在区块最终写入主链前作了较为复杂的检查,本文将对...
谢谢指出,已经更正。
Btcd区块链协议消息解析介绍完Bitcoin P2P网络的组网机制后,本文将介绍Peer之间交换的协议消息。Bitcoin节点将Transaction和Block在全网广播,就是通过在Peer与Pe...
@lifeok 但是两个coinbase肯定不一样了
Btcd区块链的构建(四)上一篇文章我们介绍了maybeAcceptBlock()中将区块连入主链的主要步骤,其中checkConnectBlock()在区块最终写入主链前作了较为复杂的检查,本文将对...
谢谢,我更正一下。
Btcd区块链的构建(五)在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
@lifeok 区别就在于,undo coinbase交易时,redo不可能恢复;undo非coinbase交易时,redo可能恢复。
Btcd区块链的构建(四)上一篇文章我们介绍了maybeAcceptBlock()中将区块连入主链的主要步骤,其中checkConnectBlock()在区块最终写入主链前作了较为复杂的检查,本文将对...
@lifeok coinbase交易与非coinbase交易的一个主要差别在于coinbase是出块的时候产生并随着block一起传播的,而非coinbase交易产生后会在全网flooding,也就是说非coinbase交易可能被不同的“矿工”打包进不同的区块,而coinbase交易产生后就在固定的区块中。当发生“分叉攻击”时,如果coinbase交易所在的区块被从主链上删除,会导致该coinbase交易变成“unspendable”,以及从该coinbase开始的交易链无效;在分叉后,非coinbase交易可能被找包到了新的区块中,使得他的UTXO仍然在utxoset中,仍然是“spendable”状态。从这一点上讲,必须保证coinbase交易有足够多的确认,防止分叉后被从主链移除。
Btcd区块链的构建(四)上一篇文章我们介绍了maybeAcceptBlock()中将区块连入主链的主要步骤,其中checkConnectBlock()在区块最终写入主链前作了较为复杂的检查,本文将对...
@lifeok 删除主链上的块时,将区块交易的输出引用的utxoentry与要恢复的交易输入引用的utxoentry并不一样。utxoset记录了tx hash与utxoentry之映射,所在在处理当前块的时候,可以根据块中的交易hash从utxoset中查找到utxoentry;但是交易输入引用的utxoentry所对应的tx并不一定在当前区块中,如果不通过utxoset或者spendjournal,就需要在链上查找对应的交易。
Btcd区块链的构建(五)在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
在(view *UtxoViewpoint) connectTransaction()方法中,我们可以看到spendjournal是通过交易输入引用的utxoentry得到的,区块连上主链后,区块中交易花费的utxoentry如果被fully spent,将被从utxoset中移除,所以恢复的时候无法从输入引用的utxoentry得到。同时,uxtoset和spendjournal均是在数据库Bucket中的K/V对直接记录了tx hash或者block hash到utxoentry或spentTxOuts的映射,所以在操作utxoset或者spendjornal时,均不需要搜索区块文件来定位区块或者区块中的交易,从而加快查找的过程。
Btcd区块链的构建(五)在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
在《Btcd区块链的构建》系列文章中,我们展开介绍了ProcessBlock()中的各个步骤,它主要包含三个步骤:一是对区块进行完整性检查;二是检查区块是否满足写入区块链的各...
在《Btcd区块链的构建(三)》[https://www.jianshu.com/p/06fe9de09172]和《Btcd区块链的构建(四)》[https://www.ji...
上一篇文章我们介绍了maybeAcceptBlock()中将区块连入主链的主要步骤,其中checkConnectBlock()在区块最终写入主链前作了较为复杂的检查,本文将对...