क्लाउड प्लॅटफॉर्मवर इथरियम गोपनीयता आणि स्केलेबिलिटी सोल्यूशनची सार्वजनिक चाचणी

Блокчейн тренд продолжает набирать обороты. Все больше экспертов прогнозируют универсальную адаптацию данной технологии в скором будущем. На данный момент нерешенными остаются несколько проблем, препятствующих этому.

Прежде всего, современные блокчейн системы плохо масштабируются. Например, пропускная способность Эфириума составляет всего 20 транзакций в секунду, и, несмотря на многочисленные преимущества, он не подходит для крупного бизнеса.

В то же время, Эфириум ценится за мощную защиту от взлома и сбоев сети. Так что не следует списывать его со счетов. Куда целесообразнее исправить недостатки Эфириума и превратить их в преимущества.

क्लाउड प्लॅटफॉर्मवर इथरियम गोपनीयता आणि स्केलेबिलिटी सोल्यूशनची सार्वजनिक चाचणी

Plasma Cash как решение для конфиденциальности и масштабируемости в Эфириуме

Plasma – технология, представленная Виталиком Бутериным, сооснователем проекта Ethereum, на конференции EthCC в Париже в 2018. Она была разработана совместно с Джозефом Пуном, сооснователем Lightning Network, и заявлена как решение, увеличивающее вычислительную мощность блокчейна Эфириум. Первые новости о Plasma просочились в медиа в 2017.

Данная платформа представляет собой внешний уровень смарт-контрактов, способных взаимодействовать с основным блокчейном, тем самым разгружая корневую цепочку, уменьшая транзакционные сборы за смарт-контракты и децентрализованные приложения (DApps).

Подробная информация о разработке была изложена в документе «Plasma: Scalable Autonomous Smart Contracts», датированном августом 2017-го года.

Бутерин признал, что Plasma присущи проблемы с масштабируемостью: каждый пользователь должен загружать и проверять подлинность каждого блока Plasma, что предотвращает экспоненциальное масштабирование.

Чтобы исправить этот недостаток, была разработана Plasma Cash — дочерняя цепочка, состоящая из смарт-контракта и приватной сети на основе Node.js, периодически передающей свое состояние в корневую цепочку (Эфириум). Она беспечивает децентрализацию, безопасность и масштабируемость в блокчейне, решая тем самым Трилемму Масштабируемости.

Важным преимуществом Plasma Cash на фоне Plasma является то, что она привлекает внимание пользователей только к тем блокам, что содержат интересующие их монеты:

«Теперь пользователям нужно проверять доступность и правильность цепи Plasma только для специального индекса, связанного с монетами, которые они хотят потратить, которыми владеют и которые их интересуют», – сказал Бутерин.

По словам разработчиков, Plasma Cash является эффективным лекарством от взломов в Эфириуме. Каждая монета Plasma имеет владельца и является уникальной. Никто не может завладеть монетами другого пользователя без его ведома. Держатель монеты может предотвратить потенциальный мошеннический вывод средств через систему «жалоб», предъявив свои «данные доказательства» в истории своей монеты.

Тестирование Plasma Cash в Mongo Atlas

В силу своей новизны, Plasma Cash пока остается мало изученной. Блокчейн специалисты активно тестируют ее взаимодействие с различными облачными сервисами и базами данных, фиксируют недостатки и находят пути их исправления. В частности, тесты в Mongo Atlas выявили следующие преимущества при работе с Plasma:

  1. Надежная защита от потери данных, так как несколько реплик синхронизирующихся между собой в кластере.
  2. Ыстрый, так как кластер можно создать на трех самых популярных облачных платформах: Amazon, Google, Azure. В результате, Plasma Cash ноду можно развернуть в многих датацентрах, расположенных близко к Mongo Atlas. Нами было доказано, что скорость не сильно падает, даже если Plasma ноды разворачиваются в более удаленных датацентрах.
  3. Plasma ноды, используемые только в режиме чтения, могут быть подключены к одному Mongo кластеру и расположены в разных уголках мира, что улучшает гео-масштабируемость (ноды находятся ближе к пользователям).
  4. Развернуть новую ноду легко, так как не нужно все заново синхронизировать. Можно просто подключится к существующему Mongo кластеру или быстро сделать копию и настроить подключение к ней.
  5. Масштабировать базу данных легко. Со временем данных становится больше, и можно увеличивать размер нод в кластере по мере необходимости.

क्लाउड प्लॅटफॉर्मवर इथरियम गोपनीयता आणि स्केलेबिलिटी सोल्यूशनची सार्वजनिक चाचणी

Мы использовали следующие сервера для проведения тестов:

  • 3 виртуальных Azure сервера Standard E4s v3 (4 vcpus, 32 GiB memory). На каждом сервере поднято 3 ноды. Один из них может сабмитить блоки в корневую цепочку.
  • Каждая нода подключена к своему Mongo Atlas кластеру M50, содержащему 3 ноды в режиме реплики.

चाचणी १

3 ноды получают по 100к транзакций. Итого, во всех 9 нодах содержится 300к транзакций и токенов.


Исходное состояние: последний блок #213; в базе сохранено 0 транзакций и токенов.

00:00 — Запущено 3 скрипта, которые генерируют и отправляют по 100к транзакций
00:29 — Началась отправка по 100к транзакций в ноды #1 и #2
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 (а85) провалидирован и отправлен в корневую цепочку
01:41 — Нода #1 взяла из пула 36828 транзакций и формирует блок #219 (46f)
01:41 — Нода #3 взяла из пула 32998 транзакций и формирует блок #219 (bb3)
01:43 — Все ноды получили из корневой цепочки информацию о том, что блок #219 (а85) добавлен и начинают применять 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

चाचणी १

3 ноды получают по 1кк транзакций. Итого во всех 9 нодах содержится 3кк транзакций и токенов.

Исходное состояние: последний блок #213; в базе сохранено 0 транзакций и токенов.

00:00 — Запущено 3 скрипта, которые генерируют и отправляют по 1кк транзакций
02:29 — Началась отправка по 1кк транзакций в ноды #1 и #2
02:33 — Нода #1 взяла из пула 11668 транзакций и формирует блок #222 (510)
02:35 — Блок #222 (510) подписан и отправляется другим нодам на валидацию
02:37 — Блок #222 (510) провалидирован и отправлен в корневую цепочку
02:38 — Нода #2 взяла из пула 46378 транзакций и формирует блок #222 (a9d)
02:38 — Началась отправка 1кк транзакций ноду #3
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 — первая нода обработала все 3кк транзакций

क्लाउड प्लॅटफॉर्मवर इथरियम गोपनीयता आणि स्केलेबिलिटी सोल्यूशनची सार्वजनिक चाचणी

परिणाम

Было выявлено, что виртуальные сервера Azure имеют недостаточную процессорную мощность для обработки такого большого количества транзакций. Но с основной задачей тестов, а именно продемонстрировать работу Plasma Cash с MongoDB, система справилась хорошо.

आम्ही तुम्हाला भेट देण्यासाठी आमंत्रित करतो GitHub प्रकल्प: https://github.com/opporty-com/Plasma-Cash/tree/new-version

लेख सह-लिहिलेला होता अलेक्झांडर नाशिवन, वरिष्ठ विकासक चतुर समाधान इंक.

Ранее команда разработчиков संधी уже тестировала скорость Plasma Cash. Результаты изложены в हा लेख.

स्त्रोत: www.habr.com

एक टिप्पणी जोडा