基于Lumino网络交易压缩协议LTCP解析

基于Lumino网络交易压缩协议LTCP解析,第1张

Lumino 交易压缩协议(LTCP),这是根链(RSK)链下支付网络 Lumino 网络的关键部分。相同的区块空间下,LTCP 协议可以使链上的交易量比传统的区块交易量变得更大。 LTCP 协议是对 RSK 平台的改进,将能使网络达到 2000 笔交易/秒。不过,LTCP 也可以以一个软分叉的方式部署到比特币网络,届时比特币的吞吐量将可以增加到 100 笔/秒,甚至更多,这取决于使用模式。LTCP 协议可以使 Lumino 网络满足 10 亿用户的需求。

前言

正如网络处理信息一样,比特币和加密货币是构建一种新型网络的基石,一种不仅可以适用于知识共享,还有可以用于价值交换的网络。这种价值的形式可能是产权、股票、货币或者其他代币,例如自治组织的投票权。价值互联网的诞生和智能手机的不断普及可能会使普惠金融成为现实。但是这项技术要覆盖到数十亿的人,它需要是便宜的和去中心化的。RSK 平台是一个去中心化的比特币侧链。RSK 价值互联网技术的构想包括多重协议层,每层协议解决不同的价值转移需求,共同形成一种连贯而且有d性的协议栈。本文将介绍 Lumino 交易压缩协议,RSK 协议栈的关键部分。

引言

加密货币或者去中心化数字现金领域正处于起步阶段。2009 年之前,大多数人尝试创建需要信任第三方的数字货币。所有的数字货币支付网络也都是中心化的。2008 年,(中本聪)发明了第一个去中心化加密货币和支付网络,接着第二年推出这种加密数字货币。但是,比特币的去中心化和抗审查性是对可扩展性进行折衷。 人们发明了各种各样的技术,例如致密区块(compact blocks)、更好的路由、区块头先行传播、概率验证、欺诈证明、区块链裁减、分片和支付通道等等。闪电网络是致力于改善区块链这一进程中的争吵的最高潮。闪电网络承诺减少每个网络节点所需的资源,并实现更大的网络吞吐量。但是,为了覆盖数十亿用户,闪电网络需要进行大量的链上交易。每当一个中心出现问题或者当一方消失的时候,这样的情况就会发生。此外,用户需要经常给他们的支付通道补充余额,这就需要更多的链上交易。假设每个用户每个月都使用一个主要的支付通道,那么每个通道每个月也需要结算,并且要求不会出现重大问题的节点,比特币吞吐量将能够容纳 200 万用户使用支付通道。本文提出的 LCTP 协议可以只占用区块 5 字节的空间来完成余额更新,将能够容纳 10 亿用户使用 RSK 平台。

我们的贡献

RSK 平台遵循与以太坊类似的分类账结构:网络建立在账户的基础上而不是 UTXOs。每个用户控制着一个或者多个账户。每个账户有一个 ECDSA 数字签名方案生成的私钥。公钥则被映射为更短的 RSK 地址。交易可从账户扣除资金,并将其转到其他账户或者智能合约上。每笔交易都会进行签名,ECDSA 公钥恢复程序将会从签名中提取转出资金的账户信息。

在本文中,我们介绍了一种可以处理更大交易量而所占存储空间小得多的交易压缩技术。我们还介绍了 Lumino 网络的基础,一种类似闪电网络、使用 LTCP 协议的 RSK 平台网络扩展。

Lumino 交易压缩协议(LTCP)

Lumino 压缩背后创新性洞察力是对所选字段的深度压缩(delta compression),所选字段是来自前一笔引用交易和之前交易的签名集合。深度压缩是通过允许每一笔交易关联到相同所有者的前一笔交易,以相同所有者的前一笔交易作为模板。任何可以被覆盖和未修改的字段都进行完整复制。使用 LTCP 协议的交易包含几个字段,有些字段是可选的,有些字段是持久性的。持久行意味着他们将永远成为区块链的一部分,而非持久性的字段可能会也可能不会成为区块链的一部分,这取决与未来的交易。以下是用户提供的交易字段:

