【区块链 链外交易】SoK Off The Chain Transactions

SoK Off The Chain Transactions

摘要

本文对区块链进行了简单介绍,分析目前区块链的缺点——交易吞吐量和速度慢的原因,在此基础上引出解决此问题的方法,也是本轮将要论述的主题——链外交易。之后介绍了链外交易的基本概念和结构,并对两种类型的链外交易:通道和信任链进行了简单分析。对于通道,本文介绍了通道的结构和生命周期,通道同步技术,通道路由算法等,对于信任链,我们介绍了其基本概念和两类信任链:分别是是基于帐户的NOCUST,以及基于UTXO的Plasma。最后,本文介绍了链外交易的隐私保护和安全性。

关键词:区块链、比特币、链外交易

Abstract

This paper gives a brief introduction to blockchain, analyzes the shortcomings of blockchain at present - the reason for slow transaction throughput and speed, and on this basis leads to the method to solve this problem, which is also the topic of this round - off chain transactions. Then it introduces the basic concept and structure of out of chain transactions, and analyzes two types of out of chain transactions: channel and trust chain. For channels, this paper introduces the structure and life cycle of channels, channel synchronization technology, channel routing algorithm, etc. For trust chains, we introduce their basic concepts and two types of trust chains: account based NOCUST and UTXO based Plasma. Finally, this paper introduces the privacy protection and security of off chain transactions.

Keywords:Blockchain, Bitcoin, Off chain Transactions

一、 概述

区块链被认为是继蒸汽机、电力、互联网之后的第四次技术革命。由于区块链技术具有去中心化、公开透明、可追溯性和不可篡改等特点,在一定程度上,可以解决“中心化”导致的信息不对称问题,从而实现去中心化社会。目前,区块链技术已经被广泛应用到互联网金融领域。区块链是一个去中心化的分布式账本数据库,每一个节点都有一个“账本”,记录着每一笔交易的发生过程或原因。区块链记录着每一笔交易中的相关信息,并且这些信息具有不可篡改的特性。但区块链目前表现出很高的延迟,无法处理与传统托管金融系统相当的负载。[1]

img

区块链链上交易与其他支付方式相比

区块链的第二层次的协议基于(第一层)区块链,它只作为争端的追求权,交易并不直接写入,通过向外部传送交易,从而防止每个交易扩散到整个网络。第二级协议的交易只需数秒,成本就会降低,并且可以扩大区块链。

二、 引言

以比特币为代表的公共区块链体系,其最大的缺陷就是交易表现不佳。交易表现较差的原因有两个:一是交易吞吐量较小,二是交易速度较慢。交易吞吐量是指一个系统每小时处理的请求数目。交易速率是指从一个客户提交一个请求到一个交易被确认的平均时间。这两个数值在比特币的区块链系统中是非常低的。平均的交易吞吐量为7次/秒, 速率平均每1小时可以完成1次交易。和普通的商业银行相比,每秒的交易吞吐量都在2000以上,几乎是实时的。[2]

img

区块链

因为比特币区块链在交易速度及吞吐量中表现得如此之差,许多人都将其视为其性能上的不足,从而使其不能作为一种交易货币。是什么原因造成比特币区块链系统的低效能呢?

作为一种分布式的帐簿技术,区块链的核心作用就是记录所有的帐款。一般情况下,公共区块链的记账方法就是一页一页的记录,记录一段时间后,就会用一种竞争的方法,将最好的一张记录下来,然后所有人都抄录一份,加入到自己的账簿中。

这里面有两个限制:账页的大小和记账的周期。账页大小确定了每个区块所能容纳的交易数量,每个区块容纳的交易数量除以记账周期就是交易吞吐量;

img

而记账周期则直接决定了交易确认时间,记账周期乘以大概率确认区块有效性的区块数(比如比特币里我们通常认为6个区块基本上就能确定交易有效)就是交易确认时间。

img

要提高公共区块链的效能,最简单的方法是在每一页面上增加交易(区块扩展),并缩短记录时间。对于区块的扩展,一般会对区块的传输速率产生直接的影响。当然,考虑到目前的带宽和速率,最初的1 MB规模的比特币的确是小了一点,但小块也有小块的优势,那就是可以使用更多的通信手段,比如卫星通信。

img

区块链

减少记账周期,则会影响到区块传播的范围。如果区块过大并且记账周期太短,就会造成去中心化程度的降低。原因很简单,一个矿工挖到了一个区块,其他矿工还在下载接收这个区块时,他已经开始挖下一个区块了。显然,接收一个区块所占用的时间在一个记账周期中的比例越低,对于全体矿工来说就越公平。否则,先发优势过于明显,导致整个系统的去中心化程度降低。与此同时,整个网络同时挖出块的概率将会大大增加,就会需要更加复杂的机制来解决这个问题。

