Lộ trình MultiChain 1.0 beta 2 và 2.0

Nút nguồn: 1742567

Chúng ta đang ở đâu hôm nay và chúng ta sẽ đi đâu vào ngày mai

Hôm nay, chúng tôi rất vui mừng phát hành bản beta thứ hai của MultiChain 1.0 cho Linux, Windows và Mac (hiện tại, phiên bản Mac yêu cầu biên dịch). Điều này kết thúc sự phát triển theo kế hoạch của MultiChain 1.0 - ngoại trừ mọi bản sửa lỗi, bản phát hành cuối cùng của MultiChain 1.0 trong mùa hè sẽ không thay đổi.

Tháng này cũng đánh dấu hai năm kể từ khi phát hành bản alpha đầu tiên của MultiChain vào tháng 2015 năm XNUMX. Như với bất kỳ sản phẩm mới nào, chúng tôi không chắc thị trường sẽ phản ứng như thế nào và biết rằng chỉ có một cách để tìm hiểu - phát hành một sản phẩm khả thi tối thiểu, có nghĩa là phiên bản ban đầu cung cấp giá trị đáng kể nhưng là sơ bộ theo thiết kế. Rất may, không giống như sản phẩm đầu tiên của chúng tôi đồng xuSpark, MultiChain đã nhận được phản hồi tích cực mạnh mẽ và ngay lập tức. Điều này đi kèm với một cơn sóng thần về các yêu cầu tính năng hợp lý, nhiều yêu cầu trong số đó hiện chúng tôi đã triển khai. Song song với sự phát triển của sản phẩm, lượng sử dụng cũng tăng lên rõ rệt theo từng thước đo. Ví dụ: trang web MultiChain đã nhận được dưới 3,000 người truy cập vào tháng 2015 năm XNUMX và hiện mang lại gấp mười lần con số đó hàng tháng.

Hiệu suất MultiChain

Trong hai năm qua, chúng tôi đã đầu tư rất nhiều nỗ lực vào việc tối ưu hóa MultiChain, được tách ra từ Bitcoin Core, việc triển khai tham chiếu cho mạng bitcoin công cộng. Dưới đây là so sánh thông lượng giao dịch cho thiết lập một nút bằng cách sử dụng năm phiên bản của sản phẩm:

.throughput td, .throughput th {text-align: right;}
Tổng số giao dịch 1.0 alpha3 1.0 alpha21 1.0 alpha22 1.0 beta 1 1.0 beta 2
100 6.5 tps 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

Các giao dịch trung bình mỗi giây, bao gồm chi phí API và xây dựng, ký kết, khai thác và xác minh các giao dịch và khối.
Các thử nghiệm được thực hiện bằng cách sử dụng ab Công cụ đo điểm chuẩn của máy chủ HTTP gửi hai yêu cầu đồng thời đến sendtoaddress API.
Thông số kỹ thuật máy chủ: Intel Core i7-4770, 4 lõi @ 3.4 MHz, RAM 32 GB, Seagate 2 TB 7200 RPM SATA, CentOS 6.4.

Đương nhiên, bước nhảy vọt lớn nhất đến ở alpha 22 khi chúng tôi chuyển tiếp sang ví hướng cơ sở dữ liệu. Nhưng kể từ bản phát hành đó, chúng tôi đã tăng gần gấp đôi tốc độ của MultiChain một lần nữa. Chúng tôi hy vọng chúng tôi đã chứng minh rằng giới hạn 4 giao dịch mỗi giây của bitcoin là do các thông số mạng cụ thể của nó và không liên quan đến các blockchain nói chung.

Tất nhiên, tối ưu hóa hiệu suất là một nhiệm vụ không bao giờ kết thúc và không có lý do gì khiến MultiChain không thể đạt 10,000 tx / giây trên Bộ xử lý 16 nhân với những thay đổi kiến ​​trúc phù hợp. Tuy nhiên, dựa trên các cuộc trò chuyện với người dùng và đối tác của chúng tôi, có vẻ như ít người mong đợi sẽ cần hơn 1,000 tx / giây trong vài năm tới. Vì vậy, chúng tôi đang tập trung lại nỗ lực phát triển của mình vào các tính năng mới, mang chúng tôi độc đáo về chủ đề của MultiChain 2.0.

Tổng quan về MultiChain 2.0