● 随机数:一个随机数 [如果重复,将变成持久性的字段]

● seqNum:一个序列号 [可选,持久性]

● 金额:转账金额 [可选,持久性]

● 接收者:接收者的地址 [可选,持久性]

● deltaTxNonce:该值将指定引用交易的随机数进行深度压缩。[可选,持久性]。如果丢失,将指定前一个交易的随机数。

● gasPrice(或者手续费):需要支付的手续费金额 [可选,持久性]

● gasLimit:最大执行步数 [可选,持久性]

● 数据:发送给接收者的任意用户数据(主要用于智能合约)[可选,持久性]一笔交易的持久性字段集合被称为持久性交易信息(PTI)。添加到 PTI 的一个另外自动计算的字段,即清单索引。这是一串分配给每个新账号的递增序列号。实际签名的不是用户提供的交易数据,而是拥有附加信息的混合记录,称为 SigRec。SigRec 包含所有的字段,加上附加字段:

● prevTx:前一笔源自相同账户的交易的 SigRec 哈希值。

SigRec 包含按照固定顺序排列的所有字段。要对一笔交易进行签名,就要对它相应的 SigRec进行哈希,再用发送者账户相对应的 ECDSA 私钥对哈希摘要进行签名。金额是一个大整数,用以 10 为底数的指数(5bits)和尾数(bits 的数量是变量)表示,这样可以使压缩率更高。一个 4 字节的清单索引可以支持十多亿个账户。还可以使用较短的字段替换清单索引,使用密致、可变长度的正数来表示相同账户的交易区块中 block number delta 和交易指数。例如,如果前一个区块的第二个区块就是先前的区块,则值(-1,2)将解码引用,占用的空间将不超过 2 个字节。

如果满足标准条件(足够的资金,良好的格式等)加上序列号的额外条件,则接受交易,这可以允许 Lumino 网络更换交易。用户提供的字段中丢失的交易字段将与 delta 交易的字段一起复制。接受交易的具体条件如下:

● 随机数必须大于或等于该账户前一笔打包到区块中的交易随机数。

● 如果随机数相等,则 seqNum 值必须大于前一个 seqNum 值。

● 如果随机数相等,它将被包含到 PTI 中以进行广播。

● 如果存在,deltaTxNonce 必须以小于 D 值的距离指定一笔交易。(D 是指代不同区块高度之间的差值)

● prevTx = 哈希(prevSigRec),其中 prevSigRec 是前一笔交易的 SigRec

● 来源账户必须有足够的资金用于支付

● 深度压缩链的区块距离必须低于或者等于 M。

区块格式

一个 Lumino 区块存储两个 Merkle 树(或者 Merkle Tries)。第一个树包含所有 PTIs。第二个树包含所有的交易 ID。交易 ID 将构建成签名的 SigRec 哈希值。第二个树在概念上类似于隔离见证树,因此我们将呼吁所有字段加上见证部分的签名。

处理

交易的证明部分 T 存储在区块中时,我们称 T 是持久性的。只有交易 T 中的 PTI 是存储在区块中,但是 PTI 的 T 是通过 prevTx references 进行引用的,prevTx references 则紧跟着最好区块链上的持久性交易 T2,而 T2 是处于低于 M-T 值得区块距离,我们就说交易 T 是docked。可以处理一笔 docked 交易的证明部分,只需要保留 PTI。注意,一笔持久性的交易可以这样停止并 docked。

验证区块

除了标准的区块验证规则之外(难度、父母块等)如果一个区块包含至少一笔既不被 docked也不持久的交易,那么这个区块将被视为是无效的。

如果一个区块包含一笔持久性的交易 T,交易 T 的签名验证失败,那么这个区块是无效的。但是,如果一个区块包含一笔 docked 交易,这笔交易的签名验证失败,这个区块就是有效的,因为节点没有存储证明信息的义务。这意味着,如果他们可以提供在随后的区块中 dock以往的无效交易的正确交易签名集合,矿工可以创建一个包含“无效”交易的区块。

