LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 【译文】深入理解Plasma第一部分:基础

【译文】深入理解Plasma第一部分:基础

2020-04-21 灰狼 来源:区块链网络

原文地址:https://www.theblockcrypto.com/post/10793/understanding-plasma-part-1-the-basics

原文作者:Daniel Goldman

快速上手

?扩展以太坊是一个前所未有的挑战,Plasma是一个旨在提高事务吞吐量的layer 2层扩展框架

?本系列是Plasma技术的技术概述:Plasma技术是什么,它是如何工作的,它的技术研究现状

这篇文章是丹尼尔?戈德曼(Daniel Goldman)解释Plasma的系列文章的第一篇。

介绍

如果你们不清楚情况的话,扩展加密货币是非常困难的。

2017年8月,Vitalik Buterin和Joseph Poon发布了Plasma白皮书,向世界发布了一种新的、有希望的方法,以提高加密交易吞吐量,并使我们摆脱区块链堵塞的弊端。似乎一夜之间,Plasma就成了以太坊生态系统中最受推崇的layer 2层扩展框架,这种宣传带来了令人目眩的混乱,我们现在已经从加密空间大胆的承诺、雄心勃勃的研究中期待了,而大量的变体/建议/反建议/优化如此之多,基本上成了一个恶作剧。

这是令人兴奋和良好的,但不幸的是,Plasma的快节奏进化,连同它的技术复杂性,使得那些不直接参与研究和开发的人无法处理事物。从外部看,你可能会留下更多的问题,而不是具体的答案:我们可以实际期待Plasma链具备什么能力?在看到Plasma全面有效运行之前,我们还面临哪些困难?它的取舍是什么?它是如何工作的?

最重要的是:它到底是什么?

如果这些问题引起你的兴趣,你就来对地方了!本系列旨在概述Plasma技术-它是什么,如何工作,以及技术研究的现状可以告诉我们什么。第一部分包括:

?Plasma作为layer 2层技术的理论基础

?解释第一个实在的Plasma规范“最小可行Plasma”的内部工作原理

?Plasma Cash,自从“MVP”以来吸引了很多Plasma研发人员的变体说明

强制性免责声明:虽然不需要遵循任何严格的技术背景,但我们假设您对以太坊和智能合约有一些基本的了解。制定相应的计划。

背景:layer 2层

我们称之为“Plasma”的协议系列代表了区块链可扩展性问题的layer 2层解决方案的子集,这里的“问题”本质上是开放的、未经许可的区块链可以处理的有限事务容量。layer 2层通过允许(某些)交易被认为是最终完成的,而不必触及区块链本身,来规避这一瓶颈。

如果你愿意的话,你可以把layer 2交易想象成一张支票,你可以直接核实其账户的资金,而不必把它实际存入你的银行账户。这张支票可以有效地被视为纸币,并作为付款直接交给另一方,前提是下一方也有能力自己核实账户的资金(粗略类比,请勿挑剔)

Layer 2层系统的一般模式是:最初,一些资金被锁定在区块链的基础层上(我们假设以太坊从这里开始)。接下来,某些交易方(不一定是存款方)可以通过覆盖系统与该资金进行链下交易,而只是偶尔(如果有的话)与主链进行互动。在任何给定的时刻,任何资金的适当所有者都可以保证将其拥有的所有资金提回Layer 1层。

Layer 2层(正如我们所使用的术语)与其他链下支付系统的区别在于,尽管避免了恒定的基础层交互,但Layer 2层交易仍保留了我们期望从中获得的所有去中心化、去信任的安全保证。Layer 1层,通过保护您的私钥并运行必要的软件,您可以保证对自己的资金的保管,而不管任何交易对手的作为或不作为,这里的“交易对手”是其他个人、机构、共识机制,或者实际上是您无法控制的任何其他东西,除了主链本身。即使在噩梦般的、阴谋的、杜鲁门式的场景中,系统的所有其他用户都在暗中串通,试图偷你的钱,他们仍然会失败。

什么使PLASMA成为PLASMA

在过去几年的Layer 2层研发中,一种分类法已经缓慢但肯定地出现了,它使我们能够将Layer 2层机制整齐地划分为两类之一:“Plasma”或“通道”(如“状态通道”或“支付通道”)。尽管并非每个人都以这种方式准确地使用这些术语——最终,加密货币和语言本身都没有一个高级委员会来正式为我们解决这些定义——但我们在此假设“Plasma”和“通道”的定义足够宽泛,以便二者包含所有可能的Layer 2层系统的整体。

