目录

一、比特币账户模式及其问题

二、以太坊账户模式介绍

三、以太坊账户模式的优势与防范措施

四、以太坊两类账户详解

五、以太坊账户模式设计原因


一、比特币账户模式及其问题

比特币采用基于交易的账本模式,系统不显示记录每个账户的余额,需根据 utxo 信息推算。这种模式虽隐私保护好,但使用不便,如转账时需说明资金来源,且收到的币需一次性花完,若只花部分需将剩余转回自己其他地址。

老师在讲课中,先介绍了比特币采用基于交易的账本模式,后阐述了这种模式在使用过程中存在的问题,具体内容如下:

  • 比特币账户模式:比特币采用基于交易的账本模式(transaction base nature),在该模式下,系统不会直接显示记录每个账户有多少资金。若想知道账户的资金数量,需根据未花费交易输出(utxo)里的信息进行推算。例如,要确定某人的比特币总资产,就要统计其拥有私钥的所有账户在 utxo 中的币的数量。这种模式在隐私保护方面有一定优势,因为账户余额不明确显示,他人难以知晓具体资金情况,甚至账户所有者自己可能都不完全清楚
  • 使用不便问题:与日常银行操作体验不同,比特币转账时使用较为别扭。比如 A 要转给 B 10 个比特币,A 需要详细说明这 10 个比特币的来源,如其中 7 个币是之前某笔交易收到的,另外 3 个币是之前另一笔交易收到的,以此来证明交易资金来源的合法性。而在银行操作中,存钱时可能需要说明资金来源,但花钱时无需再对每一笔钱的来源进行说明。
  • 花费限制问题:在比特币系统里,如果在前面的交易中收到一笔输出(一些币),后续花费时必须一次性全部花出去,不能只花一部分。例如 A 转给 B 10 个比特币,当 B 要转给 C 3 个比特币时,如果直接这样操作,剩下的 7 个比特币会被当作矿工费花出去,这显然不合理。所以,必须把剩下的 7 个比特币转回给自己,比如转到 B 的另外一个地址。很多比特币钱包可以自动生成这种接收余额的地址,每次交易换一个新地址,这虽然有利于隐私保护,但与日常生活习惯差异较大。在日常生活中,如银行账户收到 10 万块钱,转出去 3 万块后,剩下的 7 万块直接留在账户上即可,无需额外操作。其根源在于比特币系统没有维护基于账户交易的概念,而是对每一个交易单独进行处理。

二、以太坊账户模式介绍

以太坊采用基于账户的模型,类似日常银行账户,系统会显示记录每个账户的以太币数量。转账时只需检查账户余额是否足够,无需说明资金来源,也无需将剩余金额转回自己账户。

在这部分内容中,老师先介绍了以太坊采用基于账户的模型,接着阐述了该模式在转账等操作上的特点,以及其在应对双花攻击方面的优势,具体内容如下:

  1. 以太坊账户模式的基本概念:以太坊采用基于账户的模型,这种模型和日常的银行账户较为相似。在该模型下,系统会明确显示并记录每个账户上拥有多少个以太币
  2. 转账操作的便利性:以转账为例,假设 A 转给 B 10 个以太币,判断这个转账交易是否合法,只需检查 A 账户上是否有足够的资金即可。比如 A 账户有 100 个以太币,转 10 个给 B,是没有问题的。而且在转账过程中,不需要像比特币那样说明这 10 个以太币具体来自之前哪个交易,即不用说明资金来源。同样,当 B 要转给 C 3 个以太币时,也完全不需要把剩下的以太币转回给自己,因为以太坊有明确的账户余额概念,剩下的以太币直接放在账户上就行,也无需使用哈希指针说明币的来源,这种方式让操作更加自然。
  3. 对双花攻击的防御优势:比特币面临的一个主要挑战是双花攻击(double spending),即花出去的钱又被花了一次。而以太坊这种基于账户的模式,对双花攻击有天然的防御作用。因为在以太坊系统中,每花一次钱,就直接从账户余额上扣除相应数额。如果有人试图双花,也就是花两次钱,系统就扣两次,由于账户余额是明确且实时更新的,所以能够有效抵御双花攻击

三、以太坊账户模式的优势与防范措施

以太坊模式对双花攻击有天然防御作用,因为每次花钱直接从账户余额扣除。针对篡改账户余额的问题,以太坊通过全节点维护状态树来防范,篡改需所有全节点认可。对于重放攻击,以太坊通过添加交易次数计数器,将其作为交易内容一部分并受签名保护,节点维护该值,重复交易时可识别并拒绝执行。