Phiên bản 2.0 của MultiChain sẽ là phiên bản đầu tiên có hai phiên bản - Cộng đồng (mã nguồn mở) và Doanh nghiệp (thương mại). Ở đây, tôi sẽ tập trung vào phiên bản Community miễn phí, vì chúng tôi chỉ thảo luận các chi tiết về MultiChain Enterprise với các đối tác của chúng tôi. Trong bất kỳ trường hợp nào, phiên bản Community và Enterprise sẽ có tính tương thích cao, trong đó: (a) các ứng dụng được xây dựng trên phiên bản Community sẽ chạy mà không cần sửa đổi trên MultiChain Enterprise và (b) cả hai phiên bản sẽ có thể kết nối và giao dịch với nhau trên cùng một chuỗi.

Ba lĩnh vực chính của chức năng nâng cao trong cả hai phiên bản của MultiChain 2.0 sẽ là:

  • Mô hình dữ liệu phong phú hơn cho các luồng, bao gồm cả tài liệu JSON.
  • Bộ lọc giao dịch có thể lập trình tùy chỉnh để xác thực trên chuỗi.
  • Cập nhật liền mạch các giao thức và thông số của blockchain.

Hãy chuyển sang thảo luận chi tiết từng vấn đề này.

Mô hình dữ liệu phong phú hơn cho các luồng

Các luồng MultiChain đã được giới thiệu vào tháng 2016 năm XNUMX và đã được chứng minh là cực kỳ phổ biến. Như được mô tả trong bài đăng này, các luồng cung cấp một sự trừu tượng đơn giản và tự nhiên để lưu trữ, lập chỉ mục và truy xuất dữ liệu mục đích chung trên một blockchain. Một blockchain MultiChain có thể chứa bất kỳ số lượng luồng được đặt tên nào, mỗi luồng có thể được mở cho tất cả để ghi hoặc chỉ có thể ghi từ một số địa chỉ nhất định.

Trong MultiChain 1.0, mỗi mục luồng có một hoặc nhiều nhà xuất bản (người ký tên), khóa tùy chọn, trọng tải dữ liệu nhị phân có kích thước lên đến 64 MB và dấu thời gian (bắt nguồn từ khối mà nó được nhúng). Mỗi nút có thể tự do quyết định luồng nào sẽ đăng ký hoặc có thể đăng ký tự động tất cả các luồng. Nếu một nút được đăng ký vào một luồng, nó sẽ lập chỉ mục nội dung của luồng đó theo thời gian thực, cho phép truy xuất hiệu quả theo nhà xuất bản, khóa, khối, dấu thời gian hoặc vị trí.

MultiChain 2.0 sẽ làm phong phú thêm chức năng luồng này theo một số cách:

  • Các mặt hàng JSON. Cũng như dữ liệu nhị phân, các mục luồng sẽ hỗ trợ các đối tượng JSON có cấu trúc, được lưu trữ trên chuỗi khối ở định dạng tuần tự hóa hiệu quả như UBJSON. Vì API MultiChain đã sử dụng JSON xuyên suốt nên các đối tượng JSON này sẽ có thể ghi và đọc được theo cách tự nhiên và rõ ràng.
  • Nhiều phím. Các mục luồng sẽ hỗ trợ nhiều khóa, cho phép lập chỉ mục một phần dữ liệu theo nhiều cách để truy xuất bằng cách sử dụng liststreamkeyitems. Chúng tôi liên tục đánh giá bao nhiêu chức năng cơ sở dữ liệu để bao gồm trong MultiChain và không mong đợi hỗ trợ lập chỉ mục các phần tử con trong các mục luồng JSON trong phiên bản 2.0. Cho phép nhiều khóa cho mỗi mục luồng cung cấp một giải pháp hợp lý.
  • Nguyên tử ghi nhiều mục. MultiChain 1.0 cho phép một giao dịch duy nhất ghi vào nhiều luồng, nhưng không ghi nhiều mục vào cùng một luồng. MultiChain 2.0 sẽ loại bỏ hạn chế này.
  • Hợp nhất JSON. Bất kỳ danh sách có thứ tự nào của các đối tượng JSON đều có thể được làm phẳng hoặc tóm tắt một cách tự nhiên để tạo một đối tượng “hợp nhất”. Đối tượng hợp nhất chứa tất cả các khóa xuất hiện trong các đối tượng riêng lẻ, trong đó giá trị tương ứng với mỗi khóa được lấy từ đối tượng cuối cùng mà khóa đó xuất hiện. Nếu bạn muốn, đối tượng hợp nhất là trạng thái cuối cùng của hàng cơ sở dữ liệu, có các cột được xác định bởi đối tượng đầu tiên và được mở rộng hoặc cập nhật bởi các đối tượng sau đó. MultiChain 2.0 sẽ thêm các API để dễ dàng và nhanh chóng truy xuất đối tượng đã hợp nhất cho các mục JSON trong luồng có khóa hoặc nhà xuất bản cụ thể.

Các tính năng này bắt nguồn từ những cách phổ biến mà các nhà phát triển hiện đang sử dụng luồng. Nói cách khác, chúng tôi đang quan sát những gì nhiều người đang xây dựng trên MultiChain ở cấp ứng dụng và đưa chức năng đó vào chính MultiChain - một mô hình mà chúng tôi dự định sẽ tiếp tục áp dụng. Giờ đây, các mục luồng sẽ bao gồm thông tin loại, chúng có thể dễ dàng được mở rộng trong tương lai để hỗ trợ các định dạng dữ liệu khác như XML, HDF5Kịch câm-nội dung được xác định. Chưa kể đến khả năng nén và mã hóa trên chuỗi minh bạch.

MultiChain 2.0 cũng sẽ hỗ trợ các đối tượng JSON cho siêu dữ liệu giao dịch thô (tức là không phải mục luồng) cũng như siêu dữ liệu cho các sự kiện phát hành nội dung và tạo luồng, thay vì các cặp khóa / giá trị chỉ văn bản được triển khai trong MultiChain 1.0. Các listassets API sẽ cung cấp việc hợp nhất JSON trên tất cả các sự kiện phát hành của nội dung để siêu dữ liệu của mỗi đợt phát hành có thể cập nhật hiệu quả mô tả cuối cùng của nội dung.

Bộ lọc giao dịch tùy chỉnh

Chúng tôi đã suy nghĩ rất nhiều về cách thêm các quy tắc có thể lập trình tùy chỉnh vào MultiChain. Mặc dù mô hình “hợp đồng thông minh” của Ethereum là phổ biến, nhưng nó có một số thiếu sót chính đối với các blockchain được phép có thông lượng cao. Đầu tiên, các hợp đồng thông minh giới thiệu sự phụ thuộc toàn cầu trên toàn bộ trạng thái của blockchain, điều này làm suy yếu đáng kể tính đồng thời và hiệu suất. Thứ hai, các hợp đồng thông minh không thể ngăn các giao dịch không chính xác được nhúng vào trong một blockchain, mà chỉ ngăn các giao dịch đó cập nhật trạng thái của cơ sở dữ liệu blockchain. Mặc dù về lâu dài, chúng tôi mong đợi một máy ảo tương thích với Ethereum sẽ được cung cấp dưới dạng trừu tượng cấp cao trong MultiChain, nhưng chúng tôi không nghĩ đó là giải pháp phù hợp cho việc xác thực cấp thấp.

MultiChain 2.0 sẽ giới thiệu một mô hình khác được gọi là bộ lọc giao dịch, xác thực các giao dịch riêng lẻ mà không cần tham chiếu đến bất kỳ trạng thái toàn cầu nào. Chúng tôi mong đợi các bộ lọc được viết bằng Javascript và được thực thi trong một công cụ thời gian chạy được nhúng chẳng hạn như v8, được sử dụng trong cơ rôm trình duyệt và Node.js nền tảng. Tất nhiên, chúng tôi sẽ cần đảm bảo rằng mã bộ lọc chạy giống nhau trên mọi nút trong chuỗi khối, chặn bất kỳ nguồn của thuyết phi quyết định chẳng hạn như đọc thời gian, sử dụng số ngẫu nhiên, truy cập mạng hoặc đĩa hoặc thực hiện các phép toán phụ thuộc vào kiến ​​trúc của máy chủ lưu trữ. Tạo một môi trường thời gian chạy Javascript xác định là một thách thức, nhưng (không bỏ quá nhiều) chúng tôi tin rằng nó sẽ hữu ích cho một số tính năng MultiChain khác trong tương lai.

Bộ lọc sẽ được chuyển qua một đối tượng JSON mô tả một giao dịch riêng lẻ, có cấu trúc giống như đầu ra của decoderawtransaction nhưng với các trường phụ. Ví dụ: mỗi đầu vào giao dịch trong JSON sẽ bao gồm một cấu trúc mô tả đầu ra giao dịch trước đó mà nó sử dụng và mỗi địa chỉ sẽ được kèm theo một danh sách các quyền hiện do địa chỉ đó nắm giữ. Công việc của bộ lọc là trả về giá trị Boolean cho biết liệu giao dịch có được chấp nhận hay không và nếu không, hãy cung cấp lỗi văn bản giải thích tại sao. API của MultiChain sẽ bao gồm các lệnh để tạo bộ lọc, kiểm tra chúng trên các giao dịch trước đó hoặc mới và kích hoạt chúng theo sự đồng thuận của quản trị viên.