区分这两种类别的一种方法是根据它们所要求的最小链上事务:对于要被视为已完成的通道事务,严格来说不需要与主链交互;对于Plasma事务,严格来说需要与主链交互(如我们所见,由Plasma运营商而非用户进行广播)。Plasma仍然可视为Layer 2层扩展方法(尽管需要定期进行链上交易)的原因是,每一个Layer 1层事务都可以一次有效地完成许多事务;可以想象,一捆Layer 2层事务包被压缩为一个。不过,这本身似乎是通道的一个事实上的优点;不需要链上区块确认意味着(实际上)即时终结,减少链上交互通常是一件好事。

另一方面,整个通道范围内的状态更新需要通道内所有参与者的完全同意才能进行,这意味着与多个参与者建立一个单一通道非常不切实际。与不共享通道的交易方进行交易需要通过通道合作伙伴“中继”交易,从而将您的财务活动限制在那些可以与您通过通道网络图找到那些流动性路径的交易方之间。然而,在Plasma中,仅交易的发送方需要同意,,而涉及的所有各方进入,退出和自由交易彼此都不需要流动性锁定/限制(“谁需要同意 事实证明,“状态更新”是描述“通道”与“Plasma”二分法的一种等效方法)。

因此,从表面上看,可以说通道是受益于即时完成的应用程序的适当机制,并且可以预期会有少量相对固定的参与者进行交互,在涉及多个参与方且高交易吞吐量至关重要的场景下,Plasma是最有用的,而即时确定性则不那么重要。

正如我们将在后面的文章中看到的那样,有一些结构同时利用了通道和Plasma机制,并试图尽可能多地获取这两个方面的优势,因此我们最终可能不需要尽可能多地妥协。但我们不要太早下结论——在我们异想天开之前,我们首先需要了解Plasma是如何工作的。

最小可行Plasma

虽然最初的白皮书介绍了Plasma的通用概念,但它也很宽泛和野心勃勃(坦率地说,时间很长);它提出的一些想法——例如,一棵嵌套的Plasma链树——目前仍不在任何当前Plasma研究范围内,甚至可能最终无法实现。

因此,获得实际工作代码的第一个重要步骤——也可以说,是我们目前对Plasma的思考的起点——是一个称为最小可行Plasma(MVP)的规范。顾名思义,这里的目标是过滤掉所有花哨的特性,并将其提炼为最简单可行的工作实现。”这里的“工作”意味着它必须满足上面定义的layer 2层Plasma系统的基本要求,并且只有最小的功能——即一些可替代资产的A到B支付(我们将从这里假设以太坊,但它的工作原理与任何符合ERC2 0的代币相同)。

暂时(也只是暂时!),我们将忽略出现的任何其他不利因素,即使这些不利因素非常糟糕。事实上,MVP确实可以作为功能性Plasma解决方案!尽管存在缺点……好吧,由你来决定。

正如我们前面所看到的,Plasma的关键特性是许多事务被压缩并完成,只有一个事务落在主链上。在MVP中,“压缩”是通过Merkle树完成的;事务被组合在一起并被Merkle化为一个根,这就是需要放在layer 1层的全部内容。事务本身遵循比特币式的UTXO模型;即,它们从发送方证明所有权的输入中支出,并创建带有新所有者公共地址的新输出。也就是说:Plasma链本身就是区块链!使用必要的链下Plasma区块数据和链上Merkle根数据,用户可以通过以太坊链上的智能合约来验证自己合法财产的所有权,以执行规则并解决所有争端。

我们将把负责上述过程的实体(即使事务Merkle化,广播根目录并与用户共享数据)称为Plasma“块生成器”,本质上是Plasma运营商。值得注意的是,Plasma机制本身完全不知道此运营商采用什么形式。它可以是一个单一的“中心化”实体、一个联盟侧链、一个基于权益证明的区块认证系统等。Plasma建设的根本目标是所有基金管理都是非监护的,如果我们能让Plasma发挥作用,不管是谁在为我们制造区块,这个因素都应该保持不变。更“去中心化”的机制很可能提供我们与分布式、点对点系统相关联的其他好处,即审查抵抗、容错性等,但非监护性不变。因此,为了简单起见,我们假设运营商只是一个单独的实体,让我们更明确地解释Plasma机制本身。

