区块链学习笔记(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到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI节点安装笔记

AI高速发展,版本更新相当快(11月25日才安装的版本v.0.3.4,27日版本就已经更新到v.0.3.5了,当然不是说所有的版本更新都需要全部全新安装),在遇到问题,而不能通过update来更新各个节点解决时&…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息,以便了解Mysql数据库的运行情况,日常操作,错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份:全部都备份一遍表备份:只提取数据库中的数据&#xff0…

【经典论文阅读】Transformer(多头注意力 编码器-解码器)

Transformer attention is all you need 摘要 完全舍弃循环 recurrence 和卷积 convolutions 只依赖于attention mechanisms 【1】Introduction 完全通过注意力机制,draw global dependencies between input and output 【2】Background 1:self-…

理解字母形状,从而获得含义

英文字母,都是象形符号,所以,理解其形象,所象之形,是一项重要的工作,和非常有意义事情。也是我们快速记住大量单词,将单词从底层逻辑开始理清,融会贯通扩展记忆容量的重要办法之一。…

CA系统(file.h---申请认证的处理)

#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件&#xff0c;返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…

Linux Shell 脚本题目集(2)

1、使用 case 语句根据用户输入的分数&#xff08;0-100&#xff09;输出相应的成绩等级&#xff08;A, B, C, D&#xff09;。 #! /bin/bashread -p "请输入您的分数&#xff08;0-100&#xff09;&#xff1a;" score# 验证输入是否为数字且在0到100之间 if ! [[ …

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 &#xff08;必须要混淆开了之后才才可以设置为true&#xff09; proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…

【Vue3】从零开始创建一个VUE项目

【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接&#xff1a; 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&…

常见靶场的搭建

漏洞靶场 渗透测试&#xff08;漏洞挖掘&#xff09;切忌纸上谈兵&#xff0c;学习渗透测试&#xff08;漏洞挖掘&#xff09;知识的过程中&#xff0c;我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下&#xff0c;对于网站进行渗透测试攻击&#xff0c;是触及…

若依项目源码阅读

源码阅读 前端代码分析 代码生成器生成的前端代码有两个&#xff0c;分别是course.js用于向后端发送ajax请求的接口代码&#xff0c;另一个是index.vue&#xff0c;用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…

【算法】时间复杂度空间复杂度

0.前言 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度主要衡…

java全栈day10--后端Web基础(基础知识)

引言&#xff1a;只要能通过浏览器访问的网站全是B/S架构&#xff0c;其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址&#xff1a;Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程&#xff0c;建议…

webrtc ios h264 硬编解码

webrtc ios h264 硬编解码 一 ios 系统支持 从ios8开始&#xff0c;苹果公司开放了硬解码和硬编码API&#xff08;即 VideoToolbox.framework API&#xff09; 二 主要api 1 主要解码函数 VTDecompressionSessionCreate // 创建解码 session VTDecompressionSession…

【JavaEE】JavaEE、web 开发、框架(Spring) 、Maven

文章目录 一、JavaEE 发展历程二、什么是 web 开发1、什么是 web 开发&#xff1f;2、web 网站的工作流程 三、框架1、什么是框架&#xff1f;2、为什么要学框架&#xff1f;3、框架的优点&#xff08;Spring Boot VS Servlet&#xff09; 四、Maven 一、JavaEE 发展历程 Java…

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】

文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…

Scala学习记录,全文单词统计

package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符"&#xff1a;把字符串用指定的分隔符&#xff0c;拆分成多个部分&#xff0c;保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…

使用 Certbot 为 Nginx 自动配置 SSL 证书

1.安装Certbot和Nginx插件 sudo apt-get update sudo apt-get install certbot python3-certbot-nginx 2.获取和安装证书 运行Certbot自动安装SSL证书。注意替换 your_domain sudo certbot --nginx -d your_domain Certbot将自动与Lets Encrypt的服务器通信&#xff0c;验证域…

Java之深入理解HashMap

Java之深入理解HashMap 引言 HashMap是Java程序员使用频率最高的一种映射&#xff08;<Key,Value>键值对&#xff09;数据结构&#xff0c;它继承自AbstractMap&#xff0c;又实现了Map类。 本文将深入源码解析一下HashMap的底层原理。 数据结构 HashMap底层通过维护…

HTTP 探秘之旅:从入门到未来

文章目录 导言&#xff1a;目录&#xff1a;第一篇&#xff1a;HTTP&#xff0c;互联网的“快递员”第二篇&#xff1a;从点开网页到看到内容&#xff0c;HTTP 究竟做了什么&#xff1f;第三篇&#xff1a;HTTP 的烦恼与进化史第四篇&#xff1a;HTTP 的铠甲——HTTPS 的故事第…

Docker 容器网络创建网桥链接

一、网络&#xff1a;默认情况下&#xff0c;所有的容器都以bridge方式链接到docker的一个虚拟网桥上&#xff1b; 注意&#xff1a;“172.17.0.0/16”中的“/16”表示子网掩码的长度为16位&#xff0c;它表示子网掩码中有16个连续的1&#xff0c;后面跟着16个连续的0。用于区分…