因此,对于公有链来说,用改变区块链自身的方式来提升区块链的交易性能,想要追赶现在金融系统的交易处理能力,难度还是非常高的。换句话说,我们想提高公有链的链内交易的交易性能,难度极大。

img

区块链

再回过头来看一下传统的金融体系。目前,国内各大商业银行均采用中央银行的大额小额支付系统进行跨行业务。而一般的用户,在银行系统中,大部分的业务都是在一家银行内部完成,而当涉及到跨行业务的时候,这些数据就会通过中央银行的系统来进行处理。结果是,大量的小额付款系统中的交易量大幅减少。

区块链上也可以采用类似的办法来解决。我们把这种方式统一叫做链外交易。也就是说,某一个组织或者机构可以提供一些服务,让我们在链外记录这些交易,每隔一定的时间,把这些交易的结果写入区块链即可。

尽管转账的过程非常复杂,但是只需要在链上记录下来每个时刻的账户状态(就是每个时间段的清算结果),最终结果与所有交易信息都记到链上效果是一样的。区别在于从链上的数据并不知道交易发生的真实情况。

除了这个区别以外,还有一个重要的区别:在链外交易时,提供这些链外交易服务的组织或机构的信用与整个公有链的信用是有差别的。在链外交易时,这些交易已经不是一个去中心化的交易了,而是一种局部的中心化的交易系统。当然,由于定时会把交易清算结果写回链上,一旦结果写回链上,我们就能够确认提供链外交易的组织是否存在篡改数据的情况。[2]

从经济学的观点来看,由于小额交易的限额很低,所以在链外交易中,通过篡改数据所获取的收益要比通过不断地提供服务所能得到的收益要少。所以,从信用的角度来说,小额交易向外部转移,并没有太大的差别。将来,公共链的发展趋势将会是一个类似于中央银行的结算中心的服务提供商,而事实上,很多小规模的交易都是通过外部的交易完成的。[2]

三、 链外交易基本结构

img

链外交易基本结构示意图

如图所示,链外交易主要分为4层:硬件层、网络层、区块链层、链外层:[3]

(1) 硬件层:可信执行环境(Trusted Execution Environments ,TEE)提供了一个完全隔离的环境,可防止其他软件应用程序、操作系统和主机所有者篡改甚至了解在TEE中运行的应用程序的状态,从而在其他层实现了高效协议,如链外支付[4],可以消除争议流程和向后兼容[5]。例如,Intel Software Guard eXtensions(SGX)提供了一个TEE的实现。TEE和区块链具有互补性。一方面,区块链可以保证其状态的强可用性和持久性,而TEE不能保证可用性(因为主机可以自行终止TEE),也不能可靠地访问网络或持久性存储。另一方面,区块链的计算能力非常有限,必须公开其整个状态以供公开验证,而TEE产生的开销与本地计算相比最小,并通过远程认证提供机密状态的可验证计算。因此,构建能够同时利用两者的混合协议是很有吸引力的。

img

可信执行环境

(2) 网络层:区块链的网络层,作用是节点之间的信息交流和传递,参与区块数据的校验和记账过程[6]。在区块链中,网络层是保证其可扩展性、安全性和隐私的关键。有效的网络层能够提高交易的吞吐量,增强对恶意程序的抗性[7]。除了公用区块链P2P网络,区块链矿工们也会利用专门的矿工P2P网络,例如光纤来实现交易[8]。

(3) 区块链层:第一层是一个固定的、只能附加的区块链,它可以从网络中收集所有的交易。每次交易都会对更新的区块链状态进行编码。交易可以在双方之间进行数字资源的交换或者调用一个应用(也就是智能合同)。区块链的完整性通过参与者之间执行的共识算法来保证。共识算法依赖于例如计算上昂贵的工作量证明(PoW)或大量替代品[9]。设计第二层协议的关键是底层区块链的脚本语言。类似比特币的区块链基于受限的脚本语言,并通过一组未抑制的事务输出(UTXO)进行操作,而其他区块链支持图灵完备语言,实现高度表达的智能合约[10]。第二层协议通常假设区块链层的两个属性:完整性(即,仅将有效交易添加到账本)和与上限的最终同步性(即在关键超时之前,将有效交易最终添加到账本中)。