这样,我们就可以开始经历典型的Plasma事务的生命周期,并检查在不同的可能场景中是如何处理的。

首先,Alice通过向合约发送链上以太坊事务将以太坊存到我们的Plasma链中,运营商将其包含在Plasma块中;该以太坊最初以UTXO的形式(显然)属于Alice。像往常一样,Alice想向Bob付款(注意,Bob本人不一定要自己或曾经做过任何链上存款。)为此,她创建了一个事务,用她的UTXO为Bob创建一个新的UTXO,并将该事务发送给Plasma运营商。运营商将此事务与其他(可能不相关的)事务捆绑在一起,将它们组合到一个Plasma块中,将它们“Merkle化”到其Merkle根,并将此根(仅此根)发送到主链。

然后,运营商将这个Plasma块发送给所有用户(包括Alice和Bob)。在接收到最新的块时,Alice和Bob会对其进行验证;此验证需要确保事务本身是有效的,并且该区块对应于链上的Merkle根。如果所有这些检查都成功了,Alice、Bob和所有其他用户就可以快乐地继续生活。

后来,Alice觉得她已经受够了这种疯狂的Plasma业务,因此决定自己想将资金撤回以太坊链。她通过链上事务发起此“提款请求”(注意:此提款请求不需要运营商的许可)。在她的事务中,她包括她想提款的Plasma链的UTXO,以及它所属的Plasma区块号和证明包含的Merkle路径。现在,在她获得资金之前,她必须等待“争议期”(比如说,一周)过去。在此期间,其他用户可以挑战她的退出,如果他们发现其违规行为。

这使我们想到:

愉快案例:每个人表现得体

在启动她的退出后,其他用户浏览他们的Plasma链副本,检查并确认,实际上,Alice试图退出的UTXO依然属于她。他们还验证了所有的块在其他方面都是有效的(尽管他们可能已经这样做了)。用户现在可以放心,Alice只带着合法属于她的钱离开,其他用户的资金是安全的,生活可以继续。

不愉快的案例:爱丽丝作恶

现在让我们为前一个场景创建一个备选结尾:Alice的退出尝试“足够”,足以被智能合约最初接受——也就是说,它是一个有效的事务,带有Merkle证明,确实与旧的Merkle根相对应。但实际上是双重花费;也就是说,她尝试使用之前发送给Bob的相同UTXO退出。唉,Alice。

但是不要紧!Bob(或者任何其他用户,假设Bob)有一周时间采取行动;他会根据Plasma链的副本检查Alice的UTXO,并注意到这是一笔双重支出。为了证明其恶意,他提交了一份“欺诈证明”,其形式是Alice先前使用所述UTXO的旧交易,以及包含在Plasma区块中的Merkle证明。Bob提供了加密证明,证明Alice已经花了这笔钱;她被当场抓获,她取款的企图被取消。

关于“惩罚”的注解

在这一点上,我们可能需要某种方法来进一步惩罚Alice的犯罪未遂行为,给她造成更大损失的可信威胁,并且从理想的角度上消除这种行为的发生。这些惩罚机制在通道建设中很典型。例如,在Poon-Dryja支付通道(目前在比特币的闪电网络中使用的支付通道结构)中,试图兑现过期交易的行为会导致交易对手收取通道的所有资金。虽然这种惩罚在Plasma或通道并未严格要求这种惩罚,但可以说是Plasma中这是一个更严格的要求;没有任何惩罚的概念,Alice可以简单地反复尝试不当取款,迫使Bob(或其他人)每次回应都要花gas费。然而,具有讽刺意味的是,在Plasma中如何实施这种惩罚也不太明显。要削减Alice在Plasma链上的一些资金,我们需要确定哪些资金是她的,这本身就需要它自己的索赔/争议窗口机制,把我们推到一个递归的无底洞。

因此,Plasma结构通常要求Alice在她尝试提款时提交“债券”。本质上,她说:“我想拿出5个以太坊,如果我的退出被证明是欺诈性的,你可以从我这里拿走1个以太坊。”我们可以自由地设定合约条款——即所需债券的大小,以及违规的响应情况(把债券作为奖励授予成功的挑战者,把它一笔勾销,只需要挑战者支付gas费等),并让他们变得使我们满意的宽容/严厉。

