区块链-制造无需信任的通道

目录:https://blog.csdn.net/qq_40452317/article/details/89646633

简单的支付通道:https://blog.csdn.net/qq_40452317/article/details/90646284

摘自《精通比特币》  

我们刚刚描述的通道只有在双方合作,没有任何失败或企图欺骗的情况下工作。 我们来看看破坏这个通道的一些场景,并且看看需要什么来修复这类场景:

  • 一旦资金交易发生,Emma(买家)需要Fabian(卖家)的签名才能获得给自己的找零。如果 Fabian 消失,Emma 的资金将被锁定在 2-2 中,并彻底损失。这个通道一旦建立,如果在双方共同签署至少一个承诺交易之前,有任何一方断开,就会导致资金的流失。 
  • 当通道正在运行时,Emma可以采取Fabian已经签署的任何承诺交易,并将它发回链上。如果她可以发送承诺交易#1,只支付1秒的视频,为什么要支付600秒的视频? 通道失败是因为Emma可以通过广播对她比较有利的先前的承诺来欺骗。

这两个问题都可以用时间锁(timelocks)来解决 - 我们来看看我们如何使用交易级时间锁(nLocktime)。

除非她有保证的找零退款,否则Emma不能冒风险进行2-of-2 签名。为了解决这 个问题,Emma同时建立了资金和退款交易。她签署资金交易,但不传送给任何人。Emma只将退款交易传送给Fabian,并获得他的签名。

退款交易作为第一承诺交易,其时间锁确立了通道生命的上限。在这种情况下, Emma(买家)可以将nLocktime设置为30天或将来的第4320个区块。所有后续承诺交易必须具有较短的时间锁,以便在退款交易之前能把它们赎回

现在,Emma(买家)已经有一个完全签署的退款交易,她可以自信地发送签署过的资金交易,因为她知道她最终可以在时间到期后最终赎回退款交易,即使Fabian消失也不会有问题。

在通道生命中双方交换的每一项承诺交易都会被时间锁锁进未来时间点。但是,对于每个承诺,延迟时间会稍短一点,所以最新的承诺可以在被它废止的前一承诺之前被赎回。

由于nLocktime,任何一方都只有其时间到期后才能成功传播任何承诺交易。如果一切顺利,他们将合作并通过结算交易合理地关闭通道,这样一来发送中间的承诺交易就不必要了。实质上说,承诺交易只在一方断线而另一方不得不单方面关闭通道时才使用。

例如,如果将来承诺交易#1被时间锁定到将来的第4320个块,则将来承诺交易#2被时间锁定到将来的4319个块。(同理可知,)承诺交易#600则可以在承诺交易#1 变为有效之前600个块的时间被消费。

图显示每个承诺交易设置较短的时间锁,允许在它在之前的承诺变为有效前被花费

每个后续承诺交易必须具有较短的时间锁,以便可以在其前任之前和退款交易之前进行广播。能够尽早广播承诺交易的能力确保了承诺交易能够花费资金输出, 并排除任何其他承诺交易通过话费资金输出来赎回。比特币区块链提供的担保, 即防止双重支出和执行时间锁定,有效地允许每个承诺交易废止其前任有效性。

状态通道使用时间锁来在时间维度中执行智能合约。在这个例子中,我们看到时间维度如何保证最近的承诺交易在任何早先的承诺之前变得有效。因此,最近的承诺交易可以传输,消费输入和使先前的承诺交易无效。绝对时间锁定的智能合同的执行可以防止其中任何一方的欺骗。此实现只需要绝对的交易级时间锁 (nLocktime)。接下来,我们将看到如何使用脚本级时间锁定, CHECKLOCKTIMEVERIFY 和 CHECKSEQUENCEVERIFY来构建更灵活,有用和复杂的状 态通道。

第一次出现的单向支付通道在 2015 年由阿根廷开发商团队演示为视频流应用样 板。你仍然可以在 streamsium.io 看到它。

时间锁并不是使先前的承诺交易无效的唯一方法。在接下来的章节中,我们将看到如何使用撤销密钥来实现相同的结果。时间锁是有效的,但其有两个明显的缺点。在通道首次打开时建立最大时间锁,限制了通道的使用寿命。更糟糕的是, 他们迫使通道实现以在允许长期通道,和迫使其中一位参与者在提前关闭的情况下等待很长时间的退款之间取得平衡。

例如,如果允许频道保持开放30天,通过将退款时间设置为 30 天,如果其中一方立即消失,则另一方必须等待30天才能退款。终点设置越远,退款时间越远。

第二个问题是,由于每个后续的承诺交易必须减短时间锁,所以在双方之间可以交换的承诺交易数量有明确的限制。例如,一个30天的通道, 设置了位于未来第4320个块的时间锁,在必须被关闭前只能容纳4320个中间承诺交易。

将时间锁定承诺交易的间隔设置为1个区块存在危险。通过将承诺交易之间的时间锁设置为1个区块,开发者给通道参与者带来了非常高的负担,参与 者必须保持警惕,保持在线并监视,并随时准备传送正确的承诺交易。

现在我们了解如何使用时间锁来使先前的承诺无效,我们可以看到合作关闭通道和通过广播承诺交易单方面关闭通道之间的区别。所有承诺交易都是时间锁定的, 因广播承诺交易总是要等待时间到期。但是,如果双方同意最后的余额是多少, 并且知道他们都承担最终实现余额的承诺交易,那么他们可以构建一个没有时间锁代表相同余额的结算交易。

在合作关闭中,任一方都可以提取最近的承诺交易, 并建立一个各方面完全相同的结算交易,唯一差别就是结算交易省略了时间锁。 双方都可以签署这笔结算交易,因为知道无法作弊以得到更多的余额。通过合作签署和发送结算交易,可以立即关闭通道并兑换余额。最差的情况下,当事人之 一可以是卑鄙小人,拒绝合作,强迫另一方单方面关闭最近的承诺交易。但是如果他们这样做,他们也必须等待他们的资金。

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值