我在网上发现了许多区块链实现,但它们真的是可以扩展的区块链吗?在这里我们可以看到,区块链是作为一个数组启动的
var blockchain = [getGenesisBlock()];
在这里我们可以看到相同的实现:
constructor() {
this.chain = [this.createGenesis()];
}
本文还推荐它:
constructor(genesisNode) {
this.chain = [this.createGenesisBlock()];
然而,这些实现中的任何一个都准备好进行扩展了吗?
从技术上讲,
根据ECMA-262第5版的阵列的最大长度由于ToUint32抽象操作,因此最长的数组可能具有232-1=4294967295=42.9亿个元素。
大小不是问题。以太坊只使用了700万块,比特币只使用了50万块,因此未来有足够的空间。我想的真正问题是,读取数组的最后一个元素需要多长时间,这是否可以扩展?在区块链中,"区块"结构总是需要读取最后一个区块的哈希,因此我认为随着它的扩展,它需要越来越长的时间来完成。
如果比特币和/或以太坊的区块链阵列没有更多的空间来存储区块,他们会怎么做?区块链会就此结束吗?
- 可伸缩性问题源于验证事务和在节点之间达成共识的成本。因此,访问某个块的成本并不是问题所在
- 区块链是而不是数组。从概念上看,它更像是一个链表
- 区块数量没有限制(但硬币数量有一个限制)。存储这些块的空间也不受限制
回答问题
是的,问题中给出的所有实现都不正确/不足以让区块链发挥作用。对于某些实现,您可以参考比特币的存储库或以太坊的