(4) 链外层:我们将链外或层间协议定义为:1、不会立即在区块链上发布每一笔交易(与链上交易相反);2、完全依赖于父链的共识算法的协议;链外协议有两种类型,分别是,通道:在n个同等方之间形成通道,COMMIT-CHAINS: 依赖于一个中央但不可信的中介。侧链由于具有自己的共识算法,因此不属于第二层[11]。

四、 通道

4.1通道概述

img

通道示意图

一个通道允许n个用户通过一致同意商定智能合约的新状态来建立。通道的生命周期包括三个阶段。1、通道建立;2、通道转换;3、通道关闭。

(1) 通道建立:所有参与用户通过在区块链上锁定资金来合作打开一个通道。资金只能通过一致的协议或通过预先定义的退款条件来释放。

(2) 通道转换:一旦通道被建立,所有参与用户都可以通过两步流程更新通道的状态。首先,某个用户提出一个新的状态转换,向所有其他用户方发送一个签名命令和新的状态img。每一方将状态转换计算为img,其中img表示应用img的转换函数,img表示与应用img相关的给定命令。其次,所有其他用户方重新计算状态转换,以验证提议的状态,然后再签署它并将其签名发送给所有其他用户方。

(3) 通道关闭:如果一个诚实的用户在本地超时前没有收到n个签名,它就认为对提议的状态有分歧。诚实的一方可以触发区块链第一层争端,在没有其他各方合作的情况下强制执行新的状态转换。

通道为各用提供的财产和安全保障有以下几点[12]:

(1) 一致建立:只有当所有用户方同意建立通道时,通道才被视为开放。

(2) 一致过渡:第二层的过渡,即没有链上争议,需要所有用户方同意。

(3) 平衡安全:诚实的一方用户总是可以在链上发生争议时从通道中撤回约定的平衡状态。

(4) 状态进展:用户可以随时在链上强制执行链外状态转换,因此状态机总是到达终端状态[13]。

建立通道:Bob和Coffeeshop都把资金存入到链上地址,Bob存入0.05BTC,Coffeeshop存入0BTC。只有通道关闭时,链上的资金才会被释放,用户才能真正拥有该资金[14]。

img

建立通道

通道转换:Bob和Coffeeshop之间的交易在链下进行,可以是多次交易。他们在建立的支付通道内通过相互在白条上签名来完成交易。每次交易,双方都保存一份相同的带有双方签名的白条。保存的白条是处理后续交易,解决交易纠纷的关键。

img

交易打白条

通道关闭:任何一方都可以申请关闭链下支付通道来进行交易结算。比如BoB 可以拿着白条:Bob 0.045 BTC Coffeeshop 0.005 BTC,到链上申请关闭链下支付通道,并进行交易结算,结算完成后 Bob 可以拿到 0.045 BTC,Coffeeshop拿到 0.005 BTC。

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

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

相关文章

Windows 11 安装tensorflow-gpu深度学习环境

前言 TensorFlow 是一个由 Google 建立的深度学习库,自从去年年初推出以来,它已经获得了很大的吸引力。主要功能包括自动微分、卷积神经网络(CNN)和回归神经网络(RNN)。它是用 C 和 Python 编写的,为了提高性能,它使用了一个名…

Linux环境基础和工具的使用

目录 1、Linux软件包管理器---yum 2、Linux开发工具 2.1、vim基本概念 2.2 vim基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.5.1 配置文件的位置 3 Linux编译器--gcc/g的使用 3.1 背景知识 3.2 gcc完成 4 Linux调试器--gdb使用 4.1 背…

