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

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

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

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

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

Plasma Cash като решение за конфиденциалност и мащабируемост в Етериум

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

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

Подробна информация за разработката беше изложена в документа „Plasma: Scalable Autonomous Smart Contracts“, датирaн август 2017 година.

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

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

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

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

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

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

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

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

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

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

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

Тест 1

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

Тест 2

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кк транзакции

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

Резюме

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

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

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

По-рано екипът на разработчиците Opporty вече тества скоростта на Plasma Cash. Резултатите са изложени в тази статия.

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster