layer2 实现方式之状态通道

news2024/12/26 23:18:10

状态通道也算是一种比较热门的扩容方案,状态通道解决方案通过将链下交互和链上清算隔离开,能够在保障一定程度的非中心化和资产安全性的同时,实现速度更快、费用更低的交易。状态通道作为一种链下扩容方案,从一般到特殊分为通用状态通道、状态通道和支付通道三个层次。状态通道面临的主要问题包括路由问题、通道平衡问题、节点离线问题以及保证金锁定问题。

通过设计合理的路由策略可以将状态通道扩展为网络结构,目前的方案有哈希时间锁合约、虚拟通道和元通道。通道平衡问题的主要解决思路有背压路由算法和链下重新平衡方案。节点离线问题的主要解决思路是引入第三方来监督链下状态,并加以经济激励。保证金锁定问题的解决思路是从流动性资金供应商那里吸收闲散资金、共享资金池。

相比于链上扩容方案,状态通道巧妙地将链上和链下的职能分开,采用该方案无需改变公链结构,结合链上的安全性和非中心化特性以及链下的扩展性,但从整体生态来说,由于链上链下通信过程中可能存在的问题,依然属于安全性、非中心化和扩展性的一种新平衡。相比于其他链下扩容方案,状态通道的隐私性较好,可做到即时性,尤其适合于固定双方的高频互动,其劣势在于需要中间节点“垫付”资金、要求节点实时在线或需引入第三方来监督

状态通道(State Channel)是区块链链下(off-chain)扩容方案之一,目前有众多知名项目都采用了状态通道技术方案。

一. 状态通道概述

状态通道中的状态指的是区块链账本当前的样子,包括账户名称(或 UTXO 模型的地址)、余额(或 UTXO 模型下的未花费交易输出)、合约数据等。状态通道是在两方或多方之间开辟一条链下通道来进行状态交换,以实现较低的手续费和即时到账等特性。

利用状态通道交易的流程一般为:

1.交易方在链上锁定一定量的资产,在区块链上记录并开辟状态通道;
2.在通道内进行相互交易和状态更新,但不提交到链上;
3.当任一方想要关闭通道时,提交最终状态到区块链上进行清算。若另一方有异议,可在规定时间内申请链上仲裁
状态通道的扩容原理主要是链下交互、链上清算,避免将每一笔小额交易都放在链上进行,只需要把最终的状态提交到链上即可,减轻了链上的工作量。当双方均无异议可以很快完成清算,实现即时终结性(Instant Finality),此外由于在通道内进行链下交易,可实现较快的交易速度、较低的手续费,以及较好的隐私性。

当某一方试图欺诈,提交有利于自己的非最终状态上链时,另一方可以通过提交带有时间戳的最新状态向链上申诉,坐实后欺诈者会面临被没收抵押物的惩罚。但这要求状态通道的用户实时在线,

如果某一方长时间离线,链上清算会强制执行,从而可能造成损失。这种情况下一般会引入第三方来监督是否有欺诈现象发生,但这需要设计出合理的第三方经济激励机制。

状态通道方案比较适合参与方在相对较长的时间里需多次交换状态、对单次转账的交易手续费比较敏感等场景

二. 状态通道的三个层级

状态通道作为一种链下扩容方案,从一般到特殊主要分为通用状态通道(Generalized State Channel)、状态通道(State Channel)和支付通道(Payment Channel)三个层级。

在这里插入图片描述
1 通用状态通道
通用状态通道是模块化、标准化的状态通道开发框架,实例化之后即成为状态通道或支付通道。开发人员无需很熟悉状态通道的相关技术细节也可以很容易地开发基于状态通道的应用,用户也可在不执行任何链上操作的情况下在通道内安装、运行和终止 DApp。

典型的项目有 Counterfactual(基于链下状态通道建立应用的开发架构)、Celer Network(layer-2 扩展平台,帮助开发者快速构建和运行非中心化应用。)。

2 状态通道
状态通道是在链下进行状态交互的通道。通过将链上的图灵完备智能合约放到链下执行,来实现状态交换和链下扩容的目的。例如基于状态通道开发的围棋游戏,就是在链下不断进行状态的交换。

典型的项目有 Perun Network(支持链下智能合约的执行)、FunFair(基于状态通道的对赌游戏)。

3.支付通道
支付通道属于状态通道在支付领域内的具体应用。交易双方在状态通道内可多次进行账务往来,直到通道关闭时上链清算。链下转账快速无手续费,当一方尝试在上链清算时进行欺诈,会有仲裁和惩罚机制来确保双方的资产安全。

