主页 > imtoken钱包官网下载2.0 > 以太坊账户

以太坊账户

imtoken钱包官网下载2.0 2023-10-06 05:09:03

以太坊账户

帐户模型

比特币的账户模型使用基于交易的模型来记录有多少钱。

比特币转账的限制

每次转账,都必须把账户里的钱全部转过去。 比如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,则认为是非法的。

alt

帐户类型

外部账户,由公钥和私钥控制(包括余额和随机数)

合约账户,由代码控制并部署在网络上的智能合约]

以太坊的账户状态树

以太坊需要完成账户地址->账户状态

如果用哈希表来实现会有什么问题呢?

证明账户余额,使用默克尔树证明

如果发生交易

Merkle树不提供高效的查找和更新方法

如果所有账户都放在一个Merkle树中,是否需要排序?

如果不排序以太坊算法,每个全节点形成的Merkle树是不同的

比特币全节点中每笔交易的顺序是不同的,比特币中每个区块中的交易由打包器决定。

如果以太坊发布的整个账户的状态太大

如果对账户的Merkle树进行排序以太坊算法,增加新用户的成本比较高

特里

当键值分布相对稀疏时

以太坊地址比较稀疏,为了防止哈希碰撞

以太坊交易树和收据树

布隆过滤器数据结构

使用布隆过滤器快速查找交易信息

以太坊可以看作是交易驱动的状态机

以太坊的共识机制

以太坊的共识机制,因为以太坊的出块时间是15秒,而比特币的出块时间是10分钟。 如果遵循比特币的共识机制,挖矿将是不公平的

以太坊挖矿算法

ASIC算力强

以太坊

本文由 mdnice 多平台发布