Pengujian publik terhadap solusi privasi dan skalabilitas Ethereum pada platform cloud

Tren blockchain terus mendapatkan momentum. Semakin banyak ahli memperkirakan adaptasi universal dari teknologi ini dalam waktu dekat. Saat ini, beberapa masalah yang mencegah hal ini masih belum terselesaikan.

Pertama-tama, sistem blockchain modern tidak berkembang dengan baik. Misalnya, Ethereum hanya memiliki throughput 20 transaksi per detik, dan meskipun memiliki banyak kelebihan, Ethereum tidak cocok untuk bisnis besar.

Pada saat yang sama, Ethereum dihargai karena perlindungannya yang kuat terhadap peretasan dan kegagalan jaringan. Jadi, Anda tidak harus mencoretnya. Lebih masuk akal untuk memperbaiki kekurangan Ethereum dan mengubahnya menjadi kelebihan.

Pengujian publik terhadap solusi privasi dan skalabilitas Ethereum pada platform cloud

Plasma Cash sebagai Solusi Privasi dan Skalabilitas di Ethereum

Plasma adalah teknologi yang diperkenalkan oleh Vitalik Buterin, salah satu pendiri proyek Ethereum, pada konferensi EthCC di Paris pada tahun 2018. Teknologi ini dikembangkan bersama dengan Joseph Poon, salah satu pendiri Lightning Network, dan dianggap sebagai solusi untuk meningkatkan kekuatan komputasi dari blockchain Ethereum. Berita pertama tentang Plasma bocor ke media pada tahun 2017.

Platform ini menyediakan lapisan eksternal kontrak pintar yang dapat berinteraksi dengan blockchain utama, sehingga melepaskan rantai akar, mengurangi biaya transaksi untuk kontrak pintar dan aplikasi terdesentralisasi (DApps).

Informasi rinci tentang perkembangan tersebut disajikan dalam dokumen “Plasma: Kontrak Cerdas Otonom yang Dapat Diskalakan", tanggal Agustus 2017.

Buterin mengakui bahwa Plasma memiliki masalah skalabilitas yang melekat: Setiap pengguna harus mengunduh dan mengautentikasi setiap blok Plasma, yang mencegah penskalaan eksponensial.

Untuk memperbaiki kekurangan ini, Plasma Cash dikembangkan - rantai anak yang terdiri dari kontrak pintar dan jaringan pribadi berdasarkan Node.js, yang secara berkala mentransfer statusnya ke rantai akar (Ethereum). Ini memberikan desentralisasi, keamanan dan skalabilitas dalam blockchain, sehingga memecahkan Trilema Skalabilitas.

Keuntungan penting Plasma Cash dibandingkan Plasma adalah ia menarik perhatian pengguna hanya pada blok yang berisi koin yang mereka minati:

“Pengguna sekarang hanya perlu memeriksa ketersediaan dan validitas rantai Plasma untuk indeks spesifik yang terkait dengan koin yang ingin mereka belanjakan, miliki, dan minati,” kata Buterin.

Menurut pengembangnya, Plasma Cash adalah obat yang efektif untuk peretasan di Ethereum. Setiap koin Plasma memiliki pemiliknya dan unik. Tidak seorang pun dapat mengambil kepemilikan koin pengguna lain tanpa sepengetahuannya. Pemegang koin dapat mencegah potensi penarikan penipuan melalui sistem “keluhan” dengan menyajikan “data bukti” mereka dalam riwayat koin mereka.

Menguji Uang Plasma di Mongo Atlas