典型的项目有闪电网络(BTC 的状态通道支付网络)、Raiden(以太坊版的闪电网络)、Trinity(Neo 版的闪电网络)Liquidity Network(基于 NOCUST 协议的支付通道网络)

三. 状态通道存在的问题

在这里插入图片描述
为了将支付通道扩展为支付网络,在已开辟的状态通道上通过路由节点建立两个陌生节点的连接无疑是比较经济的。正如六度人脉理论阐释的那样,我们可以借助六度人脉和世界上其他任何人建立联系。目前主要有如下三种路由方案:

1.1. 哈希时间锁合约(HTLC,Hashed-Time Lock Contract)
代表项目:闪电网络

发送方向接收方发送 BTC 到 1/2 多重签名地址,如果接收方不能在合约规定的时间内通过“签名+哈希密文”的方式将 BTC 解锁,那么 BTC 就会退还给发送方。

在这里插入图片描述如图所示,A 想通过 B、C 向 D 发送 1 个 BTC。D 作为接收方,首先生成一个随机私钥 r(相当于钥匙)和公钥 R(相当于锁),然后将 R 发送给 A。

A 和 B 首先搭建了哈希时间锁合约,R 就是其中的“锁”,这里的“时间”是 3 天,“哈希密文”就是只有 D 才知道的私钥 r。这个合约意味着只要 B 能在 3 天之内获得私钥 r 来解锁 R,就可以得到A 在智能合约里发送的 1 个 BTC,否则这 1 个 BTC 就会退还给 A。

B 需要获得私钥 r 来解锁 R,按照同样的思路,B 和 C 的智能合约规定,只要 C 能在 2 天之内获得私钥 r 来解锁 R,就可以得到B 在智能合约里发送的 1 个 BTC,否则这 1 个 BTC 就会退还给 B。

最后 C 和 D 的智能合约也是如此,只要 D 能在 1 天之内用私钥 r 来解锁 R 就可以获得这 1 个 BTC。相当于 D 是用私钥 r 换取了C“垫付”的 1 个 BTC,C 拿到私钥 r 后再用它解锁并换取了 B“垫付”的 1 个 BTC,之后 B 用 r 解锁了 A 的 1 个 BTC。

也就是说,D 首先生成了“锁”和对应的“钥匙”,然后锁依次传到 A、B、C;D 收到 BTC 后,“钥匙”依次传到 C、B、A。这样几个节点无需相互信任就实现了从 A 到 D 的安全转账。实际操作中,中间节点会收到额外的服务费作为经济激励(这也意味着经过的中间节点越多,手续费越高)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时光飞逝,博客两周年啦

原文链接:时光飞逝,博客两周年啦 博客自 2020年12月10日 运营以来,已经成功走过两年啦(差点成为两年半的博主)。 在这两年中,曾替无数网友解答了各种关于建站的疑难杂症,此处略过 30000 字。 …

linux系统动态库的连接

前言:在应用程序开发过程中,难免会用到第三方库,有的是开源的第三方库,有的是不开源的,还有的是自己写的库。上篇文章总结了应用程序调用静态库《linux中静态库编译与使用》,本文总结了几种在应用程序中快速…

八、esp8266建立基本网络服务器

1、网络服务器 (1)网络服务器有很多类型,它们功能十分丰富。通常承担网络服务器工作的设备都是运算能力比较强大的电脑。 (2)ESP8266虽然也能实现网络服务器的一些功能,但是毕竟它的运算能力是无法与那些昂贵的服务器电脑相比较,因此ESP826…

STM32的升级--ICP/ISP/IAP

ICP/ISP/IAP 区别 ICP(In-Circuit Programing): 通过J-Link/SWD等下载器烧写程序,上位机需要借助其他硬件的参与才能更新固件,可以更新MCU的所有存储区域; ISP(In-System Programing): 通过MCU出厂时固化的一个bootloader升级程序&#xff0…

第四节 空间参考类的属性说明

空间参考类:SpatialReference 说明 空间参考类是arcpy下面的一级类,用于定义空间参考的各类信息,主要是坐标信息。 空间参考Spatial Reference与坐标系最大的区别,在于空间参考除了定义坐标系以外,还要定义一系列地理…

Java BigDecimal总结

文章目录Java BigDecimal总结概述float 和 double的问题创建BigDecimal对象BigDecimal.valueOf()源码分析equals() 和 compareTo()BigDecimal设置精度和舍入模式舍入模式介绍BigDecimal转字符串DecimalFormat 格式化总结Java BigDecimal总结 概述 BigDecimal类在Java的java.m…

