主页 > 官网最新版imtoken钱包 > 如何确认转账已经完成——探索区块链的原子性问题

如何确认转账已经完成——探索区块链的原子性问题

官网最新版imtoken钱包 2023-05-31 07:07:16

作者:Geo Protocol 原创团队:@geoprotocol

原子问题解决

假设你要操作一笔交易,但你不能 100% 确定交易是否完全执行并发送到目的地,可能只记录了一部分操作,或者一方可能会赔钱。 如果发生这样的事情,我相信没有人会再使用这个网络了。

电源故障或事件故障会严重影响数据库。 为了保证有效性,每个数据库事务都必须满足四大标准,即所谓的ACID模型,即Atomicity、Consistency、Isolation和Durability。 本文主要围绕原子性展开。

首先,什么是原子事务? 原子事务是要么完全执行要么根本不执行的数据库事务。 那么,为什么要使用这些交易呢?

我们先来看看我们要处理的问题,以一个分布式数据库为例。 假设我们要更改一些数据,而数据库不支持原子更改,这可能会导致某些数据与其他部分不一致。 如果用户不知道发生了变化,他将看到备用数据,但不确定哪些数据是正确的。 但是,如果数据库支持原子事务,那么任何更改只能以两种方式执行:全部或全无。 下面我们将深入研究最新的分布式数据库遇到的问题,然后分析链下实现。

传统解决方案

考虑到原子性,目前使用较多的是多阶段提交。 两阶段提交协议是最常见的,但一阶段和三阶段提交协议也被广泛接受。

单阶段提交是实现原子性最直接的方式btc节点查询,但也是一种粗糙且低效的方式。 交易管理者和执行指令的参与者进行更改。 显然,此模型中存在太多固有的威胁和陷阱,例如参与者可能退出然后回来并错过提交的可能性。

两阶段提交更全面,它将每个事务分为两个阶段。 首先,事务管理器查询每个参与者以确定是否提交事务。 他们创建必要的临时(在多跳支付系统的情况下分布式)并投票提交。 当经理收到所有参与者的“是的,我准备付款”的回复时,它会向他们发送提交请求,但一旦有人回复“否”或未回复,经理就会撤消付款。 此解决方案比单阶段提交更健壮和安全,但并非无懈可击。 事实上,如果参与者拒绝交易,项目(分配)将保留在那里并且不能被删除,直到管理器发出回滚指令,从而导致网络锁定。

为了解决这个问题,三阶段提交方案应运而生,将第一阶段分为两部分。 交易管理器也首先询问参与者的投票,但推迟初步命令,直到收到所有参与者的肯定响应。 然后参与者创建项目(即进行分配)并确认他们已为下一阶段做好准备。 与两阶段提交一样,最后阶段仅在收到所有确认后才执行。

btc持仓查询_sql 子节点查询_btc节点查询

sql 子节点查询_btc节点查询_btc持仓查询

三阶段提交具体步骤

三阶段提交虽然安全级别更高,但由于阶段多,需要交换的信息多,性能不佳。 所以就这些传统的解决方案而言,很难确定哪个更好。

这里有必要说一下单个数据库节点的原子性。 它是在前馈分类账的帮助下实现的。 一般来说,每当用户请求将一个事务反映到数据库中时,第一步就是让这个项目持久化(防止断电等低级问题,并确保恢复操作时更改持久化) ,然后将其写入磁盘。 帐户。 如果过程中出现系统故障,则有两种可能的结果。 第一,如果磁盘上的账本项目没有了,交易会被回滚; 第二,如果还在,重启时可以恢复磁盘上的事务。

btc节点查询_btc持仓查询_sql 子节点查询

一个分布式数据库,有四个本地数据库,每个数据库都有关于 Bob 和 Alice 的不同余额信息

链下网络中的原子交易

自 2009 年加密货币出现以来,比特币用户数量呈指数级增长。 相应地,交易佣金和交易延迟也在增加。 因此,社区正在积极寻找可扩展性解决方案。 由于他们的努力,闪电网络已成为第二层解决方案,支持支付通道和多跳交易。 还需要原子性来防止由于某人的过错而造成资金损失。 以下是现有的各种解决方案。