Karena kebaruannya, Plasma Cash masih sedikit dipelajari. Pakar Blockchain secara aktif menguji interaksinya dengan berbagai layanan cloud dan database, mengidentifikasi kekurangan dan menemukan cara untuk memperbaikinya. Secara khusus, pengujian di Mongo Atlas mengungkapkan keuntungan berikut saat bekerja dengan Plasma:

  1. Perlindungan yang andal terhadap kehilangan data, karena ada beberapa replika yang disinkronkan satu sama lain di cluster.
  2. оступ, karena cluster dapat dibuat pada tiga platform cloud paling populer: Amazon, Google, Azure. Hasilnya, node Plasma Cash dapat diterapkan di banyak pusat data yang berlokasi dekat Mongo Atlas. Kami telah membuktikan bahwa kecepatannya tidak turun banyak, bahkan jika node Plasma ditempatkan di pusat data yang lebih jauh.
  3. Node plasma, yang digunakan dalam mode read-only, dapat dihubungkan ke satu cluster Mongo dan berlokasi di berbagai belahan dunia, yang meningkatkan skalabilitas geografis (node ​​lebih dekat dengan pengguna).
  4. Menyebarkan node baru itu mudah, karena Anda tidak perlu menyinkronkan ulang semuanya. Anda cukup terhubung ke cluster Mongo yang ada atau dengan cepat membuat salinan dan mengonfigurasi koneksi ke cluster tersebut.
  5. Sangat mudah untuk menskalakan database Anda. Seiring waktu, lebih banyak data tersedia, dan Anda dapat meningkatkan ukuran node di cluster sesuai kebutuhan.

Pengujian publik terhadap solusi privasi dan skalabilitas Ethereum pada platform cloud

Kami menggunakan server berikut untuk melakukan pengujian:

  • 3 server Azure virtual Standar E4s v3 (4 vcpus, memori 32 GiB). Setiap server memiliki 3 node. Salah satunya dapat mengirimkan blok ke rantai akar.
  • Setiap node terhubung ke cluster Mongo Atlas M50 miliknya sendiri yang berisi 3 node dalam mode replika.

Tes 1

3 node masing-masing menerima 100 ribu transaksi. Secara total, kesembilan node berisi 9 ribu transaksi dan token.


Keadaan awal: blok terakhir #213; 0 transaksi dan token disimpan di database.

00:00 — 3 skrip diluncurkan yang masing-masing menghasilkan dan mengirim 100 ribu transaksi
00:29 — Pengiriman 100 ribu transaksi ke node #1 dan #2 telah dimulai
00:32 — Pengiriman 100 ribu transaksi ke node #3 telah dimulai
00:32 — Node #1 mengambil 11703 transaksi dari pool dan membentuk blok #214 (9fb)
00:34 — Node #2 mengambil 27088 transaksi dari pool dan membentuk blok #214 (ef4)
00:34 — Blok #214 (9fb) ditandatangani dan dikirim ke node lain untuk validasi
00:36 — Node #3 mengambil 11900 transaksi dari pool dan membentuk blok #214 (983)
00:37 — Blok #214 (9fb) divalidasi dan dikirim ke rantai akar
00:38 — Blok #214 (983) ditandatangani dan dikirim ke node lain untuk validasi
00:38 — Blok #214 (ef4) ditandatangani dan dikirim ke node lain untuk validasi
00:40 — Blok #214 (983) divalidasi dan dikirim ke rantai akar
00:41 — Semua node menerima informasi dari rantai akar bahwa blok #214 (9fb) telah ditambahkan dan mulai menerapkan 11703 transaksi
00:45 — Semua node menerima informasi dari rantai akar bahwa blok #215 (983) telah ditambahkan dan mulai menerapkan 11900 transaksi
00:51 — Blok #214 (ef4) divalidasi dan dikirim ke rantai akar
00:52 — Node #1 mengambil 51469 transaksi dari pool dan membentuk blok #216 (ea0)
00:56 — Node #3 mengambil 55102 transaksi dari pool dan membentuk blok #216 (f75)
00:58 — Skrip demo telah menyelesaikan pekerjaannya untuk node #2
00:58 — Blok #216 (ea0) ditandatangani dan dikirim ke node lain untuk validasi
00:58 — Semua node menerima informasi dari rantai akar bahwa blok #216 (ef4) telah ditambahkan dan mulai menerapkan 27088 transaksi
01:04 — Blok #216 (f75) ditandatangani dan dikirim ke node lain untuk validasi
01:14 — Node #2 mengambil 72912 transaksi dari pool dan membentuk blok #217 (f85)
01:15 — Skrip demo telah selesai bekerja untuk node #1 dan #2
01:17 — Blok #216 (f75) dan #216 (ea0) divalidasi dan dikirim ke rantai akar
01:21 — Blok #217 (f85) ditandatangani dan dikirim ke node lain untuk validasi
01:26 - Blok #217 (f75) dan #218 (ea0) ditambahkan ke rantai akar dan node mulai menerapkan masing-masing transaksi 51469 dan 55102
01:27 — Blok #217 (a85) divalidasi dan dikirim ke rantai akar
01:41 — Node #1 mengambil 36828 transaksi dari pool dan membentuk blok #219 (46f)
01:41 — Node #3 mengambil 32998 transaksi dari pool dan membentuk blok #219 (bb3)
01:43 — Semua node menerima informasi dari rantai akar bahwa blok #219 (a85) telah ditambahkan dan mulai menerapkan 72912 transaksi
01:46 — Blok #219 (46f) ditandatangani dan dikirim ke node lain untuk validasi
01:46 — Blok #219 (bb3) ditandatangani dan dikirim ke node lain untuk validasi
01:53 — Node #2 memproses semua 100 ribu transaksi yang ada di pool
02:37 — Blok #219 (bb3) divalidasi dan dikirim ke rantai akar
02:41 — Blok#219 (46f) divalidasi dan dikirim ke rantai akar
02:48 — Blok #220 (bb3) dan #221 (46f) ditambahkan ke rantai akar dan node mulai menerapkan masing-masing 32998 dan 36828 transaksi
02:54 — Node #1 memproses semua 100 ribu transaksi yang ada di pool
02:55 — Node #3 memproses semua 100 ribu transaksi yang ada di pool
04:12 — Semua node berisi 300 ribu transaksi dan token, blok terakhir #221

