在以太坊上运行的应用逻辑也会出错吗?为什么需要所有节点一起来重新跑一遍逻辑来做一个共识?这样应用执行的时间是不是也会相应的特别长?效率不够高?

在以太坊上运行的应用逻辑也会出错吗?为什么需要所有节点一起来重新跑一遍逻辑来做一个共识?这样应用执行的时间是不是也会相应的特别长?效率不够高?

这里的出错包含两种类型,一种是应用逻辑出错,出错的结果也会得到共识确认,即参与共识的节点上运行的结果也是出错的,这种出错的状态在区块链上得到了共识。
另一种是以太坊自身的代码有问题,这就不是共识的问题,而是以太坊自己的软件需要更新的问题。这需要由以太坊的开发者修复bug后重新发布新的客户端软件,参与共识的节点同步更新即可,这种情况不需要共识。这和普通软件的升级类似,但不升级软件的节点是不能参与后续的共识的(即使用旧版本客户端不能在新的链上挖矿)。
为什么需要所有节点都在虚拟机上跑一遍相同的智能合约的调用(应用逻辑)?这是因为以太坊底层使用的数据库是分布式账本(内部数据结构是区块链)。分布式账本的特点是其他节点要对拥有记账权的节点所记录的数据(产生一个新的区块)进行验证确认以后才能承认数据是真实有效的,也就是新的区块得到了确认。因为区块上打包的数据包含智能合约调用所产生的数据(可看成交易数据,或者称为“事务”数据),所以这些数据也需要进行确认,确认的方法只能是运行一次智能合约的调用(只是调用它的一个方法或函数),看看数据是否一样,否则其他共识节点就不知道新的区块上记录的数据是真实正确的还是虚假错误的。所以这是区块链技术构建的应用平台的必然选择。
至于效率问题,智能合约实现的逻辑都是相对简单的,比起传统应用编写的代码要简单的多。这是因为参与以太坊的节点的算力是参差不齐的,所以不可能要求每个节点都可以快速地运行很复杂的计算逻辑,特别是存储方面(因为区块大小是有限制的),所以智能合约实现的程序在计算的复杂性上一般并不高(某些特例例外,有个合约的方法特意设计成需要耗费大量时间才能运算出结果,但这是应用逻辑本身就设计好要做的事情,但是这种应用逻辑在单一机器上运行一样也会很慢)。因此智能合约的某个方法运行起来是非常快的(通常是毫秒级的),当前参与挖矿的节点的算力完全可以满足计算要求,而参与共识的节点是并行的在各自的虚拟机上运行智能合约的调用,因此并不会耽搁太长时间。
真正影响时间的主要是网络延迟,在节点相互之间通讯、同步数据的过程中,节点数量越多,花在这个方面的时间就会越多,会比在单一机器上运行一段相同的方法调用慢很多。确定哪个节点负责打包新的区块的过程是耗费时间的主要源头(这段时间是为了让全网50%以上的节点都能够确认和同步新产生的区块),运行智能合约调用的时间相对这个时间几乎可以忽略不记。以太坊的拥堵,根本上也是因为它采用了POW共识机制。