主页 > imtoken钱包官网下载2.0 > 以太坊账户
以太坊账户
以太坊账户
帐户模型
比特币的账户模型使用基于交易的模型来记录有多少钱。
比特币转账的限制
每次转账,都必须把账户里的钱全部转过去。 比如A有10个比特币,想转3个比特币给B,这时候就要做双向交易
第一笔交易A转3个比特币给B
在第二笔交易中,A将7个比特币转给A
ETH转账
有点类似于我们的现实,比如A有10个ETH,A想转3个ETH给B,A直接转3个ETH给B。
有点类似于我们的银行转账。
这样可以防止双花攻击,因为你花一次就只需要扣一次账户里的钱。
但这有局限性,比如重放攻击(reply attack)
例如,假设A有10个ETH,A给B转了3个ETH,交易写入区块链后,A的账户扣除划掉的3个ETH,只剩下7个ETH。
这时候如果B是恶意节点,B又广播了交易信息,那么如果这笔交易也写入区块链,A的账户就会损失3个ETH,只剩下4个ETH了。
如何重播一次攻击?
需要加一个计数器,也就是nonce。 A在转账的时候需要设置nonce的值,然后打包广播。 其他节点收到打包后的广播后,会检查收到的nonce和自己节点维护的A的信息。 如果 nonce 的值小于发送的值,则表示它是合法的。 如果大于,则说明当前交易已经写入区块链,属于非法交易。
例如当前节点维护的账户A的nonce值为20,收到A发送的打包交易后,发现A发送的nonce值为21,说明交易合法,需要此时要更新账户A维护的nonce值为21,下次收到关于A的交易信息,如果发现交易信息中的nonce值小于21,则认为是非法的。
帐户类型
外部账户,由公钥和私钥控制(包括余额和随机数)
合约账户,由代码控制并部署在网络上的智能合约]
以太坊的账户状态树
以太坊需要完成账户地址->账户状态
如果用哈希表来实现会有什么问题呢?
证明账户余额,使用默克尔树证明
如果发生交易
Merkle树不提供高效的查找和更新方法
如果所有账户都放在一个Merkle树中,是否需要排序?
如果不排序以太坊算法,每个全节点形成的Merkle树是不同的
比特币全节点中每笔交易的顺序是不同的,比特币中每个区块中的交易由打包器决定。
如果以太坊发布的整个账户的状态太大
如果对账户的Merkle树进行排序以太坊算法,增加新用户的成本比较高
特里
当键值分布相对稀疏时
以太坊地址比较稀疏,为了防止哈希碰撞
以太坊交易树和收据树
布隆过滤器数据结构
使用布隆过滤器快速查找交易信息
以太坊可以看作是交易驱动的状态机
以太坊的共识机制
以太坊的共识机制,因为以太坊的出块时间是15秒,而比特币的出块时间是10分钟。 如果遵循比特币的共识机制,挖矿将是不公平的
以太坊挖矿算法
ASIC算力强
以太坊
本文由 mdnice 多平台发布