Публично тестване на решение за поверителност и мащабируемост на Ethereum на облачни платформи

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

На първо място, модерните блокчейн системи не се мащабират добре. Например Ethereum има пропускателна способност от само 20 транзакции в секунда и въпреки многото си предимства не е подходящ за големи фирми.

В същото време Ethereum е ценен заради мощната си защита срещу хакване и мрежови повреди. Така че не бива да го отписвате. По-разумно е да коригирате недостатъците на Ethereum и да ги превърнете в предимства.

Публично тестване на решение за поверителност и мащабируемост на Ethereum на облачни платформи

Plasma Cash като решение за поверителност и мащабируемост на Ethereum

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

Тази платформа предоставя външен слой от интелигентни договори, които могат да взаимодействат с основната блокова верига, като по този начин разтоварват основната верига, намалявайки таксите за транзакции за интелигентни договори и децентрализирани приложения (DApps).

Подробна информация за разработката е представена в документа „Плазма: Мащабируеми автономни интелигентни договори“, от август 2017 г.

Бутерин призна, че плазмата има присъщи проблеми с мащабируемостта: всеки потребител трябва да изтегли и удостовери всеки плазмен блок, което предотвратява експоненциалното мащабиране.

За да коригира този недостатък, беше разработена Plasma Cash - дъщерна верига, състояща се от интелигентен договор и частна мрежа, базирана на Node.js, която периодично прехвърля състоянието си към основната верига (Ethereum). Той осигурява децентрализация, сигурност и мащабируемост в блокчейна, като по този начин решава трилемата за мащабируемост.

Важно предимство на Plasma Cash в сравнение с Plasma е, че привлича вниманието на потребителите само към онези блокове, които съдържат монетите, които ги интересуват:

„Потребителите сега трябва само да проверят наличността и валидността на веригата Plasma за конкретния индекс, свързан с монетите, които искат да похарчат, притежават и от които се интересуват“, каза Бутерин.

Според разработчиците Plasma Cash е ефективен лек за хакове в Ethereum. Всяка плазмена монета има собственик и е уникална. Никой не може да завладее монети на друг потребител без негово знание. Притежателят на монета може да предотврати потенциални измамни тегления чрез системата за „жалби“, като представи своите „доказателствени данни“ в историята на своята монета.

Тестване на Plasma Cash в Mongo Atlas

Поради своята новост, Plasma Cash остава малко проучен. Експертите по блокчейн активно тестват взаимодействието му с различни облачни услуги и бази данни, като идентифицират недостатъците и намират начини да ги коригират. По-специално, тестовете в Mongo Atlas разкриха следните предимства при работа с Plasma:

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

Публично тестване на решение за поверителност и мащабируемост на Ethereum на облачни платформи

Използвахме следните сървъри за провеждане на тестове:

  • 3 виртуални Azure сървъра Standard E4s v3 (4 vcpus, 32 GiB памет). Всеки сървър има 3 възела. Един от тях може да изпраща блокове към основната верига.
  • Всеки възел е свързан към собствен клъстер Mongo Atlas M50, съдържащ 3 възела в режим на реплика.

Тест 1

3 възела получават по 100 9 транзакции всеки. Общо всичките 300 възела съдържат XNUMX XNUMX транзакции и токени.


Първоначално състояние: последен блок # 213; 0 транзакции и токени се записват в базата данни.

00:00 — Стартират се 3 скрипта, които генерират и изпращат по 100k транзакции всеки
00:29 — Започна изпращането на 100k транзакции към възли #1 и #2
00:32 — Започна изпращането на 100k транзакции към възел #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 XNUMX транзакции, които бяха в пула
02:37 — Блок #219 (bb3) е валидиран и изпратен до основната верига
02:41 — Блок №219 (46f) е валидиран и изпратен до основната верига
02:48 — Блокове #220 (bb3) и #221 (46f) се добавят към основната верига и възлите започват да прилагат съответно 32998 и 36828 транзакции
02:54 — Възел #1 обработи всички 100 XNUMX транзакции, които бяха в пула
02:55 — Възел #3 обработи всички 100 XNUMX транзакции, които бяха в пула
04:12 — Всички възли съдържат 300k транзакции и токени, последен блок #221

Тест 2

3 възела получават 1kk транзакции всеки. Общо всичките 9 възела съдържат 3k транзакции и токени.

Първоначално състояние: последен блок # 213; 0 транзакции и токени се записват в базата данни.

00:00 — Стартират се 3 скрипта, които генерират и изпращат по 1kk транзакции всеки
02:29 — Започна изпращането на 1kk транзакции към възли #1 и #2
02:33 — Възел #1 взе 11668 транзакции от пула и формира блок #222 (510)
02:35 — Блок #222 (510) е подписан и изпратен до други възли за валидиране
02:37 — Блок #222 (510) е валидиран и изпратен до основната верига
02:38 — Възел #2 взе 46378 транзакции от пула и формира блок #222 (a9d)
02:38 — Започна изпращането на 1kk транзакции към възел #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 транзакции от пула и формира блок #47 (aXNUMX)
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 обработи всички 1k транзакции, които бяха в пула
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 обработи всички 1k транзакции, които бяха в пула
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 обработи всички 1k транзакции, които бяха в пула
55:12 - първият възел обработи всички 3k транзакции

Публично тестване на решение за поверителност и мащабируемост на Ethereum на облачни платформи

Резултати от

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

Каним ви да посетите GitHub проект: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Статията е написана в съавторство от Александър Нашиван, старши разработчик Clever Solution Inc.

Предишен екип за разработка Възможност Вече тествах скоростта на Plasma Cash. Резултатите са представени в тази статия.

Източник: www.habr.com

Добавяне на нов коментар