悲惨案例:运营商作恶

到目前为止,事情进展相对顺利,主要是因为我们做出了一个大大简化的假设,即运营商将我们所有的最大利益放在心上。现在是时候考虑不可思议的问题了:如果运营商是个彻头彻尾的骗子和小偷呢?

举个例子,假设Alice和Bob正着手开展业务,有一天他们发现运营商给他们发送了一个区块——其Merkle根在链上公证——包括公然无效的事务,该交易花费了90%Plasma链上可用的以太坊;回想一下,运营商完全负责生成块,因此在理论上,可以在块中包含他想要的任何内容。更糟糕的是,接下来说,运营商使用这个无效的事务请求链上提款。

与Alice在不愉快案例中的企图欺诈不同,即尝试双重支出,这次事务的支出来自甚至不存在的“UTXO”。因此,我们无法使用之前用于挑战和取消此提款的方法。

很容易想到,我们可以构造另一种欺诈证明来处理这种不同的不良行为,即:“如果我们要求运营商证明输入UTXO的存在,那该怎么办呢?还有,呃……如果那也来自“不知从何而来”,我们需要那一个的证据?然后,嗯……”

让我就在这阻止你。在这种情况下,欺诈证明确实是复杂的——甚至是不可能的——但即使探索这条路线也是毫无意义和徒劳的,因为它最终会遇到更大的问题。既然我们假设了一个邪恶的运营商,因此我们不妨全力以赴——运营商不仅会创建无效的事务并尝试退出,而且这样做的时候,他甚至不会与用户共享无效的Plasma块。Alice、Bob和其他人现在看到了一个巨大的可疑的退出正在尝试,但是对于任何细节都一无所知。

在我们解释解决方案之前,值得停下来思考一下这一点:由于我们的目标是避免继承任何交易对手风险,因此我们不能假设运营商(或任何其他人)在提供任何数据时完全可靠。事实证明,在不引入新的信任假设的情况下,任何试图以某种方式强制数据可用性(或类似地证明数据不可用性)的尝试本身都是没有希望的。这被称为“发送者/接收者信息差公理(speaker/listener fault equivalence)”的难题;简而言之,如果我们希望Carol给Derrick发送一些数据,我们发现自己处于Derrick声称“我从未收到过数据”的情况。Carol声称:“是的,他现在就把它藏起来!”,我们没有客观的方法来确定他们中的哪一个在撒谎。因此,我们的Plasma威胁模型必须包括运营商在没有任何警告的情况下突然完全保持沉默的可能性。

那现在怎么办?我们如何确保我们的运营商不会用不属于他的资金获利?在这种可怕的情况下,我们求助于MVP内核选项:鉴于我们不能直接阻止运营商的退出,因此我们允许其他所有人先退出。智能合约强制执行一个退出队列,以确保较早的UTXO拥有优先权;因此,只要所有人(没错,实际上是每个人)使用Plasma链在运营商的大规模提款完成之前就撤回他们应得的,运营商要窃取的所有以太币都将被耗尽。因此他为索要超过自己的份额而进行的虚假企图最终将是徒劳的。

从理论上讲,这是可行的。无论其他任何人采取何种行动,用户都将保管自己的资金;这是我们的目标。但坦率地说:恶意运营商(或者更可能的是,被黑客攻击/破坏的运营商)使用不超过一个事务的能力,迫使所有用户在时间耗尽之前蜂拥到主链上,这远远不理想。事实上,在最坏的情况下,如果主链块被堵塞了足够长的时间,用户可能无法及时退出,因此实际上可能会损失他们的资金。从理论上讲,可以通过更高级的退出策略来减少这种大规模退出所需的事务数量——通过签名聚合将多个事务批处理成一个——但是这仍然是一个未解决的研究问题,即使是可行的解决方案也需要用户之间的协调与合作,因此仍然不是最佳选择。