一个简单的数学问题

这个东西发提问没人看就发在这里了 一个球体的体积V_Sphere是容易求的: 则我们很容易求出半径为1的圆球的体积为. 众所周知方程【】在三维笛卡尔坐标系中的图像为一个半径为R的圆, 则R取1时这个方程的图像就成了一个半径为1的圆。 那么我们就能推出f(x…

飞行机器人专栏(九)-- 多传感器固定端口分配

目录 ​编辑 1 /dev/设备列表 2 ttyUSB*端口ID 3 端口别名rules动态绑定 4 launch文件配置 1 /dev/设备列表 lsusblsusb -t 2 ttyUSB*端口ID 查看/dev/ttyUSB* 设备端口ID :0403:6014 找到对应USB的设备ID,这里是 0403:…

测试新风向|视频 AI 转流程图初体验

前言: 😄作者简介:小曾同学.com,小伙伴们也可以叫我小曾,一个致力于测试开发的博主⛽️ 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:…

极狐GitLab include 语法减少 CI/CD Pipeline 代码冗余,提升构建效率

项目经理:我们有个 Java 的新项目要开始了,需要你帮忙设置调试一下 CI/CD Pipeline DevOps 工程师:好的,没问题 ONE WEEK LATER... 项目经理:新项目的 CI/CD Pipeline 咋样了啊,我看研发还是手动人肉编译…

基于Vue+SpringBoot的在线考试系统,支持多种题型,含数据库文件

spring-boot-online-exam 完整代码下载地址:基于VueSpringBoot的在线考试系统 快速体验 在安装了docker的机器上执行如下命令: 安装mysql: docker run --name exam-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDaA111111 -d mysql:5.7.15然后用doc/sql…

freeswitch的gateway实现出中继的主备方案

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 某些呼叫场景中,我们有2条出中继线路可选,2条出中继需要按照主备模式来配置,优先使用主中继呼叫,当主中继出现问题时,呼叫自动转移到备用中继呼叫。 本节中&a…

正大国际期货:恒指操作技巧之交易中五种绝佳的开仓思路分析

很多人总是亏损,其实最重要的原因之一是没有一个优势的概率系统,正大IxxxuanI经过了解之后,对目前市面上概率系统进行总结,现将以下几种优势的概率系统归纳罗列如下,有缘者定可举一反三,或可为你细化和改良…

Android中GRPC的使用-拦截器

在构建GRPC应用程序时,无论是客户端应用程序,还是服务端应用程序,在远程方法执行之前后之后,都可能需要执行一些通用逻辑。在GRPC中可以拦截RPC的执行,来满足特定的需求,如日志、认证、性能度量指标等&…

基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离

一、篇头 本文介绍Platform平台驱动框架,使用此框架,将可以用上DTS设备树文件,实现设备的静态枚举,实现设备与驱动的分离。 本文基于Amlogic T972 , Android 9.0, 内核版本 4.9.113 二、系列文章 第1篇&a…

【Docker基础篇】一文完成快速使用

Docker基础篇前言Docker是什么?Docker与传统虚拟机技术区别Docker作用、为什么用docker原理Docker常用命令案例展示redis各种软件安装打包到本地、上传到远程仓库打包到本地推送到远程仓库前言 所有的权威均来自与官方,如有疑问请参考官网文献。人非圣贤…

网络厂商 Aruba 2022 年业绩成倍增长的经验是什么

转眼,2022 年马上就要结束了。 在多重不确定的经济环境之下,网络厂商 Aruba 中国在 2022 年的业绩,与上一财年相比仍然实现了成倍的增长。今年初,CSDN 曾采访过 Aruba 中国区的管理者 Aruba 中国区总经理谢建国与 Aruba 北中国区大…

alpine的介绍与使用

目录 1. alpine 简介 2. 基于alpine构建jdk8镜像 2.1 Dockerfile 2.2 将构建目录上传到linux中 2.3 执行构建 3. 镜像瘦身 4. 上传阿里云镜像仓库 1. alpine 简介 Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl …

【车间调度】基于卷积神经网络的柔性作业车间调度问题的两阶段算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CryptoJS加密解密

1.CryptoJS CryptoJS库是前端js写的一个加密解密的工具,使用场景就是对于像账户密码等重要信息要显示在页面上时,需要加密,这样才能保证安全,CryptoJS提供了许多加密的方法, 请参考: cryptojs-JavaScrip…