ETH: 重放攻击,用nonce记录交易次数,防止重放攻击,相同的交易次数不中

 

外部账户有账户余额和nonce,有私钥就有控制权

合约账户,不通过私钥控制,一个合约调用另一个合约,不能发起交易

 

 外部账户发起交易调用合约账户是可以的,有代码和状态,创建合约时会返回合约的地址

合约要求有比较稳定的身份

 

 

 

addr有160bits,账户地址到账户状态的映射,用16进制表示,不能用hash表实现

证明账户余额,bitcoin中全节点要有一致性,共识,故块头中存hash

ETH中不能用bitcoin的merkle tree,每次交易都要全新的tree,而bitcoin每次只构建几百个交易的tree,节点顺序不一样,根hash不同,tree一个hash变好多都要变,加入一个节点重构半颗树

ETH不用这种数据结构,trie,地址由公钥取hash截取后半段得到,不会出现碰撞,通过trie映射到状态,顺序不同插入树是一样的,更新的局部性,但浪费

可以压缩tree,新加入时可能要解压,

 

 

 键值(地址)分布非常稀疏,可以防止两个人产生相同的地址,概率极低地球爆炸

地址空间2^160大,用的部分很少

MRT,普通指针换hash指针,

 

 ETH的header中有三个hash值,根hash防篡改,将自己节点所在路径发给轻节点,轻节点可以去验证是否存在和余额,状态树modified MPT,线指向存的是下一个节点的hash值

 

 

 

 

 

 

 新的交易新建一个区块存储,和前一个区块共享节点,每个区块共享信息,保留历史状态

解决分叉问题,一个分叉胜出后用于回滚状态,智能合约是图灵完备的,

 

 

 

 前一个区块头的hash,cionbase矿工的地址,下面是三个hash,状态树,交易树和收据树

 

 区块结构,*header指向header的指针,真正发布时发布以下结构

 

状态树中(key, value),value通过序列化存储RLP,特点是简单,

 

 

 交易树和收据树通过发布区块的序号查找,即key值,只包含当前区块,独立的,提供交易和收据的证明,而状态树包含全部节点信息,共享信息

bloom filter用于轻节点查询,一个交易是否在集合中,一个收据包含了一个bloom filter,

发布的区块在块头里有一个总的bloom filter,是交易的并集,查找时通过块头的bloom filter过滤掉很多无用

 

 状态树存在区块里 ?交易树和收据树存在当前区块里

 

更多文章请关注《万象专栏》