高温液晶显示器

sql 子节点查询_btc持仓查询_btc节点查询

为了实现原子性,目前使用最多的是HTLC(hash lock contract),即在预设的锁定时间之前出示初始密钥,可以消耗资金。 为了深入理解这个解决方案,我们先来看看基于闪电网络的交易流程。 首先,接收节点生成密钥并计算哈希值。 之后,将该哈希值发送给发送方节点,作为 HTLC 生成的基础。 发送方生成合约并将其发送到路径上的下一个节点节点 1,该节点创建一个具有递减时间锁的新合约(使用相同的散列)。 这个新生成的合约由节点 1 沿着路径发送到节点 2,然后节点 2 重复相同的操作并继续缩短时间锁。 合约一路走到接收方,接收方通过接收方一开始生成的密钥签名释放资金(解锁支付),然后从发布合约的节点获得资金。 反过来,此操作会向距离发送者最近的节点显示密钥,并在将密钥提供给前一个节点之前授权解锁支付和接收资金。 整个路径重复这个过程后,每个节点都收到了支付,支付完成。 因此,导致节点亏损的唯一因素是无法在时间锁定的期限内进行签名和释放资金,例如收到密钥后下线。

sql 子节点查询_btc持仓查询_btc节点查询

Alice 使用 HTLC 向 Eric 付款(通过三个中间人 Bob、Carol 和 Diana)

这种解决方案的缺点是,在出现不利情况的同时,偶尔会出现对合约到期时间的分歧和客户资金的损失。

HTLA

Ripple 的 Interledger 协议是一个开放的协议套件,用于各种账本之间的转账(跨链交易)。 “公证人”的概念在项目白皮书中被提出。 为了实现原子性,最初提出了通用模式和原子模式。

一般模式下,Interledger的原子性是通过HTLA(Hash Time Locking Protocol)实现的——HTLA本质上是HTLC的改进版。 类连接,包括条件支付渠道(通过 HTLC 更新实现)、On-Ledger 持有/托管(使用 HTLC)、简单支付渠道、Trustline 等。

btc持仓查询_sql 子节点查询_btc节点查询

Interledger 跨账本支付框架

sql 子节点查询_btc节点查询_btc持仓查询

换句话说,如果跨链支付通过不支持 HTLC 的区块链进行,则可以使用其他方法复制连接器(负责路由的特殊 Interledger 节点)以满足所有合同条款,例如如支付时间、金额、支付解锁条件等。

下午

Sprite通道的目标是开发一个新的支付通道,解决闪电网络原子性、部分充值和通道资金注销等问题。

HTLC 有了显着升级,增加了原来的合同经理 (PM)。 开发者希望 PM 成为 HTLC 的仲裁者,然后将任意单个节点的合约到期决策权委托给相应的软件,以防止参与者下线和亏损。 仲裁者应该是一个常规的以太坊智能合约(或任何其他区块链),注册一个声明,如“H 哈希的 X 的原始值在其过期之前已在区块链上发布”。

Sprite 通道也应该有一个统一的合约到期时间。 如果原值在合同到期前及时公布,则所有争议均被接受。 逻辑上会排除有人收到钱而另一个人指出所有人的到期时间都相同的情况。 但如果原值释放时间无效,则支付无争议。

sql 子节点查询_btc节点查询_btc持仓查询

SpriteChannel争议解决流程

高温激光雷达

Celer Network 是针对公链可扩展性,通过离线技术实现性能最大化的解决方案。 在这个架构中,PM(Primary Value Manager)变成了一个 Hash Time Lock Registry(HTLR)btc节点查询,但大部分功能仍然存在。 HTLR 有两个依赖端点,IsFinalized 和 QueryResult。 前者返回的结果是原始值是否注册在块号之前; 而后者返回原始值是否已注册。 这两个功能最终可以合并。 重要的是要注意 HTLR 始终在链上。

sql 子节点查询_btc节点查询_btc持仓查询

公证人