每日面经分享(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件,编写以下测试脚本 import pytest import requests# 测试用例1:验证登录成功的情况 # 第一个测试用例验证登录成功的情况,发送有效的用户名和密…

【Linux】ubuntu安装google gtest框架

本文首发于 ❄️慕雪的寒舍 ubuntu 22.04.03 LTS 安装 google gtest 框架 1.依赖项 首先在ubuntu中安装如下包 sudo apt install -y unzip g gcc cmake make automake2.下载软件包 进入google gtest的github页面,下载源码包 Releases google/googletest https…

云数据中心传输的出路

研发端到端协议不是出路,研发更智能调度流量的交换机不是出路,将流量按长短突发模式分流到不同链路(逻辑的或物理的)才是出路。所有高速传输的前提是标准化,统一简单的操作。多么简单的领悟。 数据中心网络具有范围小,带宽大&…

C语言 输入输出语句讲解 标识符概念讲解

上文 C语言 预处理器 注释 基本案例讲解 我们讲了一些 预处理器等逻辑 那么 本文继续 C语言由一个或多个函数组成,每个程序都必须有一个main() 函数 因为每个程序总是从这个函数开始执行 main() 函数可以返回一个值,返回值为0表示程序正常结束 如果有多…

38.基于SSM实现的传统文化网站系统(项目 + 论文)

项目介绍 随着信息技术在管理上越来越深入而广泛的应用,作为一个一般的企业都开始注重与自己的信息展示平台,实现传统文化网站在技术上已成熟。本文介绍了传统文化网站的开发全过程。通过分析传统文化的需求,创建了一个计算机管理传统文化网站…

百廿荣光 逐梦远航——记黄城根小学120年校庆

逝者如斯,黄城根小学建校百二十年矣。回首往昔,峥嵘岁月,如画卷展开,历历在目,皆美景胜概。楼宇更迭,万象更新;历代师生,薪火相传。笃学笃行,育桃李于学堂;至…

Linux 内核优化简笔 - 高并发的系统

简介 Linux 服务器在高并发场景下,默认的内核参数无法利用现有硬件,造成软件崩溃、卡顿、性能瓶颈。 当然,修改参数只是让Linux更好软件的去利用已有的硬件资源,如果硬件资源不够也无法解决问题的。而且当硬件资源不足的时候&am…

低代码革新:软件开发的未来潜力与创新路径探索

过去的一年,挑战与机遇并存。人们一边忧虑市场经济下行所带来的新的增长难题、裁员危机,一边惊叹于AIGC、量子技术等领域不断涌现新的创新成果。 时代发生了改变,传统“互联网”的模式已走入尾声,新一轮的科技革命与产业变革正在到…

【VSCode+Keil5+STM32CubeMX】开发环境配置

一、软件下载 二、软件安装 三、配置环境 四、验证开发环境 五、Keil与VS Code的同步 从0到1搭建VS Code Keil5 STM32CubeMX开发环境 优点 支持标准库HAL库LL库代码编辑更“现代化”:代码提示、函数跳转、更高自由度的定制主题等优点多端同步,VS Code和…

深入了解C语言中的结构体类型与内存对齐

引言: 在C语言中,结构体是一种自定义的数据类型,它允许我们将不同类型的数据组合在一起,形成一个新的数据类型。结构体的使用为我们解决了一些复杂数据的表示和处理问题,不仅限于单单的整型或者字符。本文将深入探讨结…

金三银四上岸!2024最新Java高频面试题总结(附答案PDF)!

《Java面试全解析》1000道 面试题大全详解(针对于应届生、三到五年经验、六到十年经验!) 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏&#xf…

Mysql数据库getshell方法

今天摸鱼时候,突然有人问我不同的数据库getshell的方式,一时间我想到了mysql还有redis未授权访问到getshell的方式,但是仅仅第一时间只想到了这两种,我有查了查资料,找到了上面两种数据库getshell的补充,以…

python实现泊松回归

1 什么是基于计数的数据? 基于计数的数据包含以特定速率发生的事件。发生率可能会随着时间的推移或从一次观察到下一次观察而发生变化。以下是基于计数的数据的一些示例: 每小时穿过十字路口的车辆数量每月去看医生的人数每月发现的类地行星数量 计数数…

Mysql 常用SQL语句

1、查看mysql中所有的数据库, show databases; 2、创建库 create database 库名;(也可以用 create database if not exists 库名; 表示如果库不存在再创建) 例:create database if not exists ecology; 3、删除库 …

Linux安全加固

账号和权限 系统用户 超级管理员&#xff1a;UID0 系统默认用户&#xff1a;系统程序使用&#xff0c;从不登录 新增普通用户&#xff1a;UID大于500 用户管理 添加用户&#xff1a;useradd <用户名> 删除用户&#xff1a;userdel [-r] [-f] <用户名> 锁定/解…

electron 打包生成的latest.yml文件名字变成xxx.yml文件名

正常情况是electron每次打包会生成一个latest.yml文件和一个xxx.exe文件&#xff0c;但是当version的名字修改成 这样 后面添加了-beta &#xff0c;然后生成的文件名字就变成了 beta.yml 更改方法&#xff1a; 在build配置底下添加 "detectUpdateChannel": false…

我的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 &#x1f4dd;引用&#x1f320;引用概念&#x1f309;引用特性 &#x1f320;使用场景&#x1f309;做参数&#xff08;传值与传地址&#xff09;&#x1f309;传值、传引用效率比较 &#x1f320;引用做返回值&#x1f309;引用和指针的区别 &#x1f320;常引用&am…

坚持刷题|分发饼干

文章目录 题目思路代码实现实现总结主要步骤时间复杂度 扩展问题 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷第一个贪心算法&#xff1a;分发饼干 题目 455.分发饼干 思路 要解决这个问题&#xff0c;可以使用…