为什么选择放弃在block中加入sheet
先简单说下最开始的Vault,vault是一个从上个vault角度对一个范围内block的状态总结,包含一个叫sheet的map(s)来存放最终账户数据(公钥,数据,合约etc)。然后由于同步和验证等过程中因为将vault并入了block的chain中所以每次都要swich type相当别扭,所以删除了vault,将sheet放进了block里。然后就是出现如下弊端。
最开始独立的vault设计虽然在同步block时候会别扭,但是对于账户等的设计上完全可以做到“状态chain”。在Vault合并Block之后就出现了明显的问题:真的太大了。刚开始想的是放整个sheet,然后发现sheet太大了(相比其他),一个sheet就相当于N*Tx大小而且还每个块必出现。这恒定占据size对于VPS带宽压力非常大。VPS带宽的利用会极大地影响实际的TPS和使用体验。假设在未来正常情况下,我区块大小10M,区块时间10s,那么要求就是VPS的网速达到1M/s才能广播1个区块。在追求低区块时间的同时,追求减小区块体积的目标也应该落实。这样就和“存入状态”的设计相悖。
后来尝试了sheetHash。从功能上和结构上看是没有什么问题。但是从设计上来看,sheet在仅“账户-余额”的简单应用中大概率可行,但是在涉及了虚拟机和DAPP业务之后就力不从心:因为需要考虑执行时间。这也是为啥ethereum不让玩for遍历的原因。当一个新块已经成熟,上个块Block对应的任务还没做完,那这时候的sheet内容就是不正确的。另外,接收者的验证sheet阶段也会消耗时间,当多个Block广播时就会出现疲于验证。
虽然初衷是为chain的deleteable,但是这样就有点得不偿失。
未来做coin了会考虑重拾状态链,但是现阶段主攻还是wasm,schnorr这些技术融合的区块链引擎。