Tes 2

3 node masing-masing menerima 1kk transaksi. Secara total, kesembilan node berisi 9 ribu transaksi dan token.

Keadaan awal: blok terakhir #213; 0 transaksi dan token disimpan di database.

00:00 — 3 skrip diluncurkan yang masing-masing menghasilkan dan mengirim 1kk transaksi
02:29 — Pengiriman 1kk transaksi ke node #1 dan #2 telah dimulai
02:33 — Node #1 mengambil 11668 transaksi dari pool dan membentuk blok #222 (510)
02:35 — Blok #222 (510) ditandatangani dan dikirim ke node lain untuk validasi
02:37 — Blok #222 (510) divalidasi dan dikirim ke rantai akar
02:38 — Node #2 mengambil 46378 transaksi dari pool dan membentuk blok #222 (a9d)
02:38 — Pengiriman 1kk transaksi ke node #3 telah dimulai
02:41 — Node #3 mengambil 5504 transaksi dari pool dan membentuk blok #222 (387)
02:42 — Blok #222 (387) ditandatangani dan dikirim ke node lain untuk validasi
02:44 — Blok #222 (a9d) ditandatangani dan dikirim ke node lain untuk validasi
02:44 — Blok #222 (387) divalidasi dan dikirim ke rantai akar
02:49 — Blok #222 (a9d) divalidasi dan dikirim ke rantai akar
02:56 - Blok #222 (510) #223 (387) dan #224 (a9d) ditambahkan ke rantai akar dan node mulai menerapkan masing-masing transaksi 11668, 5504 dan 46378
03:09 — Node #1 mengambil 177170 transaksi dari pool dan membentuk blok #225 (e50)
03:09 — Node #3 mengambil 119327 transaksi dari pool dan membentuk blok #225 (ccc)
03:10 — Node #2 mengambil 149772 transaksi dari pool dan membentuk blok #225 (404)
03:26 — Blok #225 (ccc) ditandatangani dan dikirim ke node lain untuk validasi
03:32 — Blok #225 (404) ditandatangani dan dikirim ke node lain untuk validasi
03:33 — Blok #225 (e50) ditandatangani dan dikirim ke node lain untuk validasi
03:53 — Blok #225 (ccc) divalidasi dan dikirim ke rantai akar
04:03 — Blok #225 (e50) divalidasi dan dikirim ke rantai akar
04:04 — Blok #225 (404) divalidasi dan dikirim ke rantai akar
04:06 — Semua node menerima informasi dari rantai akar bahwa blok #225 (ccc) telah ditambahkan dan mulai menerapkan 119327 transaksi
04:14 — Semua node menerima informasi dari rantai akar bahwa blok #226 (404) telah ditambahkan dan mulai menerapkan 149772 transaksi
04:16 — Semua node menerima informasi dari rantai akar bahwa blok #227 (e50) telah ditambahkan dan mulai menerapkan 177170 transaksi
04:32 — Node #3 mengambil 209436 transaksi dari pool dan membentuk blok #228 (1e9)
04:40 — Node #2 mengambil 212669 transaksi dari pool dan membentuk blok #228 (e38)
04:40 — Node #1 mengambil 190144 transaksi dari pool dan membentuk blok #228 (861)
05:02 — Blok #228 (1e9) ditandatangani dan dikirim ke node lain untuk validasi
05:08 — Blok #228 (861) ditandatangani dan dikirim ke node lain untuk validasi
05:10 — Blok #228 (e38) ditandatangani dan dikirim ke node lain untuk validasi
06:13 — Blok #228 (1e9) divalidasi dan dikirim ke rantai akar
06:13 — Blok #228 (861) divalidasi dan dikirim ke rantai akar
06:13 — Blok #228 (e38) divalidasi dan dikirim ke rantai akar
06:39 - Blok #228 (861) #229 (1e9) dan #230 (e38) ditambahkan ke rantai akar dan node mulai menerapkan masing-masing transaksi 190144, 209436 dan 212669
07:07 — Node #1 mengambil 199770 transaksi dari pool dan membentuk blok #231 (e04)
07:09 — Node #2 mengambil 190473 transaksi dari pool dan membentuk blok #231 (36e)
07:09 — Node #3 mengambil 178807 transaksi dari pool dan membentuk blok #231 (f43)
07:34 — Blok #231 (e04) ditandatangani dan dikirim ke node lain untuk validasi
07:37 — Blok #231 (36e) ditandatangani dan dikirim ke node lain untuk validasi
07:37 — Blok #231 (f43) ditandatangani dan dikirim ke node lain untuk validasi
08:49 — Blok #231 (e04) divalidasi dan dikirim ke rantai akar
08:51 — Blok #231 (f43) divalidasi dan dikirim ke rantai akar
08:52 — Blok #231 (36e) divalidasi dan dikirim ke rantai akar
09:47 - Blok #231 (e04) #232 (f43) dan #233 (36e) ditambahkan ke rantai akar dan node mulai menerapkan masing-masing transaksi 199770, 178807 dan 190473
10:16 — Node #1 mengambil 153075 transaksi dari pool dan membentuk blok #234 (e04)
10:16 — Node #2 mengambil 168035 transaksi dari pool dan membentuk blok #234 (36e)
10:16 — Node #3 mengambil 166685 transaksi dari pool dan membentuk blok #234 (f43)
10:42 — Blok #234 (56d) ditandatangani dan dikirim ke node lain untuk validasi
11:59 — Blok #234 (1bb) divalidasi dan dikirim ke rantai akar
12:02 — Blok #234 (58a) divalidasi dan dikirim ke rantai akar
12:02 — Blok #234 (56d) divalidasi dan dikirim ke rantai akar
12:48 - Blok #234 (1bb) #235 (58a) dan #236 (56d) ditambahkan ke rantai akar dan node mulai menerapkan transaksi masing-masing 153075, 168035 dan 166685
13:14 — Node #1 mengambil 112226 transaksi dari pool dan membentuk blok #237 (5c0)
13:16 — Node #2 mengambil 87550 transaksi dari pool dan membentuk blok #234 (58a)
13:16 — Node #3 mengambil 99594 transaksi dari pool dan membentuk blok #234 (56d)
13:30 — Blok #237 (5c0) ditandatangani dan dikirim ke node lain untuk validasi
13:32 — Blok #237 (58a) ditandatangani dan dikirim ke node lain untuk validasi
13:34 — Blok #237 (56d) ditandatangani dan dikirim ke node lain untuk validasi
14:47 — Blok #237 (58a) divalidasi dan dikirim ke rantai akar
14:53 — Blok #237 (5c0) tidak divalidasi dalam waktu yang ditentukan
14:53 — Semua node menerima informasi dari rantai akar bahwa blok #237 (58a) telah ditambahkan dan mulai menerapkan 87550 transaksi
14:54 — Blok #237 (56d) divalidasi dan dikirim ke rantai akar
15:02 — Node #1 mengambil 181206 transaksi dari pool dan membentuk blok #238 (c5f)
15:06 — Semua node menerima informasi dari rantai akar bahwa blok #238 (56d) telah ditambahkan dan mulai menerapkan 99594 transaksi
15:12 — Node #2 mengambil 51990 transaksi dari pool dan membentuk blok #239 (ad8)
15:20 — Blok #239 (ad8) ditandatangani dan dikirim ke node lain untuk validasi
15:25 — Node #3 mengambil 46685 transaksi dari pool dan membentuk blok #239 (857)
15:30 — Blok #238 (c5f) ditandatangani dan dikirim ke node lain untuk validasi
15:34 — Blok #239 (857) ditandatangani dan dikirim ke node lain untuk validasi
16:32 — Blok #239 (857) divalidasi dan dikirim ke rantai akar
16:42 — Semua node menerima informasi dari rantai akar bahwa blok #239 (857) telah ditambahkan dan mulai menerapkan 46685 transaksi
16:42 — Blok #238 (c5f) divalidasi dan dikirim ke rantai akar
16:42 — Blok #239 (ad8) tidak divalidasi dalam waktu yang ditentukan
16:54 — Node #2 mengambil 96882 transaksi dari pool dan membentuk blok #240 (e6e)
16:56 — Node #3 mengambil 39704 transaksi dari pool dan membentuk blok #240 (a47)
17:02 — Blok #240 (a47) ditandatangani dan dikirim ke node lain untuk validasi
17:02 — Blok #240 (e6e) ditandatangani dan dikirim ke node lain untuk validasi
17:18 — Semua node menerima informasi dari rantai akar bahwa blok #240 (c5f) telah ditambahkan dan mulai menerapkan 181206 transaksi
17:45 — Blok #240 (a47) divalidasi dan dikirim ke rantai akar
17:47 — Node #1 mengambil 54956 transaksi dari pool dan membentuk blok #241 (170)
17:59 — Blok #241 (170) ditandatangani dan dikirim ke node lain untuk validasi
18:09 — Semua node menerima informasi dari rantai akar bahwa blok #241 (a47) telah ditambahkan dan mulai menerapkan 181206 transaksi
18:20 — Node #3 mengambil 39104 transaksi dari pool dan membentuk blok #242 (955)
18:24 — Blok #240 (e6e) divalidasi dan dikirim ke rantai akar
18:28 — Blok #242 (955) ditandatangani dan dikirim ke node lain untuk validasi
18:09 — Semua node menerima informasi dari rantai akar bahwa blok #242 (e6e) telah ditambahkan dan mulai menerapkan 96882 transaksi
19:06 — Skrip demo telah menyelesaikan pekerjaannya untuk node #1
19:08 — Skrip demo telah menyelesaikan pekerjaannya untuk node #2
19:08 — Node #2 mengambil 48241 transaksi dari pool dan membentuk blok #243 (fde)
19:14 — Blok #243 (fde) ditandatangani dan dikirim ke node lain untuk validasi
19:18 — Blok #241 (170) tidak divalidasi dalam waktu yang ditentukan
19:28 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #243 (37c)
19:35 — Blok #242 (955) divalidasi dan dikirim ke rantai akar
19:40 — Blok #243 (37c) ditandatangani dan dikirim ke node lain untuk validasi
20:05 — Semua node menerima informasi dari rantai akar bahwa blok #243 (955) telah ditambahkan dan mulai menerapkan 39104 transaksi
20:15 — Blok #243 (fde) divalidasi dan dikirim ke rantai akar
20:19 — Node #3 mengambil 42981 transaksi dari pool dan membentuk blok #244 (9b5)
20:26 — Blok #244 (9b5) ditandatangani dan dikirim ke node lain untuk validasi
20:28 - semua node menerima informasi dari rantai akar bahwa blok #244 (fde) telah ditambahkan dan mulai menerapkan 48241 transaksi
20:32 — Node #2 memproses semua 1 transaksi yang ada di pool
21:05 — Blok #243 (37c) tidak divalidasi dalam waktu yang ditentukan
21:15 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #245 (37c)
21:32 — Blok #245 (37c) ditandatangani dan dikirim ke node lain untuk validasi
21:42 — Blok #244 (9b5) divalidasi dan dikirim ke rantai akar
21:50 — Semua node menerima informasi dari rantai akar bahwa blok #245 (9b5) telah ditambahkan dan mulai menerapkan 42981 transaksi
22:04 — Node #3 mengambil 45361 transaksi dari pool dan membentuk blok #246 (3f9)
22:11 — Blok #246 (3f9) ditandatangani dan dikirim ke node lain untuk validasi
22:51 — Blok #245 (37c) tidak divalidasi dalam waktu yang ditentukan
23:01 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #246 (37c)
23:08 — Skrip demo telah menyelesaikan pekerjaannya untuk node #3
23:15 — Blok #246 (37c) ditandatangani dan dikirim ke node lain untuk validasi
23:32 — Blok #246 (3f9) tidak divalidasi dalam waktu yang ditentukan
23:42 — Node #3 mengambil 52173 transaksi dari pool dan membentuk blok #246 (71d)
23:51 — Blok #246 (71d) ditandatangani dan dikirim ke node lain untuk validasi
24:38 — Blok #246 (37c) tidak divalidasi dalam waktu yang ditentukan
25:01 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #246 (37c)
25:06 — Blok #246 (71d) divalidasi dan dikirim ke rantai akar
25:12 — Blok #246 (37c) ditandatangani dan dikirim ke node lain untuk validasi
25:14 — Semua node menerima informasi dari rantai akar bahwa blok #246 (71d) telah ditambahkan dan mulai menerapkan 52173 transaksi
25:29 — Node #3 memproses semua 1 transaksi yang ada di pool
26:40 — Blok #247 (37c) tidak divalidasi dalam waktu yang ditentukan
26:47 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #247 (37c)
27:03 — Blok #247 (37c) ditandatangani dan dikirim ke node lain untuk validasi
28:29 — Blok #247 (37c) tidak divalidasi dalam waktu yang ditentukan
28:35 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #247 (37c)
28:49 — Blok #247 (37c) ditandatangani dan dikirim ke node lain untuk validasi
30:13 — Blok #247 (37c) tidak divalidasi dalam waktu yang ditentukan
30:23 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #247 (37c)
30:38 — Blok #247 (37c) ditandatangani dan dikirim ke node lain untuk validasi
32:00 — Blok #247 (37c) tidak divalidasi dalam waktu yang ditentukan
32:11 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #247 (37c)
32:26 — Blok #247 (37c) ditandatangani dan dikirim ke node lain untuk validasi
33:49 — Blok #247 (37c) tidak divalidasi dalam waktu yang ditentukan
33:59 — Node #1 mengambil 86967 transaksi dari pool dan membentuk blok #247 (37c)
34:12 — Blok #247 (37c) ditandatangani dan dikirim ke node lain untuk validasi
35:34 — Blok #247 (37c) divalidasi dan dikirim ke rantai akar
35:54 — Semua node menerima informasi dari rantai akar bahwa blok #247 (37c) telah ditambahkan dan mulai menerapkan 86967 transaksi
36:11 — Node #1 memproses semua 1 transaksi yang ada di pool
55:12 - node pertama memproses semua 3k transaksi

Pengujian publik terhadap solusi privasi dan skalabilitas Ethereum pada platform cloud

Hasil

Ditemukan bahwa server virtual Azure tidak memiliki kekuatan pemrosesan yang cukup untuk memproses transaksi dalam jumlah besar. Namun sistem dapat mengatasi tugas utama pengujian dengan baik, yaitu mendemonstrasikan pengoperasian Plasma Cash dengan MongoDB.

Kami mengundang Anda untuk berkunjung GitHub proyek: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Artikel ini ditulis bersama oleh Alexander Nashivan, pengembang senior Solusi Cerdas Inc.

Tim pengembangan sebelumnya Opporty Saya sudah menguji kecepatan Plasma Cash. Hasilnya disajikan dalam artikel ini.

Sumber: www.habr.com

Tambah komentar