当前位置: 首页 > article >正文

区块链学习笔记(2)--区块链的交易模型part1

模型基础

区块链的tx分为两种模型,分别是比特币为代表的UTXO(Unspent Transaction Output)模型,和以太坊为代表的Account模型。前者适用于货币记账,后者适用于链上应用。

UTXO模型

类似于现金的交易模型

  1. 一个tx包含一个或多个输入(Input)、一个或多个输出(Output)。以币安热钱包地址为例:
    1. 每个Output包含了转账的目标Address和Value,拥有这个Address的私钥即可花费这个Output
    2. 每个Input通过(txid, index)指向了之前一笔tx的一个Output,通过Output私钥签名将这个Output花费掉
    3. 未被花费的Output称作UTXO,一个UTXO只能被花费一次
    4. 一笔tx的Input金额之和会略大于Output金额之和,差值是付给矿工的Fee
    5. Fee的多少和tx的size正相关

  1. 支付流程:用户A支付金额n给用户B
    1. 用户A会维护自己所拥有的UTXO集合(比如币安热钱包地址的UTXO集合)
      1. 遍历链上的历史tx得到
    2. 用户A从集合中选取一个或多个UTXO作为tx的Input
      1. 这些UTXO的金额之和为m,m大于n
    3. 用户A为tx设置两个Output
      1. 一个Output支付给B的地址,金额是n
      2. 另一个Output支付给A的一个找零地址,金额为m-n-fee
    4. 同样以币安热钱包地址举例
      1. 这个tx支付2 BTC给热钱包并找零
      2. 这个tx把热钱包的一个1 BTC的UTXO支付给多个地址

Account模型

  1. 类似于银行的交易模型
  2. UTXO模型的应用场景受限
    1. 人们不满足于将区块链用于记录账本,而想要在其上搭建应用
      1. 区块链需要成为“可编程数据库”
    2. UXTO模型不是数据库 → State的概念
      1. UTXO的节点仅记录转账,却没有记录最终余额
        1. 一个地址的余额,需要遍历该地址的所有UTXO,然后求和得到
        2. 类比数据库:仅记录对数据的增删改的操作,却没有记录数据的最终状态
    3. 为什么UTXO设计上没有考虑记录State?因为区块链仅用作账本的情况下记录State会:
      1. 增加成本
        1. 记录每个地址的余额需要额外的存储空间
        2. 余额的更新和回退需要加大节点的计算量
      2. 不需要
        1. 由于隐私性的考虑,用户的钱包默认由多个地址组成,且每个地址只有很少的交易
        2. 因此获取钱包的总余额,需要遍历UTXO,和遍历各个地址余额的难度是接近的
        3. 仅有转账没有应用,是不需要获取他人地址的余额的
    4. 需要一种记录State的交易模型

  1. 以太坊的tx结构(Github)
    1. From可以从签名V,R,S中算出来
    2. To是目标地址
    3. Value是转账金额
    4. Data字段会在调用合约的时候用上,记录调用的method和输入的参数
    5. Gas相关的字段是付给矿工的手续费

Type hexutil.Uint64 `json:"type"`

// Common transaction fields:
Nonce                *hexutil.Uint64 `json:"nonce"`
GasPrice             *hexutil.Big    `json:"gasPrice"`
MaxPriorityFeePerGas *hexutil.Big    `json:"maxPriorityFeePerGas"`
MaxFeePerGas         *hexutil.Big    `json:"maxFeePerGas"`
Gas                  *hexutil.Uint64 `json:"gas"`
Value                *hexutil.Big    `json:"value"`
Data                 *hexutil.Bytes  `json:"input"`
V                    *hexutil.Big    `json:"v"`
R                    *hexutil.Big    `json:"r"`
S                    *hexutil.Big    `json:"s"`
To                   *common.Address `json:"to"`

  1. tx花费的gas主要取决于:新增存储空间+验证所需计算
  2. Account模型的特点(用富豪榜和Polygon的地址观察)
    1. 有各种小缺点
      1. 一个地址发出去的tx是按照Nonce串行的、顺序的,无法并发
      2. tx作用于State进行更新,但tx构建时候作用的State可能和上链的时候不一样
        1. tx上链时的State变化会改变tx执行的结果
        2. 多个tx上链作用State的顺序会影响tx执行的结果
        3. tx会存在“执行失败”的链上状态
      3. 余额用不完:tx花费gas的取决于上链时作用的State,所以tx构建时无法准确预估gas,所以无法构建交易正好把Balance用完
    2. 适于构建应用
      1. 任何地址的当前状态可以快速retrieve到


http://www.kler.cn/a/419274.html

相关文章:

  • 【网络篇】HTTP知识
  • 龙蜥 Linux 安装 JDK
  • springMVC 全局异常统一处理
  • LeetCode—74. 搜索二维矩阵(中等)
  • 【聚类】K-Means 聚类(无监督)及K-Means ++
  • 基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)
  • 每日速记10道java面试题04
  • transformer学习笔记-词嵌入embedding原理
  • Y20030012基于php+mysql的药店药品信息管理系统的设计与实现 源码 配置 文档
  • ECharts柱状图-极坐标系下的堆叠柱状图,附视频讲解与代码下载
  • 基于Java实现的潜艇大战游戏
  • 数据集搜集器(百科)008
  • 容器化与 Kubernetes:现代应用的编排与管理
  • LwIP协议栈 基础知识介绍
  • 电商项目高级篇06-缓存
  • 前端将echarts的图和element表格 一起导出到excel中
  • el-tree的使用及控制全选、反选、获取选中
  • 韩顺平 一周学会Linux | Linux 实操篇-组管理和权限管理
  • 根据后台数据结构,构建搜索目录树
  • openssl 基本命令使用方法
  • Oracle之提高PLSQL的执行性能
  • 三十二:网络爬虫的工作原理与应对方式
  • ASP网络安全讲述
  • 易速鲜花聊天客服机器人的开发(上)
  • 一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单
  • Ubuntu 22.04 LTS vs Ubuntu 24.04 LTS:深度剖析,哪个版本更胜一筹?