以太坊的交易验证是否只依赖最后一个区块内的状态信息就可以 那么链上的前项区块保留对共识的意义是啥

首先,你要确保你现在接收到的区块是有效的。比如这个区块要是以太坊的,而不是以太坊经典或者某个其他什么以太坊的分叉。这就要通过一直追溯到创世区块来实现。其次,应该说是当前区块保存了状态的改变,只有配合之前所有区块,才能知道确切状态。
■网友
so,你怎么知道你接到的区块是对的呢?不过,你说的思路是可行的。现在以太坊有一种同步模式fast sync(也叫warp sync),采用的方法是在每1024个区块之后,设置一个pivot point,pivot point中通过mpt的形式保存所有的state,每次同步从之前1024~2048个区块中的pivot point区块开始下载并处理就可以了,不需要同步整条链。代码里好像是从当前区块之前1024~1536中的pivot point开始同步的,记不清了,可以看synchronizer。ps为什么被点灭了呢?
■网友
保证你这个区块是从前区块延伸的,也就是合法性。那么一个接一个往前查,总会查到创世区块(合法)或分叉的开端(对于原分叉不合法,对新分叉合法)或者不是正常区块(不合法)。不过warp sync倒是可以在pivot point的快照处直接同步,不需要同步整条链。

■网友
看了下以太坊的源码,同时找朋友聊了聊这个问题,大致如下
以太坊在共识过程中只依赖当前状态树(DB中),通过区块头不的状态树根hash + 地址 就可以获得节点状态信息在新节点加入时,从创始节点开始的状态根据延区块进行交易重放,直到最后的区块,生成最新的状态树每一个区块都有一个新的状态树根hash,这样数据库里面存储了N个(区块高度数)树信息保留区块信息和根信息,这样节点可以定位到任意节点进行交易回溯以进行分叉
■网友
区块链顾名思义就是由一个一个区块连接而成,那么他们怎么连接呢?区块的信息结构是由区块大小、区块头、交易数量、交易信息组成。区块与区块之间之所能够链接起来,关键就在于区块头。区块头的信息包括父区块的哈希值、区块中交易默克尔树根的根哈希值、时间戳、难度、随机数和版本号等。所以发展比特币的时候,中本聪就提出了简单支付验证发来减轻用户的存储负担和验证时间。简单支付验证不需要维护完整的区块链信息,只需要保存所有区块头部的信息即可进行支付验证。
而以太坊的智能合约只是一个事务处理模块和状态机构成的系统,它不产生智能合约,也不会修改智能合约,它的存在只是为了让一组复杂,带有触发条件的数字化承诺能够按照参与者的意志,正确执行。
智能合约的执行步骤:
1.多方用户区共同参与制定一份智能合约
用户A 在区块链上注册,得到公钥B和私钥A
用户B 在区块链上注册,得去公钥B和私钥B
用户AB根据需要,共同商定一份承诺,承诺中包含了双方的权利和义务,以电子化的形式,编程机器 语言,双方分别用各自的私钥签名,确保合约有效性。
签名后的合约,传入通过P2P网络扩散并存入区块链网络中。
2.合约通过P2P网络扩散并存入区块链
(1)合约通过P2P网络扩散,每个节点都会收到一份
(2)验证节点会把最近一段时间内保存的所有合约,一起打包成一个合约集合,并算出这个集合的哈希值,最后将这个集合组装成一个区块结构,扩散到全网。其它节点收到这个区块后,会通过哈希值的比较来进行验证,确保所有节点的合约集合达成一致。
(3)通过验证的合约才会最终写入区块链,验证的内容主要是合约参与者的私钥签名是否与帐户匹配
3.区块链构建的智能合约自动执行
【以太坊的交易验证是否只依赖最后一个区块内的状态信息就可以 那么链上的前项区块保留对共识的意义是啥】 (1)智能合约会定期检查自动机状态,将条件满足的推送到待验证的队列中等待共识执行
(2)进入验证的事务,会扩散到所有验证节点,通过进行签名验证,确保有效性,多数节点验证完成后,事务会被执行,并通知用户


推荐阅读