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过滤掉很多无用
状态树存在区块里 ?交易树和收据树存在当前区块里
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv130345