• 北大肖臻老师《区块链技术与应用》系列课程学习笔记[12]以太坊-账户


    1.比特币的账户模式

      比特币系统是基于交易的账本(Transaction Based Ledger),系统中并未显示记录每个账户上有多少钱,只能通过UTXO进行推算(即在UTXO中查找该账户公钥有多少输入即可)。这种方式的好处是隐私保护比较好,你有多少钱,自己可能都说不清,别人就更不知道了。但实际中,使用起来比较别扭。
      假设A转给B钱的时候,需要说明币的来源。这跟日常生活中的体验是不一样的,日常生活中,只有去银行存钱说明来源,花钱则不用说明每一笔钱的来源。此外,比特币账户中,在前面一笔交易中收到的比特币,在花的时候必须一次性全部花出去,不能只花一部分。
      回到之前的例子用户A获得了铸币权,假定A发行了10个比特币后,将这10个比特币分别转给B和C,每个人分得5个比特币,这里就需要说明A转给B和C的比特币来自于他发起的铸币交易。接下来用户B给用户C分2个比特币,给用户D分3个比特币,C将自己的7个比特币全部给用户E,这些交易也都一样,需要说明自己花掉的比特币来自于哪个交易,如图1-1所示。

    图1-1 图1-1

      假设B收到A的5个比特币,他想要给C转账2个比特币,不给D转账其余3个比特币,如果按照图1-1中方式,其余3个比特币会以交易费(Transaction Fee)的形式给挖出区块的矿工。因此,为了避免这种情况,所以采用2中方式,将3个BTC转给C,将剩余7个BTC转到B的另一账户D上面。很多比特币钱包就采用这种方式,每次转账就生成一个自己的新的地址,有利于隐私保护,但是仍然与日常生活有所不同。这是因为比特币系统中没有显示的基于账户的交易的概念,在比特币系统中,每个交易是单独进行处理的。
    图1-1 图1-2

    2.以太坊的账户模式

      以太坊系统则采用了基于账户的模型,与现实中银行账户相似。系统中显示记录每个账户中以太币的数量,转账是否合法只需要查看转账者账户中以太币是否足够即可,不用确切指出转出的钱属于哪一部分,同时也不需要每次全部转账,如图1-3所示。同时,这也也天然地防范了双花攻击。因为如果出现Double Spending,不需要像比特币一样说明币的来源,只需要扣两次钱就好了。

    图1-3

      当然,以太坊发这种模式也存在缺点,这种模式存在重放攻击(Reply Attack)的缺陷。A向B转账10个ETH,过一段时间,B将A的交易重新发布,从而导致A账户被扣钱两次。双花攻击和重放攻击是相对的,双花攻击说的是花钱的人不诚实,花过的钱继续花一次,重放攻击说的是收钱的人不诚实,收到过的钱再继续收一次。 在比特币中会有重放攻击吗?不会,因为收到过的交易信息再广播一次是很显然的Double Spending。

      以太坊中,解决重放攻击的方法也非常简单,在每笔交易中添加一个Nonce,记录该账户有史以来一共发布多少交易,转账时,Nonce作为交易的一部分,同时受到签名的保护,从而防止本地篡改余额或进行重放攻击。如下图1-4所示,A给B转账10个ETH,转账次数是21,所有全节点会维护这样一个状态数,假设过了一段时间之后,B重放了这个交易,其他节点查到A账户的转账数已经到23了,那么自然会发现这个被重放的交易是不合法的。

    图1-4

    3.以太坊的账户类型

    (1)外部账户:类似于比特币系统中的账户,是用公私钥对控制的。本地产生公私钥对,谁拥有公私钥对,就掌握账户控制权。外部账户中有账户余额Balance和计数器Nonce(这里注意要跟挖矿调整的Nonce区分)。
    (2)合约账户:并非通过公私钥对控制。合约账户不能主动发起交易,若外部账户发起交易调动了一个合约账户,该合约账户可以发起一个Message调用另外一个合约,但是不能自己主动发起交易。合约账户除了Balance和Nonce之外还有代码(Code)、相关状态-存储(Storage),包括每个变量的取值。
      创建合约时候会返回一个地址,知道这个地址就可以调用这个合约。调用过程中,代码不变但状态会发生改变,存储也会发生变化。

    4.为什么创建以太坊,更换为基于账户的模型而不是沿袭比特币系统?

      比特币基于交易的模型隐私保护比较好,每次交易支持更换账户,而以太坊是为了支持智能合约,对于合约来说,要求参与方的身份较为稳定。比如,现在有人提出将智能合约用于金融衍生品(Financial Derivative),如期货等。所以,对于账户来说,不希望其身份发生改变,对于合约账户来说,如果地址变了,那投入到原来合约的钱也就找不见了。以太坊系统则采用了基于账户的模型,其账户是希望保持稳定的,不论是合约账户还是外部账户,当然如果有隐私保护的需要,同样可以创建很多个账户,根据需要使用不同的账户进行交易。

  • 相关阅读:
    qt day1
    这次把怎么做好一个PPT讲清-审美篇
    Web 部署
    【论文复现】基于多模态深度学习方法的单细胞多组学数据聚类(【生物信息学】实验二:多组学数据融合:scMDC)
    浅谈电弧光保护在10kV变电站高压室的应用方案
    IP地址与代理IP:了解它们的基本概念和用途
    华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档
    MySQL 多种查询方法
    SpringCloud 使用与Nacos
    数组模拟堆
  • 原文地址:https://blog.csdn.net/YSL_Lsy_/article/details/126390392