Không giống như các hợp đồng thông minh, nếu một lỗi được phát hiện trong mã của bộ lọc, nó có thể dễ dàng được thay thế bằng một phiên bản mới. Tuy nhiên, giống như tất cả mã Turing-complete, các bộ lọc vẫn có nguy cơ đi vào một vòng lặp vô hạn. Vấn đề này sẽ được giảm thiểu theo hai cách:

  • Các bộ lọc chỉ có thể được cài đặt và kích hoạt bởi các quản trị viên của chuỗi, tùy thuộc vào sự đồng thuận. Điều này mang lại cho mỗi quản trị viên cơ hội kiểm tra sâu mã của bộ lọc trước khi bỏ phiếu cho nó được kích hoạt.
  • Tất cả các nút hoạt động tốt sẽ xác thực các giao dịch mới bằng cách sử dụng các bộ lọc đang hoạt động trước khi chuyển tiếp chúng đến các nút ngang hàng của chúng. Do đó, nếu một giao dịch gửi một bộ lọc vào một vòng lặp vô hạn, thì giao dịch sẽ không lan truyền ra ngoài nút đã tạo ra nó.

Chúng tôi mong đợi một ứng dụng phổ biến cho các bộ lọc để xác thực các mục luồng. Ví dụ: một bộ lọc có thể đảm bảo rằng các trường nhất định trong các mục JSON của luồng chứa các số trong một phạm vi cụ thể. Trong MultiChain 1.0, loại xác thực này phải được thực hiện ở cấp ứng dụng, khi ghi các mục luồng (nếu nguồn đáng tin cậy) hoặc khi đọc chúng. Ngược lại, MultiChain 2.0 sẽ cho phép các quy tắc này được nhúng vào chính blockchain, giống như kiểm tra các ràng buộc trong một cơ sở dữ liệu quan hệ.

MultiChain 2.0 sẽ bao gồm hai tính năng bổ sung để làm cho các bộ lọc mạnh mẽ hơn. Đầu tiên, nó sẽ giới thiệu các quyền do người dùng xác định, tồn tại cùng với tám quyền được xác định bởi MultiChain. Giống như các quyền thông thường, các quyền này sẽ được quản trị viên cấp cho các địa chỉ cụ thể (và trong một số trường hợp, bởi những người dùng có activate đặc quyền) và được bao gồm cùng với các địa chỉ trong đối tượng JSON được chuyển tới một bộ lọc. Ví dụ: một bộ lọc có thể đảm bảo rằng chỉ những địa chỉ có quyền do người dùng xác định cụ thể mới có thể ghi một số loại dữ liệu nhất định vào luồng hoặc giao dịch trong một nội dung cụ thể trên một ngưỡng nhất định.

Thứ hai, MultiChain 2.0 sẽ hỗ trợ siêu dữ liệu tùy chỉnh (nhị phân hoặc JSON) trong các đầu ra giao dịch thông thường. Điều này sẽ cho phép bất kỳ đầu ra nào hoạt động như một hàng cơ sở dữ liệu chung, được địa chỉ bên trong “sở hữu”. Bộ lọc sẽ thấy bất kỳ siêu dữ liệu nào trong kết quả đầu ra được chi tiêu và tạo của giao dịch như một phần của mô tả JSON của nó. Do đó, MultiChain sẽ trở thành một công cụ cơ sở dữ liệu được chia sẻ chung, nơi tính hợp lệ của một giao dịch được xác định bởi một chức năng có thể tùy chỉnh của các hàng mà nó tạo và xóa. (Nếu điều này nghe có vẻ hơi trừu tượng, chúng tôi chắc chắn sẽ cung cấp một số ví dụ cụ thể.)

Cập nhật chuỗi khối