但是,我一直在小心行事,MVP结构还有另一个(可以说)更大的缺点。即使是在更愉快的案例下,我们也要求所有用户自己完全验证整个Plasma链。这让我们陷入了可用性Catch-22;Plasma在一定程度上很有用,可以扩展以太坊的事务吞吐能力,但是Plasma链提供的每秒事务吞吐量越高,带宽和内存方面的负担就越重。—它会给用户的客户端软件带来负担。回想一下,Plasma构建的一个关键好处是它可以轻松地支持许多用户;仅将其限制为可以运行重型应用程序的人员会严重削弱其价值主张。

当然我们可以做得更好……不是吗?

努力做得更好

回到强制大规模退出脆弱性:从某种角度看,“问题”的根源在于所涉资产的可替代性。假设Bob被欠了5以太坊;由于以太坊是一种可替代的资产,因此谈论他欠的“哪五个以太”毫无意义。因此,在我们悲惨案例中,当运营商以超过其应得份额的份额退出时,对于“他到底在偷谁的以太坊?”这个问题没有一个合乎逻辑的答案。以太坊是以太坊,所以他是从Plasma以太容器中提取,从某种意义上讲,这就是所有用户随后都需要带着自己的资金退出的原因。

那么,如果有某种方法可以指定以太的每个特定“部分”的所有者怎么办?与其把Plasma合约中的以太坊总余额表示为一个(大)数,不如想象一下,这个余额是一大堆不可分割的“以太坊账单”所有面额的总和。这能解决我们的问题吗?(这会引入新的问题吗?)

进入Plasma Cash(Plasma现金)

Plasma现金是Plasma结构的一种变体,它已经成为Plasma社区中许多研究的基础。它采取了与我们在MVP中看到的类似的“最低可行”方法,但首先有了一个新的限制:Plasma现金链上的所有资产都是不可替代的代币。这些NFT中的一个(我们称之为“代币”)可以代表任何东西:以太币或ERC-20代币的固定面额,一批ERC-20代币,一堆加密猫,有权成为100个区块的Plasma链运营商(免责声明:没有考虑过这个含义,不要在家尝试),等等。唯一的要求是它可以表示为一个ERC-721资产-就意味着它是独一无二的,不能被分割或合并。

Plasma 现金抛弃了MVP的比特币式UTXO交易模式;对于不可替代的代币,创建新交易输出的概念不再适用。取而代之的是,每一枚代币都在每一个Plasma区块中都占一席之地:代币的存在表明代币在该Plasma区块中的所有者发生了变化(即,Alice将其发送给Bob);如果不存在,则表示其所有者与上一个块中的所有者相同。因此,代币的完整历史可以通过在每个Plasma块中是否存在来描述,从当前的块一直回到他第一次存入的块。

正如我们很快将要展示的,一枚代币完整历史记录足以供其持有者用来确保拥有权,在这个模型下,这个历史记录不需要包含每个Plasma块中的所有数据:为了让Bob证明他的代币在给定块中的存在,他只需要事务的Merkle路径。然而,为了证明代币没有在给定的区块中转移,Bob要求能够证明没有数据,这是我们所认识和喜爱的Merkle树不支持的特性。

因此,为了实现这种“缺席证明”功能,Plasma 现金使用了一种增强的Merkle树结构,称为Sparse Merkle树。smt是具备额外的特殊特性的Merkle树:树的叶子(代币,在我们的例子中)都有一个唯一的标识号,用来确定它们在树上的位置。本质上,一个有序的顺序强加于他们;每一枚代币只能存在于它分配的“槽位”中。这意味着如果一枚代币不存在,我们知道它在哪里,因此,我们能够用一个Merkle分支来证明它的不存在,这个分支表明它的槽位是“空的”(即等于 一些空值-零,“未定义”等)。

因此,现在我们可以证明每一块硬币的存在和缺失,我们可以追踪代币的完整历史记录,可能看起来像这样:


等等。关键要点在于,证明这个历史的数据需求只包括每个块一个比特大小的Merkle证明,而不是MVP的完整Plasma块需求。Plasma轻客户端安全!

现在让我们来探究这样一种说法:这一系列的Merkle证据足以让代币的当前拥有者获得他们的资金。换言之,只要Steve拥有其代币的完整历史(以上述形式),那么他就得到客观保证:

1) 如果/当他试图退出时,他将对任何挑战作出适当的响应。

2) 如果/当其他人试图取回他的代币时,那么他将能够发起质疑并成功推翻他人的撤回请求。

