云平台上以太坊隐私和可扩展性解决方案的公开测试

区块链趋势继续保持强劲势头。 越来越多的专家预测在不久的将来这项技术将得到普遍应用。 目前,阻碍这一点的几个问题仍未解决。

首先,现代区块链系统的扩展性不佳。 例如,以太坊的吞吐量仅为每秒 20 笔交易,尽管它有很多优点,但它并不适合大型企业。

与此同时,以太坊因其针对黑客攻击和网络故障的强大保护而受到重视。 所以你不应该注销他。 纠正以太坊的缺点并将其转化为优点更有意义。

云平台上以太坊隐私和可扩展性解决方案的公开测试

Plasma Cash 作为以太坊上的隐私和可扩展性解决方案

Plasma 是以太坊项目联合创始人 Vitalik Buterin 在 2018 年巴黎 EthCC 会议上推出的一项技术,与闪电网络联合创始人 Joseph Poon 联合开发,号称是一种解决方案以太坊区块链的计算能力。 关于 Plasma 的第一个消息于 2017 年泄露给媒体。

该平台提供了可以与主区块链交互的智能合约外层,从而卸载根链,降低智能合约和去中心化应用程序(DApp)的交易费用。

有关开发的详细信息在文件中介绍了“Plasma:可扩展的自治智能合约”,日期为 2017 年 XNUMX 月。

Buterin 承认 Plasma 存在固有的可扩展性问题:每个用户都必须下载并验证每个 Plasma 区块,这会阻止指数级扩展。

为了纠正这个缺点,Plasma Cash 被开发出来——一个由智能合约和基于 Node.js 的私有网络组成的子链,它定期将其状态传输到根链(以太坊)。 它在区块链中提供了去中心化、安全性和可扩展性,从而解决了可扩展性三角难题。

与 Plasma 相比,Plasma Cash 的一个重要优势是,它仅吸引用户关注那些包含他们感兴趣的代币的区块:

“用户现在只需要检查 Plasma 链的可用性和有效性,以获取与他们想要花费、拥有和感兴趣的代币相关的特定索引,”Buterin 说。

据开发人员称,Plasma Cash 是解决以太坊黑客攻击的有效方法。 每个 Plasma 硬币都有一个所有者并且是独一无二的。 任何人都不能在另一用户不知情的情况下占有他的代币。 代币持有者可以通过“投诉”系统提供其代币历史记录中的“证据数据”来防止潜在的欺诈性提款。

在 Mongo Atlas 中测试 Plasma Cash

由于其新颖性,Plasma Cash 的研究仍然很少。 区块链专家正在积极测试其与各种云服务和数据库的交互,找出缺陷并寻找纠正方法。 特别是,Mongo Atlas 中的测试揭示了使用 Plasma 时的以下优势:

  1. 可靠的保护,防止数据丢失,因为集群中有多个副本相互同步。
  2. Быстрыйдоступ,因为可以在三个最流行的云平台上创建集群:Amazon、Google、Azure。 因此,Plasma Cash 节点可以部署在靠近 Mongo Atlas 的许多数据中心中。 我们已经证明,即使将 Plasma 节点部署在更远程的数据中心,速度也不会下降太多。
  3. Plasma 节点以只读模式使用,可以连接到一个 Mongo 集群,并且分布在世界各地, 提高地理可扩展性 (节点更接近用户)。
  4. 部署新节点很容易,因为您不需要重新同步所有内容。 您可以简单地连接到现有的 Mongo 集群,或者快速创建副本并配置与其的连接。
  5. 轻松扩展数据库。 随着时间的推移,会有更多数据可用,您可以根据需要增加集群中节点的大小。

云平台上以太坊隐私和可扩展性解决方案的公开测试

我们使用以下服务器进行测试:

  • 3 台虚拟 Azure 服务器 标准 E4s v3(4 个 vcpu、32 GiB 内存)。 每个服务器有3个节点。 其中之一可以向根链提交区块。
  • 每个节点都连接到自己的 Mongo Atlas M50 集群,该集群包含 3 个副本模式节点。

测试 1

3 个节点每个接收 100k 交易。 所有 9 个节点总共包含 300 万笔交易和代币。