当然,没有完整节点会接受一个包含无效交易的区块,因此这些恶意矿工需要构建一条私有链,然后公布这条链。但是完整节点必须小心那些之前被区块链拒绝接受的区块,因为如果这些无效签名被有效区块确认的话,可能会被再次接受。因此最好缓存被拒绝区块的时间记录,这些记录列出了需要 docked 的无效区块。

必须永远存储第一笔交易的签名(随机数=0),以设置发送者的账户地址,这些是通过签名恢复程序暗含在签名中的。下图是一个进行了深度压缩的交易链示例,例如在一个链上支付通道中:

支付通道双方可以利用交易压缩进入链上交易通道。发送者向接收者发送一笔支付交易,然后将接收者的字段从交易中删除。如果 gasPrice 没有改变,那么随后每个压缩交易的都将是这个金额。总的来说,金额要求不超过 4 个字节。

区块链同步

同步区块链和 LTCP 交易包括两个阶段。无论一个节点什么时候接受一个区块,它必须验证这个区块,并找出见证部分是否为无效的或者已丢失。如果所接受的区块很旧,那么节点可以请求之后的区块,直到所有无效或者丢失证明信息的区块都被有效区块所覆盖,无效区块都变得无关紧要。如果仍旧无法提供某些必要的证明信息,那么这条有疑问的分支链将不能成为最好的分支链。如果接受的区块是新的,那么节点将请求这个区块提供所有的见证信息。

其他强化功能

Lumino 网络是使用 LTCP 协议的类似闪电网络的网络。因为闪电网络要求预先锁定资金,并由两个签名控制,所以我们需要一种由两个签名控制的新型账户。一个可能性是通过公钥恢复协议传递两个交易签名,而他们的公钥则在哈希之前以特定的顺序级联在一起,以获得该账户的地址。

另一种方法是创建一种可以附加到合约上的新型代码“签名验证代码”,这种代码允许进行合约交易,手续费将从合约中扣除,而无需涉及到第二个“源自”ECDSA 的账户。源自智能合约的交易需要提供一个发送者字段。智能合约的第一笔交易(随机数=0)不需要永久性存储签名,因为在验证签名代码中明确指定了他们的公钥。

在这两种情况下,账户是一个持有锁定资金的智能合约。这允许智能合约账户进行结算,因此在包含下一个结算之后就可以对其签名进行处理,将结算的存储空间减少为 6 个字节,这取决于智能合约如何编码和压缩余额。使用相同随机数值的 SeqNum 字段可以更新通道余额,但是旧交易无法替代新交易。这是必要的,以避免当随机数相同的时候,之前的交易阻止之后的交易打包到区块中。另一种选择是允许交易随机数系列存在差距,但是可能会导致矿工漏掉交易,并使智能合约的可预见性复杂化。

使用软分叉将 Lumino 部署到比特币网络

Lumino 网络是为了使区块链在分类账的基础上拥有更快的区块率(fast block rates)和更多的账户而设计的。为了使用软分叉将 Lumino 网络部署到比特币网络上,我们需要模拟一个基于分类账的账户:我们需要以一个扩展区块作为侧链的形式来嵌入比特币区块,以此来创建一个账户地址空间。每个账户在主链上创建一个 exodus 地址。这个 exodus 地址是在软分叉之前任何人都可以花费的地址和软分叉后特殊的地址。例如,它可以是 push-onlyscriptPub“ 《Lumino-tag》《Lumino-address》”。为了加载带有比特币的 Lumino 账户,这些比特币需要先发送到一个 Lumino 地址,这些比特币将存放在这个地址,直到有人通过提供 Lumino 地址的签名,从相同的任何人都可花费的地址上通过一笔特定的交易发送回来。一旦资金在 Lumino 网络上,他们就可以使用 Lumino 交易或者共享 Lumino 支付通道。但是,Lumino 支付确认仍然受到比特币 10 分钟出块时间的限制。为了通过 Lumino 所需的字节扩展比特币头部,字节可以存储在 coinbase 交易的 OP_RETURN 输出中。