在上面的例子中,截至第 505 个区块时, Steve是代币的真正主人。这里要强调的第一个要点是,为了让他认为自己的付款已经完成(在他的案例中,是从504区块的账单上收到的付款),他首先必须收到并验证这个代币的完整历史记录(即验证先前每个区块中的Merkle证明)。然后,并且只有在那时,他才能真正拥有这个币的所有权。

让我们看看可能发生的事情,以及Steve如何应对(其中一些应该从MVP中感到熟悉):

504区块是Steve对代币所有权的确立地,因此基本上有两种方法可以试图从他那里窃取:即在先前或后续的区块中声称拥有这个币。

例如,假设Alice试图通过在501区块广播她对代币的“存在证明”来认领代币;这样做,Alice是在暗示地证明501区块的转账是最新的有效代币交易,即她此后没有使用过代币。Steve的反应基本上与Bob在MVP不愉快案例中的做法相同;他显示在第502区块中Alice将币转给Bill(注意Steve不能伪造证据,因为这项交易包括Alice的签名)Alice被当场抓获,她的退出被取消了。再次,由于Steve有代币的完整历史,他知道他已经准备好应对任何此类欺诈性退出企图。。

现在假设Alice试图在块506退出她的代币,即在建立Steve所有权的块之后。请注意,为了让她的Merkle包含证明甚至被智能合约接受(即,对于Alice来说,要做到这一点),运营商将不得不在506块中恶意和欺诈地包含无效付款;但与往常一样,我们假设运营商可能是任意恶意的。

在这个用例中,Steve在区块504中通过提供其事务进行响应;在这里,他表明他在那个区块中拥有代币,并隐式声称他从那以后就没有花过代币。现在Alice有责任提供一笔Steve把代币发送给了另一方的事务,但Steve知道她无法这样做,因为他知道他实际上没有花代币(当然,他一直在用自己宝贵的生命保护自己的私钥)。同样,Alice的退出被取消了。

虽然上面的例子中隐藏着一些棘手的边缘案例(你可以把它作为回家的作业来完成),但这些退出游戏抓住了Plasma现金如何强制执行规则的要点。

但是等等,还漏了一件事情!我们回忆一下之前提到过的 MVP 悲惨案例:运营商停止提供块数据,然后继续尝试无效的提款。这次,在Plasma现金中,这个提现过程将只包含一个代币。因此,只有争议的币的实际拥有者(并且此人知道他们是谁)才需要采取行动;由于不可替代性的限制,就不再有将提取的资金“溢出”到链上资产馅饼的任何其他用户手中的风险。这使强制退出的风险与通道中心的风险相当。如果Plasma链不可操作,用户将(想当然)想要最终退出,但不再有任何恐慌模式,时间敏感,强制大规模退出失败。

前瞻

让我们花一点时间来认识到我们的收获:我们升级了MVP Plasma结构,现在用户可以运行轻客户端,并且基本上消除了丑陋的大规模退出漏洞。

这是否意味着我们已经找到了所追求的Plasma银子弹?

不完全是。首先,尽管我们已经最大限度地减少了每个用户需要处理的数据量,这个数据量仍然十分庞大;我们可以做一些速算,当一枚代币在Plasma链中停留足够长时,每个Plasma块每个代币一个Merkle证明开始变得相当大;另外,请记住,每一次支付都意味着用户需要将相关的完整历史转移给收款方。

但是,此外,我们不要忘记开始为Plasma现金施加的最初限制——不可替代性。这很可能为某些应用程序提供足够的功能——比如说,NFT市场——但最终,我们希望Plasma资产感觉和行为像钱一样。能用你喜欢的任何面额付款对钱来说都是很重要的;如果没有它,Plasma现金链上的支付网络的用户体验可能就像在一个只能支付现金的餐厅中,你没有零钱,你只能把支票撕开一样。

在第2部分中,我们将继续这段旅程,并讨论在Plasma现金基础上构建的方法,该方法可最大程度地减少历史数据膨胀问题,最重要的是,挽救支付的可替代性,同时仍旧保留 Plasma 现金的优势。

敬请期待。

Daniel Goldman是一名软件工程师、技术顾问和独立作家。他总部设在纽约布鲁克林。

感谢Georgios Konstantopoulos的宝贵反馈。

—-

编译者/作者:灰狼

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...