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

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

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

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

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

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

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

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

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

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

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

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

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

Според разработчиците, Plasma Cash е ефективно средство за защита от хакерски атаки в Ethereum. Всяка монета 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. Мащабирането на базата данни е лесно. С времето данните се увеличават и размерът на възлите в клъстера може да се увеличава, когато е необходимо.

Публично тестване на решение за конфиденциалност и мащабируемост в 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 — Всички възли съдържат по 300k транзакции и токени от последния блок #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 обработи всички 1kk транзакции, които бяха в пула.
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