使用软分叉实施 Lumino 网络还需要一个嵌入到每个区块来描述账户变动(或者交易收据)的已验证树,以允许 SPV 节点检测区块,而无需处理 LTCP 交易。

通过比特币软分叉部署 LTCP 的扩展性

如果 M 等于一年的区块量,并且我们假设用户每天进行两次付款,则每年进行 730 次付款。

假如 D 等于 10 笔交易。所有这些交易都可以压缩。一个比较符合实际的假设是,10%的交易发到随机地址,而剩下 90%将会周期性发到 73 个不同的地址。

随机支付的 10%将占据链上空间 20(接收者)+4(数额)+上一个交易链接(3 字节)=27字节,总共 2Kbytes。

90%周期性支付将占据链上空间金额(总共 4 字节),加上 73 个地址(1.5 字节)。

我们假设在 D 深度限制内可以使用所有 delta references。因此,730 笔交易将占据 7.5字节,或者每笔交易 10 个字节。但是,在线的完整节点仍然需要处理所有交易并进行存储。

最后,使用软分叉将 Lumino 部署到比特币网络并不会节省见证字段(Segwit)空间,因为Lumino exodus 地址是一个任何人都可以花费的输出,消耗此输出的交易将指定一个空脚本。

扩展性

要了解 Lumino 可以服务多少用户,处理多少笔交易/秒,我们必须分析 M 和 D 的值可能是多少。

我们应该限制 M 值,以减少对区块头的需求。对于以区块链为基础的工作z明,这通常不是问题,因为每个区块都带有工作z明,我们可以通过向无效区块(包含没有签名的交易)添加大量的确认来发起拒绝服务攻击。我们可以将 M 值设置为 1 年的区块量。

必须选择 D 值,以便节点可以存储每个源账户的最后一个 D PTI, 那些交易可以快速持久地进行存储(就像 RAM 或者 SSD)。假设 D=10,如果平均 PTI 是 20 字节,那么每个源账户占200 字节的空间。假设 LTCP 协议占用 SSD 10GB 的空间进行临时存储,那么网络可以处理 5亿用户(这个数字并没有考虑 Lumino 网络,仅仅是区块链层。)

但是,为了减少区块链重组之后同步所需的时间,节点可以在最后的 B 区块中存储完整交易(例如,B=20),那么节点需要缓存 60MB 的交易,这是可以忽略不计的。矿工存储完整交易的时间可以更长些,例如一个月,以允许长时间分裂后进行网络重组。

假设互联网连接可以进行 0.5 Mbyte/秒的传输(4 Mbit/秒, 42.5 GBytes/天)1,假设区块使用“密致区块”或者类似区块 1 压缩技术进行传播,则节点使用全带宽达到 7000 笔/秒。使用三分之一宽带似乎对于家庭电脑来说是合理的,速度将达到 2300 笔/秒。如果每个用户进行两笔支付,那么网络将可以服务 1 亿用户。

现代家庭电脑的 CPU 每秒可以验证 8000 笔 ECDSA 签名,因此 CPU 并不是瓶颈。作为比较,如果比特币使用相同的带宽,比特币区块将是 100 Mbytes,比特币吞吐量约为550 笔/秒。但是比特币区块链所占的空间将是 Lumino 网络的 40 倍,大约能处理四分之一的交易量。

总结

Lumino 交易压缩是区块链实现高压缩比的一个替代方案。交易压缩意味着重复使用数据,这意味着作折衷,更高的压缩率需要减少隐私。但是,折衷的选择权在用户的手中。虽然LTCP 协议可以压缩存储空间,但是存在资源瓶颈:带宽使用率,以及在较小程度上的 CPU使用率。但是如果节点只接受或者验证 LTCP 交易,他们就可以轻易发现包含无效验证数据的交易,因为 LTCP 交易允许短欺诈证明,可以进行分片。

LTCP 形成 RSK 链下支付网路 Lumino 网络的交易层,使 Lumino 网络可以满足 10 亿 RSK 用户的需求。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2601290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存