在这部分讲课内容中,老师先介绍了以太坊账户模式的优势,即对双花攻击有天然防御作用,随后讲解了针对可能出现的账户余额篡改和重放攻击的防范措施,具体内容如下:

  • 以太坊账户模式的优势:以太坊基于账户的模式对双花攻击有天然防御作用。在比特币系统中,双花攻击是一个主要挑战,即用户可能将已经花出去的钱再次使用。而在以太坊中,由于系统明确记录每个账户的余额,用户每进行一次花费操作,系统就直接从账户余额上扣除相应金额。这种机制使得双花攻击难以实现,因为当攻击者试图再次花费已花掉的金额时,账户余额中已无足够资金,从而天然地抵御了双花攻击。
  • 针对篡改账户余额的防范措施:有同学提出在以太坊模式下可能存在有人篡改自己账户余额的问题。在比特币中,每笔交易都要说明资金的来源,所以很难凭空造出一个币。但以太坊转账不需要说明资金来源,似乎存在安全隐患。实际上,以太坊对此有防范机制。用户发布交易时,虽然不需要说明余额的来源,但账户余额是由系统中全节点维护的状态来保存的。下节课会讲到以太坊中一个重要的数据结构 —— 状态树,它由所有账户的状态组成,账户状态里包含一个重要的属性 balance(余额)。这个余额无法轻易篡改,因为如果要修改余额,必须得到所有全节点的认可,否则其他节点是不会承认这个修改的,单个用户无法随意更改自己的账户余额
  • 针对重放攻击的防范措施:以太坊存在重放攻击(replay attack)的风险。例如,A 转给 B 10 个以太币并发布交易,交易被写入区块链后 A 认为转账完成。但如果 B 有恶意,将这个交易重新在网上广播,其他节点可能会误以为这是一个新的转账,从而导致 A 的钱被扣两次。而比特币中不存在这种情况,因为重放交易在比特币系统中明显属于双花,不会成功(比特币中的分叉攻击是转账的人是坏人,一以太坊的重放攻击是被转账的人是坏人)。以太坊应对重放攻击的办法是添加一个交易次数计数器nonce,记录账户有史以来发布过的交易数量。转账时,交易次数作为交易内容的一部分,和其他交易信息一起受到交易者签名的保护。每个节点在维护账户状态时,不仅要维护账户余额(balance),还要维护这个交易次数(可以理解为类似于 tcp 协议里的 sequence number,之前课程中挖矿时 block header 里的 nonce与之不同,这里实际上是个计数器)。当节点收到某个账户发起的交易时,会检查交易次数,如果符合预期则执行交易并更新交易次数;若有人重放交易,节点发现交易次数与当前记录不符,就不会再次执行该交易,从而有效防范了重放攻击

四、以太坊两类账户详解

以太坊有外部账户合约账户两类。外部账户类似比特币账户,由公私钥对控制,账户状态包括余额和交易次数计数器;合约账户不由公私钥对控制,除余额和交易次数计数器外,还有代码、相关状态和存储,不能主动发起交易,可被外部账户调用,调用时状态和存储会变,代码不变,创建合约后会返回该合约地址用于调用

在这部分内容里,老师介绍了以太坊的两类账户,即外部账户和合约账户,对它们的控制方式、账户状态、交易发起规则及相互调用关系等进行了讲解,具体如下:

  • 外部账户:外部账户类似于比特币中的账户,由公私钥对控制。谁拥有私钥,谁就掌握了该账户的控制权,有时也被称为普通账户。其账户状态包含账户余额和交易次数计数器。交易次数计数器用于记录账户发起交易的数量,新创建账户时该值为零,每发起一次交易,该值加一。
  • 合约账户:合约账户不由公私钥对控制,不能主动发起交易,所有交易只能由外部账户发起。当外部账户发起的交易调用合约账户时,合约账户可以发送消息调用另外一个合约。合约账户的状态除了有余额和交易次数计数器外,还包含代码、相关状态以及存储(storage,如每个变量的取值等)。创建合约时会返回一个地址,知道该地址就可以调用合约。在调用过程中,合约的代码不变,但状态和存储会发生变化。例如,在涉及智能合约的操作中,不同的输入或条件可能会改变合约内变量的取值,进而使存储发生变化,而合约的运行逻辑(代码)保持稳定。

五、以太坊账户模式设计原因

以太坊创始人创建以太坊时未采用比特币账户模型,是因为以太坊要支持智能合约,智能合约要求参与者身份稳定。若账户频繁变化,会给智能合约的执行、收益分配等带来困难,所以以太坊选择采用基于账户的模式,在满足智能合约需求的同时,用户也可根据隐私保护需要创建多个账户。

在这部分讲课内容中,老师从以太坊创始人创建以太坊时的选择出发,对比比特币账户模型的特点,阐述了以太坊采用新账户模式的必要性,具体内容如下:

  • 参考比特币却另辟蹊径:以太坊创始人维塔利克创建以太坊时,比特币已有成熟代码可供参考。但以太坊没有直接沿用比特币的代码,而是在系统设计上做出诸多改变,其中就包括采用与比特币不同的账户系统。比特币基于交易的账户模型具有一定优势,比如隐私保护较好,每次交易可以更换新账户,一定程度上提高了隐私性
  • 支持智能合约的需求:以太坊的核心目标之一是支持智能合约。对于智能合约而言,参与者稳定的身份至关重要。这就像在日常生活中签订合同,如果签订合同的一方身份频繁变化,会给合同的执行和纠纷处理带来很大困难。在智能合约场景下,假设有人向一个合约投入资金预测未来价格走势,以获取收益,如果投入资金的账户在投入后发生变化,那么后续收益分配和资金退还都会面临问题。不仅外部账户存在这种情况,合约账户的问题更为严重。若资金投入到一个合约账户后,该账户地址发生改变,资金提供者将难以找到对应的账户,导致资金无法收回或收益无法获取。
  • 综合考量后的选择:以太坊在创建系统时,全面考虑了过往已有模型的利弊。最终决定不采用比特币基于交易的账户模型,而是选择基于账户(account-based)的模式。从实际情况来看,这一选择较为合适,因为以太坊中的账户,无论是个人账户还是合约账户,都希望保持相对稳定。当然,如果用户有隐私保护的需求,依然可以创建多个账户,并根据不同的交易场景使用不同账户,在满足隐私需求的同时,确保智能合约等功能的正常运行

相关文章:【ETH】以太坊概述-CSDN博客

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