初始状态: 最后一个区块#213; 0 笔交易和代币保存在数据库中。

00:00 — 启动 3 个脚本,每个脚本生成并发送 100 万笔交易
00:29 — 已开始向节点 #100 和 #1 发送 2k 交易
00:32 — 已开始向节点 #100 发送 3 万笔交易
00:32 — 节点 #1 从池中取出 11703 笔交易并形成区块 #214 (9fb)
00:34 — 节点 #2 从池中获取 27088 笔交易并形成区块 #214 (ef4)
00:34 — 区块 #214 (9fb) 已签名并发送到其他节点进行验证
00:36 — 节点 #3 从池中取出 11900 笔交易并形成区块 #214 (983)
00:37 — 区块 #214 (9fb) 被验证并发送到根链
00:38 — 区块 #214 (983) 被签名并发送到其他节点进行验证
00:38 — 区块 #214 (ef4) 被签名并发送到其他节点进行验证
00:40 — 区块 #214 (983) 被验证并发送到根链
00:41 — 所有节点从根链收到添加了区块 #214 (9fb) 的信息并开始应用 11703 笔交易
00:45 — 所有节点从根链收到添加了区块 #215 (983) 的信息并开始应用 11900 笔交易
00:51 — 区块 #214 (ef4) 被验证并发送到根链
00:52 — 节点 #1 从池中获取 51469 笔交易并形成区块 #216 (ea0)
00:56 — 节点 #3 从池中取出 55102 笔交易并形成区块 #216 (f75)
00:58 — 演示脚本已完成节点 #2 的工作
00:58 — 区块 #216 (ea0) 被签名并发送到其他节点进行验证
00:58 — 所有节点从根链收到已添加区块 #216 (ef4) 的信息,并开始应用 27088 笔交易
01:04 — 区块 #216 (f75) 被签名并发送到其他节点进行验证
01:14 — 节点 #2 从池中取出 72912 笔交易并形成区块 #217 (f85)
01:15 — 演示脚本已完成节点 #1 和 #2 的工作
01:17 — 区块 #216 (f75) 和 #216 (ea0) 被验证并发送到根链
01:21 — 区块 #217 (f85) 被签名并发送到其他节点进行验证
01:26 - 区块 #217 (f75) 和 #218 (ea0) 添加到根链,节点开始分别应用 51469 和 55102 笔交易
01:27 — 区块 #217 (a85) 被验证并发送到根链
01:41 — 节点 #1 从池中取出 36828 笔交易并形成区块 #219 (46f)
01:41 — 节点 #3 从池中取出 32998 笔交易并形成区块 #219 (bb3)
01:43 — 所有节点从根链收到区块 #219 (a85) 已添加的信息,并开始应用 72912 笔交易
01:46 — 区块 #219 (46f) 已签名并发送到其他节点进行验证
01:46 — 区块 #219 (bb3) 已签名并发送到其他节点进行验证
01:53 — 节点 #2 处理了池中的所有 100 万笔交易
02:37 — 区块 #219 (bb3) 被验证并发送到根链
02:41 — 区块#219 (46f) 被验证并发送到根链
02:48 — 区块 #220 (bb3) 和 #221 (46f) 添加到根链,节点开始分别应用 32998 和 36828 笔交易
02:54 — 节点 #1 处理了池中的所有 100 万笔交易
02:55 — 节点 #3 处理了池中的所有 100 万笔交易
04:12 — 所有节点包含 300 万笔交易和代币,最后一个区块 #221

测试 2

3 个节点各接收 1kk 笔交易。 所有 9 个节点总共包含 3k 笔交易和代币。

初始状态: 最后一个区块#213; 0 笔交易和代币保存在数据库中。

