没有特点就是最大的特点:为了遵循泛化原则,我们拒绝将那些高级用例内嵌为协议的一部分,哪怕是经常使用的用例,也绝不这么做。如果人们真的想实现这些用例,可以在合约内创建子协议(如,基于以太坊的子货币,比特币/莱特币/狗币的侧链等)。比如,在以太坊中就缺少类似比特币中的 “时间锁” 功能。但是,通过以下协议可以模拟出这个功能:用户发送签名数据包到特定的合约中处理,如果数据包在特定合约中有效,则执行相应的函数。 不厌恶风险:如果风险的增加带来了可观的好处,我们愿意承担更高的风险(例如,通用的状态转换,出块时间减低 50 倍,共识效率,等等)。 这些原则指导着以太坊的开发,但它们并不是绝对的;某些情况下,为了减少开发时间或者不希望一次作出过多改变,也会使我们推迟作出某些修改,把它留到将来的版本中去修改。 区块链层协议 本节对以太坊中区块链层协议的改变进行了描述,包括区块和交易是如何工作的、数据如何序列化及存储、账户背后的机制。 账户 ,而非 UTXO 1 比特币及其许多变种,都将用户的余额信息存储在 UTXO 结构中,系统的整个状态由一系列的 “未花费的输出” 组成(可以将这些 “未花费的输出” 想象成钱币)(校对注:更好的一个比喻可能是 “支票”。)。每个 UTXO 都有拥有者和自身的价值属性。一笔交易在消费若干个 UTXO 同时也会生成若干个新的 UTXO;而交易受到下列有效性要求的约束: 1.每个被引用的输入必须有效,且未被使用过;2.交易的签名必须与每笔输入的所有者签名匹配;3.输入的总值必须等于或大于输出的总值。 因此,比特币系统中,用户的 “余额” 是该用户的私钥能够有效签名的所有 UTXO 的总和。下图展示了比特币系统中交易输入输出过程: 比特币所用的三式记账法 但是,以太坊抛弃了 UTXO 的方案,转而使用更简单的方法:采用状态(state)的概念存储一系列账户,每个账户都有自己的余额,以及以太坊特有的数据(代码和内部存储器)。如果交易发起方的账户余额足够支付交易费用,则交易有效,那么发起方账户会扣除相应金额,而接收账户则计入该金额。某些情况下,接收账户内有需要执行的代码,则交易会触发该代码的执行,那么账户的内部存储器可能会发生变化,甚至可能会创建额外的消息发送给其他账户,从而导致新的交易发生。 尽管以太坊没有采用 UTXO 的概念,但 UTXO 也不乏有一些优点: (责任编辑:admin) |