Interledger 的原子模式应该使用“公证人”的角色。 通过公证人支付与通过闪电网络 HTLC 支付非常相似。 两者之间的唯一区别是,在出示密钥之前,接收节点会将合约转给公证人,公证人是从其通用地址列表中随机选择的。 特殊实体。 公证人的设置是允许发送方设置验证支付的实体数量和可接受的恶意公证人数量(30%以内)。 公证人必须根据拜占庭容错 (BFT) 共识投票批准付款。 如果一切顺利,他们将“标记”交易,使接收节点能够解锁资金。 这个概念在白皮书中看起来不错,但跨链交易很难实现。 此外,它要求用户信任公证人。

观察员

这个角色出现在 Geo 协议中,这个概念为原子性问题提供了独特的解决方案。 目前项目组正在创建一个去中心化的点对点链下网络进行资产交换。

每当事务参与者在执行过程中遇到问题时,观察者就会介入。 观察者既不影响交易方向也不改变任何东西。 它们不用于验证每笔交易,仅用于干扰用户请求。 Geo 使用类似于两阶段提交的框架来处理常规事务。 首先,所有参与者都签署他们准备付款。 其次,如果每个人都有签名列表(即“文件”),则执行付款。 如果参与者说“文件”不存在,则观察者在两个阶段之间采取行动。 在这种情况下,他们会从任意一个节点获取签名列表,并发送给所有参与者,如果他们无法完成,他们将什么都不做,然后交易将按时到期。

btc节点查询_btc持仓查询_sql 子节点查询

GEO 协议观察员工作流程

原子跨链支付

原子互换是目前最常见的实现跨链支付的方式。 通过原子交换进行的跨链交易不需要托管服务或第三方干预。 它使用时间锁合约,并且必须由执行交易的区块链支持。 现实生活中,用户在预设时间将自己想要兑换的金额(比如1个BTC)锁定在区块链上,然后生成一个原始值,计算哈希值,声明另一个用户只能出示原始值才能得到这个钱。 在区块链上可以看到时间锁和哈希值(但不是原始值)。 这时,另一个用户想用3个莱特币换取这个比特币。 为此,他使用与第一个用户相同的散列在合约上锁定了 3 个莱特币——他可以在另一个区块链上看到的散列。 如果第一个用户想从第二个用户的合约中获得币,他必须公开自己的原值,然后第二个用户使用公布的原值从第一个用户的智能合约中获得币。 他的硬币。 要完成交易,第一个用户必须透露他的原始价值。 如果他不这样做,交易就无法完成。 在这种情况下,为了避免两个用户的资金同时被冻结的情况,合约的有效期有一定的时限。

sql 子节点查询_btc持仓查询_btc节点查询

btc节点查询_btc持仓查询_sql 子节点查询

原子事务各阶段展示

多路径

闪电网络的设计者提出了多路径原子支付技术,但目前还没有实现。 该技术旨在将大额支付分解为多个小额支付,以缓解网络流动性问题。 它的原子性是通过改进的HTLC实现的。 接收方创建一个基础原始值 (BP),用于稍后创建每个小额支付的部分原始值。 一旦收款人收到部分付款,无论付款到达的顺序如何,都可以通过此基础原始值解锁资金。

Geo协议中,多路径原子性的提供方式与单路径原子性完全相同(包括分配、签名集、签名传播列表、遇到问题时提供解决方案的观察者)

综上所述

去中心化网络中原子性的发展受到了许多新概念的影响。

最先出现的是哈希时间锁定合约(HTLC),其优点是可以减少节点下线时的损失,保证发送方和接收方的安全。 这样做的问题是资金必须冻结在渠道中,参与者必须保持在线以避免损失。

然后是在HTLC的基础上改进的HTLA和HTLR。 前者允许在各种注册中心使用 HTLC,甚至是那些不支持相应合约的注册中心。 后者解决了节点下线的问题。

观察员和公证人随后出现在新方案中。 虽然我们在使用这些方案时必须非常小心,因为观察者/公证人的中心化可能会损害网络,但一个设计得当的系统可以帮助这两个角色保持去中心化。

我们将继续进行研究,欢迎大家加入到分布式系统的开发和问题解决中来。