00:00 — 启动 3 个脚本,每个脚本生成并发送 1kk 交易
02:29 — 已开始向节点 #1 和 #1 发送 2kk 交易
02:33 — 节点 #1 从池中取出 11668 笔交易并形成区块 #222 (510)
02:35 — 区块 #222 (510) 被签名并发送到其他节点进行验证
02:37 — 区块 #222 (510) 被验证并发送到根链
02:38 — 节点 #2 从池中取出 46378 笔交易并形成区块 #222 (a9d)
02:38 — 已开始向节点 #1 发送 3kk 交易
02:41 — 节点 #3 从池中取出 5504 笔交易并形成区块 #222 (387)
02:42 — 区块 #222 (387) 被签名并发送到其他节点进行验证
02:44 — 区块 #222 (a9d) 已签名并发送到其他节点进行验证
02:44 — 区块 #222 (387) 被验证并发送到根链
02:49 — 区块 #222 (a9d) 验证并发送到根链
02:56 - 区块 #222 (510) #223 (387) 和 #224 (a9d) 添加到根链,节点开始分别应用 11668、5504 和 46378 笔交易
03:09 — 节点 #1 从池中取出 177170 笔交易并形成区块 #225 (e50)
03:09 — 节点 #3 从池中取出 119327 笔交易并形成区块 #225 (ccc)
03:10 — 节点 #2 从池中取出 149772 笔交易并形成区块 #225 (404)
03:26 — 区块 #225 (ccc) 已签名并发送到其他节点进行验证
03:32 — 区块 #225 (404) 被签名并发送到其他节点进行验证
03:33 — 区块 #225 (e50) 被签名并发送到其他节点进行验证
03:53 — 区块#225(ccc)经过验证并发送到根链
04:03 — 区块 #225 (e50) 验证并发送到根链
04:04 — 区块 #225 (404) 被验证并发送到根链
04:06 — 所有节点从根链收到添加了区块 #225 (ccc) 的信息并开始应用 119327 笔交易
04:14 — 所有节点从根链收到添加了区块 #226 (404) 的信息并开始应用 149772 笔交易
04:16 — 所有节点从根链收到区块 #227 (e50) 已添加的信息,并开始应用 177170 笔交易
04:32 — 节点 #3 从池中取出 209436 笔交易并形成区块 #228 (1e9)
04:40 — 节点 #2 从池中取出 212669 笔交易并形成区块 #228 (e38)
04:40 — 节点 #1 从池中取出 190144 笔交易并形成区块 #228 (861)
05:02 — 区块 #228 (1e9) 被签名并发送到其他节点进行验证
05:08 — 区块 #228 (861) 被签名并发送到其他节点进行验证
05:10 — 区块 #228 (e38) 被签名并发送到其他节点进行验证
06:13 — 区块 #228 (1e9) 得到验证并发送到根链
06:13 — 区块 #228 (861) 被验证并发送到根链
06:13 — 区块 #228 (e38) 验证并发送到根链
06:39 - 区块 #228 (861) #229 (1e9) 和 #230 (e38) 添加到根链,节点开始分别应用 190144、209436 和 212669 笔交易
07:07 — 节点 #1 从池中取出 199770 笔交易并形成区块 #231 (e04)
07:09 — 节点 #2 从池中取出 190473 笔交易并形成区块 #231 (36e)
07:09 — 节点 #3 从池中取出 178807 笔交易并形成区块 #231 (f43)
07:34 — 区块 #231 (e04) 被签名并发送到其他节点进行验证
07:37 — 区块 #231 (36e) 被签名并发送到其他节点进行验证
07:37 — 区块 #231 (f43) 被签名并发送到其他节点进行验证
08:49 — 区块 #231 (e04) 验证并发送到根链
08:51 — 区块 #231 (f43) 验证并发送到根链
08:52 — 区块 #231 (36e) 得到验证并发送到根链
09:47 - 区块 #231 (e04) #232 (f43) 和 #233 (36e) 添加到根链,节点开始分别应用 199770、178807 和 190473 笔交易
10:16 — 节点 #1 从池中取出 153075 笔交易并形成区块 #234 (e04)
10:16 — 节点 #2 从池中取出 168035 笔交易并形成区块 #234 (36e)
10:16 — 节点 #3 从池中取出 166685 笔交易并形成区块 #234 (f43)
10:42 — 区块 #234 (56d) 被签名并发送到其他节点进行验证
11:59 — 区块 #234 (1bb) 被验证并发送到根链
12:02 — 区块 #234 (58a) 得到验证并发送到根链
12:02 — 区块 #234 (56d) 验证并发送到根链
12:48 - 区块 #234 (1bb) #235 (58a) 和 #236 (56d) 添加到根链,节点开始分别应用 153075、168035 和 166685 笔交易
13:14 — 节点 #1 从池中取出 112226 笔交易并形成区块 #237 (5c0)
13:16 — 节点 #2 从池中取出 87550 笔交易并形成区块 #234 (58a)
13:16 — 节点 #3 从池中取出 99594 笔交易并形成区块 #234 (56d)
13:30 — 区块 #237 (5c0) 被签名并发送到其他节点进行验证
13:32 — 区块 #237 (58a) 被签名并发送到其他节点进行验证
13:34 — 区块 #237 (56d) 被签名并发送到其他节点进行验证
14:47 — 区块 #237 (58a) 得到验证并发送到根链
14:53 — 区块 #237 (5c0) 未在指定时间内验证
14:53 — 所有节点从根链收到添加区块 #237 (58a) 的信息,并开始应用 87550 笔交易
14:54 — 区块 #237 (56d) 验证并发送到根链
15:02 — 节点 #1 从池中取出 181206 笔交易并形成区块 #238 (c5f)
15:06 — 所有节点从根链收到添加区块 #238 (56d) 的信息,并开始应用 99594 笔交易
15:12 — 节点 #2 从池中取出 51990 笔交易并形成区块 #239 (ad8)
15:20 — 区块 #239 (ad8) 被签名并发送到其他节点进行验证
15:25 — 节点 #3 从池中取出 46685 笔交易并形成区块 #239 (857)
15:30 — 区块 #238 (c5f) 被签名并发送到其他节点进行验证
15:34 — 区块 #239 (857) 被签名并发送到其他节点进行验证
16:32 — 区块 #239 (857) 被验证并发送到根链
16:42 — 所有节点从根链收到添加了区块 #239 (857) 的信息并开始应用 46685 笔交易
16:42 — 区块 #238 (c5f) 被验证并发送到根链
16:42 — 区块 #239 (ad8) 未在指定时间内验证
16:54 — 节点 #2 从池中取出 96882 笔交易并形成区块 #240 (e6e)
16:56 — 节点 #3 从池中取出 39704 笔交易并形成区块 #240 (a47)
17:02 — 区块 #240 (a47) 被签名并发送到其他节点进行验证
17:02 — 区块 #240 (e6e) 被签名并发送到其他节点进行验证
17:18 — 所有节点从根链收到添加了区块 #240 (c5f) 的信息并开始应用 181206 笔交易
17:45 — 区块 #240 (a47) 被验证并发送到根链
17:47 — 节点 #1 从池中取出 54956 笔交易并形成区块 #241 (170)
17:59 — 区块 #241 (170) 被签名并发送到其他节点进行验证
18:09 — 所有节点从根链收到区块 #241 (a47) 已添加的信息,并开始应用 181206 笔交易
18:20 — 节点 #3 从池中取出 39104 笔交易并形成区块 #242 (955)
18:24 — 区块 #240 (e6e) 被验证并发送到根链
18:28 — 区块 #242 (955) 被签名并发送到其他节点进行验证
18:09 — 所有节点从根链收到区块 #242 (e6e) 已添加的信息,并开始应用 96882 笔交易
19:06 — 演示脚本已完成节点 #1 的工作
19:08 — 演示脚本已完成节点 #2 的工作
19:08 — 节点 #2 从池中取出 48241 笔交易并形成区块 #243 (fde)
19:14 — 区块 #243 (fde) 被签名并发送到其他节点进行验证
19:18 — 区块 #241 (170) 未在指定时间内验证
19:28 — 节点 #1 从池中取出 86967 笔交易并形成区块 #243 (37c)
19:35 — 区块 #242 (955) 被验证并发送到根链
19:40 — 区块 #243 (37c) 被签名并发送到其他节点进行验证
20:05 — 所有节点从根链收到添加了区块 #243 (955) 的信息并开始应用 39104 笔交易
20:15 — 区块 #243 (fde) 被验证并发送到根链
20:19 — 节点 #3 从池中取出 42981 笔交易并形成区块 #244 (9b5)
20:26 — 区块 #244 (9b5) 被签名并发送到其他节点进行验证
20:28 - 所有节点从根链收到添加了区块 #244 (fde) 的信息并开始应用 48241 笔交易
20:32 — 节点 #2 处理了池中的所有 1 笔交易
21:05 — 区块 #243 (37c) 未在指定时间内验证
21:15 — 节点 #1 从池中取出 86967 笔交易并形成区块 #245 (37c)
21:32 — 区块 #245 (37c) 被签名并发送到其他节点进行验证
21:42 — 区块 #244 (9b5) 被验证并发送到根链
21:50 — 所有节点从根链收到已添加区块 #245 (9b5) 的信息,并开始应用 42981 笔交易
22:04 — 节点 #3 从池中取出 45361 笔交易并形成区块 #246 (3f9)
22:11 — 区块 #246 (3f9) 被签名并发送到其他节点进行验证
22:51 — 区块 #245 (37c) 未在指定时间内验证
23:01 — 节点 #1 从池中取出 86967 笔交易并形成区块 #246 (37c)
23:08 — 演示脚本已完成节点 #3 的工作
23:15 — 区块 #246 (37c) 被签名并发送到其他节点进行验证
23:32 — 区块 #246 (3f9) 未在指定时间内验证
23:42 — 节点 #3 从池中取出 52173 笔交易并形成区块 #246 (71d)
23:51 — 区块 #246 (71d) 被签名并发送到其他节点进行验证
24:38 — 区块 #246 (37c) 未在指定时间内验证
25:01 — 节点 #1 从池中取出 86967 笔交易并形成区块 #246 (37c)
25:06 — 区块 #246 (71d) 验证并发送到根链
25:12 — 区块 #246 (37c) 被签名并发送到其他节点进行验证
25:14 — 所有节点从根链收到添加区块 #246 (71d) 的信息,并开始应用 52173 笔交易
25:29 — 节点 #3 处理了池中的所有 1 笔交易
26:40 — 区块 #247 (37c) 未在指定时间内验证
26:47 — 节点 #1 从池中取出 86967 笔交易并形成区块 #247 (37c)
27:03 — 区块 #247 (37c) 被签名并发送到其他节点进行验证
28:29 — 区块 #247 (37c) 未在指定时间内验证
28:35 — 节点 #1 从池中取出 86967 笔交易并形成区块 #247 (37c)
28:49 — 区块 #247 (37c) 被签名并发送到其他节点进行验证
30:13 — 区块 #247 (37c) 未在指定时间内验证
30:23 — 节点 #1 从池中取出 86967 笔交易并形成区块 #247 (37c)
30:38 — 区块 #247 (37c) 被签名并发送到其他节点进行验证
32:00 — 区块 #247 (37c) 未在指定时间内验证
32:11 — 节点 #1 从池中取出 86967 笔交易并形成区块 #247 (37c)
32:26 — 区块 #247 (37c) 被签名并发送到其他节点进行验证
33:49 — 区块 #247 (37c) 未在指定时间内验证
33:59 — 节点 #1 从池中取出 86967 笔交易并形成区块 #247 (37c)
34:12 — 区块 #247 (37c) 被签名并发送到其他节点进行验证
35:34 — 区块 #247 (37c) 得到验证并发送到根链
35:54 — 所有节点从根链收到添加区块 #247 (37c) 的信息,并开始应用 86967 笔交易
36:11 — 节点 #1 处理了池中的所有 1 笔交易
55:12 - 第一个节点处理了所有 3k 笔交易

云平台上以太坊隐私和可扩展性解决方案的公开测试

结果

人们发现Azure虚拟服务器没有足够的处理能力来处理如此大量的事务。 但该系统很好地应对了测试的主要任务,即演示 Plasma Cash 与 MongoDB 的操作。

我们邀请您参观 GitHub上 项目: https://github.com/opporty-com/Plasma-Cash/tree/new-version

这篇文章的共同作者是 亚历山大·纳西万, 高级开发人员 聪明解决方案公司.

此前开发团队 Opporty 我已经测试过 Plasma Cash 的速度。 结果显示在 这篇文章.

来源: habr.com

添加评论