Vì các blockchains được thiết kế để chạy trong nhiều năm, nên các đặc điểm của chúng có thể cần phải thay đổi theo thời gian. Phiên bản hiện tại của MultiChain đã cung cấp một mức độ linh hoạt hợp lý, cho phép thay đổi quyền (bao gồm cả quản trị viên và người khai thác theo sự đồng thuận), các tài sản và luồng mới được tạo và các nút được thêm vào hoặc xóa khỏi mạng một cách liền mạch. Tuy nhiên, trong MultiChain 1.0, một blockchain cơ bản thông số, chẳng hạn như kích thước khối tối đa và thời gian xác nhận mục tiêu, được cố định khi chuỗi được tạo và không thể thay đổi sau đó.

MultiChain 2.0 sẽ thêm khả năng cập nhật chuỗi khối, cho phép nhiều (nhưng không phải tất cả) các tham số của nó được sửa đổi trong khi chuỗi tiếp tục chạy. Giống như các hoạt động quan trọng khác, việc cập nhật một blockchain sẽ yêu cầu mức độ đồng thuận của quản trị viên có thể tùy chỉnh, trong đó mức này chính là một tham số có thể thay đổi. Cập nhật sẽ có hiệu lực từ một khối nhất định và sau đó sẽ áp dụng cho mọi khối tiếp theo cho đến bản cập nhật tiếp theo.

Các thông số chuỗi khối có thể được cập nhật sẽ bao gồm:

  • Phiên bản giao thức. Điều này sẽ cho phép một blockchain được tạo với một phiên bản MultiChain được nâng cấp để hỗ trợ các tính năng trong phiên bản mới, chẳng hạn như các mục luồng JSON hoặc bộ lọc giao dịch. Thật vậy, phiên bản giao thức 10008 được giới thiệu trong MultiChain 1.0 alpha 29 (và được sử dụng trong bản beta) đã được kiểm chứng trong tương lai với hỗ trợ không có giấy tờ cho loại nâng cấp này. Khi blockchain MultiChain 1.0 được nâng cấp lên giao thức 2.0, nó cũng sẽ có quyền truy cập vào các thay đổi tham số khác được mô tả ở đây.
  • Mở rộng quy mô chuỗi khối. Các blockchains trở nên phổ biến có thể phát triển nhanh hơn các giá trị ban đầu được đặt cho thời gian xác nhận mục tiêu hoặc kích thước giao dịch và khối tối đa của chúng. MultiChain 2.0 sẽ cho phép tăng hoặc giảm các giá trị này khi cần thiết.
  • Mô hình cấp phép. MultiChain 2.0 sẽ cho phép cập nhật nhiều thông số liên quan đến cấp phép và quản trị, bao gồm: (a) anyone-can-* các tham số kiểm soát cách thức mà một chuỗi khối mở hoặc đóng, (b) admin-consensus-* các tham số xác định mức độ đồng thuận của quản trị viên cần thiết cho các hoạt động nhất định và (c) mining-diversity tham số kiểm soát mức độ nghiêm ngặt của thuật toán đồng thuận vòng tròn.

Khi chức năng cập nhật này được triển khai, không có lý do gì khiến một chuỗi khối được tạo trong MultiChain không thể chạy trong nhiều thập kỷ trở lên.

Nhìn về phía trước

Chúng tôi đã bắt đầu làm việc trên MultiChain 2.0 và mong muốn phân phối theo lộ trình này. Không nghi ngờ gì nữa, các cải tiến khác cũng sẽ được bao gồm. Như với MultiChain 1.0, chúng tôi sẽ có các bản phát hành alpha trong quá trình phát triển để các nhà phát triển có thể sử dụng và tìm hiểu các tính năng mới khi chúng được triển khai (và tất nhiên, báo cáo mọi vấn đề hoặc thiếu sót). Đương nhiên, chúng tôi sẽ tiếp tục duy trì phiên bản 1.0 trong suốt thời gian này, sửa bất kỳ lỗi nào xuất hiện.

Tôi muốn kết thúc bằng cách cảm ơn nhóm phát triển của chúng tôi, do Tiến sĩ Michael Rozantsev dẫn đầu, vì họ đã tiếp tục làm việc xuất sắc và chăm chỉ. Chúng tôi coi MultiChain là một dự án kỹ thuật phần mềm thẳng tiến, trong đó chất lượng mã và thử nghiệm được coi trọng hơn tất cả. Tôi có vinh dự được làm việc với những người có thể biến tầm nhìn sản phẩm phức tạp thành phần mềm hoạt động ổn định với hiệu quả và tốc độ đáng kể như vậy.

Xin vui lòng gửi bất kỳ ý kiến trên LinkedIn.

Dấu thời gian:

Thêm từ Đa sắc