1,最大困惑:worldstate是个什么东西?
比特币里没有账户概念,所有余额均通过UTXO
计算而得。而以太坊和hyperledger里均有账户概念。以太坊的账户分为普通帐户和合约账户,每个账户对应有永久存储空间,存储该账户的以太币余额、bytecode、计数器(用于防止replay attack)、其它键值对等。hyperledger中账户即为chaincodeID
,每个被delopy的chaincode(chaincode是hyperledger中对智能合约的叫法)就是一个账户,每个账户也对应有永久存储空间,存储自定义的键值对。以太坊和hyperledger中的永久存储空间就是worldstate。
2,worldstate究竟存储在哪里?
这个问题会让比特币开发者更加困惑,因为对于比特币而言,每个节点维护一个完整的blockchain,除此以外再无其它数据需要存储。而对于以太坊和hyperledger而言究竟worldstate的信息(即账户的相关信息)存储在哪里?是在blockchain里面还是其它什么地方?即链上存储还是链下存储?答案是链下存储。事实上,以太坊和hyperledger的每个block会只是包含当前对应的worldstate整个数据集合的一个hash,称为worldstate-hash。以太坊worldstate完整数据则存储在~/.ethereum
,hyperledger的worldstate数据存储在/var/hyperledger/production/db
下。
3,出块速度不一样
这个大家应该比较清楚,比特币平均10分钟出一次(对于初学者稍微解释一下,是平均,不是固定。处理逻辑是只要矿工算出答案就立即出块,快到几秒、慢到几小时都有可能),以太坊是平均十几秒,而hyperledger默认是1个交易出一个块,也支持CommitTxBatch
模式,多个交易出一个块(只是我的理解,还未完全验证)。就是说没有交易时hyperledger是不出块的,比如1天都没有交易,则一天都没有新块生成。而比特币和以太坊不一样,即使没有交易也会出块(因为矿工自己会发布coinbase交易,赚取挖矿费)。
4,共识机制不一样
比特币是PoW的鼻祖,以太坊目前也采用PoW,hyperledger使用ibm版PBFT。PoW都需要设计代币(比特币和以太币,用于奖励矿工和防止攻击),PBFT则不一定,所以当前hyperledger没有内置代币。
5,以太坊和hyperledger支持SPV吗?
比特币的成功SPV功不可没。中本聪的天才之处体现在很多方面,SPV就是其中之一。如果没有SPV我相信现在已没有几个人玩比特币了。设想一下,下载一个钱包,要等好几天时间同步后才能使用,是一种什么样的体验!我还没有研究以太坊目前是否支持SPV。但是hyperledger目前是不支持的(目前讲的是fabric 0.6.1版本),不支持SPV将是个灾难!