Giới thiệu luồng MultiChain

Nút nguồn: 1213525

Đối với cơ sở dữ liệu chuỗi thời gian và khóa-giá trị bất biến được chia sẻ

Hôm nay, chúng tôi tự hào phát hành phiên bản mới nhất của MultiChain, phiên bản này triển khai một bộ chức năng quan trọng mới được gọi là “luồng”. Các luồng cung cấp sự trừu tượng tự nhiên cho các trường hợp sử dụng blockchain tập trung vào truy xuất dữ liệu chung, đánh dấu thời gian và lưu trữ, thay vì chuyển giao tài sản giữa những người tham gia. Các luồng có thể được sử dụng để triển khai ba loại cơ sở dữ liệu khác nhau trên một chuỗi:

  1. Cơ sở dữ liệu khóa-giá trị hoặc kho lưu trữ tài liệu, theo kiểu NoSQL.
  2. Cơ sở dữ liệu chuỗi thời gian, tập trung vào thứ tự các mục nhập.
  3. Cơ sở dữ liệu theo hướng nhận dạng nơi các mục nhập được phân loại theo tác giả của chúng.

Đây có thể được coi là 'cái gì', 'khi nào' và 'ai' của một cơ sở dữ liệu được chia sẻ.

Thông tin cơ bản về luồng

Bất kỳ số lượng luồng nào cũng có thể được tạo trong một chuỗi khối MultiChain và mỗi luồng hoạt động như một tập hợp các mục chỉ phụ thêm độc lập. Mỗi mục trong một luồng có các đặc điểm sau:

  • Một hoặc nhiều nhà xuất bản người đã ký kỹ thuật số vào mục đó.
  • Một tùy chọn chính để tiện cho việc truy xuất sau này.
  • Một số dữ liệu, có thể bao gồm từ một đoạn văn bản nhỏ đến nhiều megabyte nhị phân thô.
  • A dấu thời gian, được lấy từ tiêu đề của khối trong đó mục được xác nhận.

Đằng sau hậu trường, mỗi mục trong một luồng được đại diện bởi một giao dịch blockchain, nhưng các nhà phát triển có thể đọc và ghi các luồng mà không nhận thức được cơ chế cơ bản này. (Người dùng cao cấp hơn có thể sử dụng giao dịch thô để ghi vào nhiều luồng, phát hành hoặc chuyển giao nội dung và / hoặc chỉ định quyền trong một giao dịch nguyên tử.)

Luồng tích hợp với hệ thống quyền của MultiChain theo một số cách. Đầu tiên, chỉ những người có quyền mới có thể tạo luồng, theo cách tương tự như nội dung chỉ có thể được cấp bởi một số địa chỉ nhất định. Khi một luồng được tạo, luồng đó đang mở hoặc đang đóng. Các luồng mở có thể được ghi bởi bất kỳ ai có quyền gửi giao dịch blockchain, trong khi các luồng đóng bị hạn chế trong danh sách có thể thay đổi các địa chỉ được phép. Trong trường hợp sau, mỗi luồng có một hoặc nhiều quản trị viên có thể thay đổi các quyền ghi đó theo thời gian.

Mỗi blockchain có một luồng 'gốc' tùy chọn, được định nghĩa trong thông số và tồn tại từ thời điểm chuỗi được tạo. Điều này cho phép một blockchain được sử dụng ngay lập tức để lưu trữ và truy xuất dữ liệu mà không cần đợi một luồng được tạo rõ ràng.

Như tôi đã đã thảo luận trước đây, tính bảo mật là thách thức lớn nhất trong một số lượng lớn các trường hợp sử dụng blockchain. Điều này là do mỗi nút trong chuỗi khối đều nhìn thấy bản sao đầy đủ của toàn bộ nội dung của chuỗi. Luồng cung cấp một cách tự nhiên để hỗ trợ dữ liệu được mã hóa trên chuỗi khối, như sau:

  1. Một luồng được những người tham gia sử dụng để phân phối khóa công khai của họ cho bất kỳ chương trình mật mã khóa công khai nào.
  2. Luồng thứ hai được sử dụng để xuất bản dữ liệu, trong đó mỗi phần dữ liệu được mã hóa bằng mật mã đối xứng với một khóa duy nhất.
  3. Luồng thứ ba cung cấp quyền truy cập dữ liệu. Đối với mỗi người tham gia sẽ thấy một phần dữ liệu, một mục nhập luồng được tạo trong đó chứa khóa bí mật của dữ liệu đó, được mã hóa bằng khóa công khai của người tham gia đó.

Điều này cung cấp một cách hiệu quả để lưu trữ dữ liệu trên blockchain, đồng thời làm cho nó chỉ hiển thị cho một số người tham gia nhất định.

Truy xuất từ ​​các luồng

Giá trị cốt lõi của luồng là lập chỉ mục và truy xuất. Mỗi nút có thể chọn luồng để đăng ký, với blockchain đảm bảo rằng tất cả các nút đăng ký một luồng cụ thể sẽ thấy các mục giống nhau bên trong. (Một nút cũng có thể được định cấu hình để tự động đăng ký mọi luồng mới được tạo.)

Nếu một nút được đăng ký vào một luồng, thông tin có thể được truy xuất từ ​​luồng đó theo một số cách:

  • Lấy các mục từ luồng theo thứ tự.
  • Truy xuất các mục bằng một phím cụ thể.
  • Truy xuất các mục được ký bởi một nhà xuất bản cụ thể.
  • Liệt kê các khóa được sử dụng trong một luồng, với số lượng mục cho mỗi khóa.
  • Liệt kê các nhà xuất bản trong một luồng, với số lượng mục.

Như đã đề cập ở phần đầu, các phương pháp truy xuất này cho phép các luồng được sử dụng để cơ sở dữ liệu khóa-giá trị, cơ sở dữ liệu chuỗi thời gian và cơ sở dữ liệu theo hướng nhận dạng. Tất cả các API truy xuất đều cung cấp Bắt đầutính tham số, cho phép các phần con của danh sách dài được truy xuất một cách hiệu quả (như mệnh đề LIMIT trong SQL). Giá trị âm cho Bắt đầu cho phép các mục gần đây nhất được truy xuất.

Các luồng có thể chứa nhiều mục với cùng một khóa và điều này giải quyết một cách tự nhiên sự căng thẳng giữa tính bất biến của blockchain và nhu cầu cập nhật cơ sở dữ liệu. Mỗi 'mục nhập' cơ sở dữ liệu hiệu quả phải được gán một khóa duy nhất trong ứng dụng của bạn, với mỗi bản cập nhật cho mục nhập đó được thể hiện bằng một mục luồng mới với khóa của nó. Sau đó, các API truy xuất luồng của MultiChain có thể được sử dụng để: (a) truy xuất phiên bản đầu tiên hoặc cuối cùng của một mục nhập nhất định, (b) truy xuất lịch sử phiên bản đầy đủ cho một mục nhập, (c) truy xuất thông tin về nhiều mục nhập, bao gồm cả mục đầu tiên và cuối cùng phiên bản của mỗi.

Lưu ý rằng do kiến ​​trúc ngang hàng của blockchain, các mục trong luồng có thể đến các nút khác nhau theo các thứ tự khác nhau và MultiChain cho phép các mục được truy xuất trước khi chúng được 'xác nhận' trong một khối. Do đó, tất cả các API truy xuất cung cấp sự lựa chọn giữa thứ tự toàn cầu (mặc định) hoặc cục bộ. Thứ tự toàn cầu đảm bảo rằng, khi chuỗi đã đạt được sự đồng thuận, tất cả các nút đều nhận được phản hồi giống nhau từ các lệnh gọi API giống nhau. Đặt hàng cục bộ đảm bảo rằng, đối với bất kỳ nút cụ thể nào, thứ tự các mục của luồng sẽ không bao giờ thay đổi giữa các lệnh gọi API. Mỗi ứng dụng có thể đưa ra lựa chọn thích hợp cho nhu cầu của mình.

Luồng và lộ trình MultiChain

Với việc phát hành luồng, chúng tôi đã hoàn thành công việc chính cuối cùng cho MultiChain 1.0 và hiện đang vững chắc trên con đường chuyển sang phiên bản beta. Chúng tôi dự kiến ​​sẽ dành vài tháng tới để mở rộng bộ thử nghiệm nội bộ của mình (đã khá lớn!), Hoàn thiện các cổng Windows và Mac, thêm một số API hữu ích hơn, cập nhật Gói Thử Nghiệm cho luồng, điều chỉnh các khía cạnh của cơ chế đồng thuận, phát hành bản trình diễn web của chúng tôi và nói chung là thu dọn mã và thông báo trợ giúp. Quan trọng nhất, chúng tôi sẽ tiếp tục sửa bất kỳ lỗi nào ngay sau khi chúng được phát hiện, để những lỗi của chúng tôi không làm gián đoạn công việc của bạn.

Về lâu dài, các luồng phù hợp với lộ trình MultiChain ở đâu? Lùi lại một bước, MultiChain hiện cung cấp ba lĩnh vực chức năng cấp cao:

  • Quyền để kiểm soát ai có thể kết nối, giao dịch, tạo nội dung / luồng, khai thác / xác thực và quản lý.
  • Tài sản bao gồm phát hành, cấp lại, chuyển nhượng, trao đổi nguyên tử, ký quỹ và tiêu hủy.
  • Dòng với các API để tạo luồng, viết, đăng ký, lập chỉ mục và truy xuất.

Sau khi phát hành MultiChain 1.0 (và phiên bản cao cấp), điều gì tiếp theo trong danh sách này? Nếu bạn nhìn vào Lệnh API được sử dụng để tạo luồng, bạn sẽ nhận thấy một thông số dường như thừa, với giá trị cố định là stream. Tham số này sẽ cho phép MultiChain hỗ trợ các loại thực thể cấp cao khác trong tương lai.

Các giá trị có thể có trong tương lai cho tham số bao gồm evm (cho một Ethereum-máy ảo tương thích), sql (đối với cơ sở dữ liệu kiểu SQL) hoặc thậm chí wiki (đối với văn bản được biên tập cộng tác). Bất kỳ thực thể được chia sẻ nào có trạng thái được xác định bởi một loạt các thay đổi theo thứ tự đều là một ứng cử viên tiềm năng. Mỗi thực thể như vậy sẽ cần: (a) API cung cấp tính trừu tượng phù hợp để cập nhật trạng thái của nó, (b) cơ chế thích hợp cho các nút đã đăng ký để theo dõi trạng thái đó và (c) API để truy xuất một phần hoặc toàn bộ trạng thái một cách hiệu quả. Chúng tôi đang chờ tìm hiểu xem thực thể cấp cao nào khác sẽ hữu ích nhất, được chúng tôi hoặc bên thứ ba triển khai thông qua kiến ​​trúc trình cắm thêm.

Điều gì về hợp đồng thông minh?

Theo nghĩa chung, MultiChain có cách tiếp cận trong đó dữ liệu được nhúng bất biến trong một chuỗi khối, nhưng để diễn giải dữ liệu đó nằm trong nút hoặc lớp ứng dụng. Điều này cố tình khác với mô hình “hợp đồng thông minh”, như được ví dụ bởi Ethereum, trong đó mã được nhúng trong blockchain và chạy trong một máy ảo. Về lý thuyết, vì hợp đồng thông minh Turing hoàn thành, chúng có thể tái tạo hành vi của MultiChain hoặc bất kỳ nền tảng blockchain nào khác. Tuy nhiên, trên thực tế, các hợp đồng thông minh kiểu Ethereum có nhiều thiếu sót đau đớn:

  • Mỗi nút phải thực hiện mọi phép tính, cho dù nó có quan tâm hay không. Ngược lại, trong MultiChain, mỗi nút quyết định luồng nào sẽ đăng ký và có thể bỏ qua dữ liệu được chứa bởi những người khác.
  • Máy ảo được sử dụng cho các hợp đồng thông minh có hiệu suất kém hơn đáng kể so với mã đã được biên dịch nguyên bản cho một kiến ​​trúc máy tính nhất định.
  • Mã hợp đồng thông minh được nhúng liên tục vào một chuỗi, ngăn các tính năng được thêm vào và sửa lỗi. Điều này đã được chứng minh một cách mạnh mẽ trong sự sụp đổ của DAO.
  • Các giao dịch được gửi đến một hợp đồng thông minh không thể cập nhật trạng thái của một blockchain cho đến khi biết thứ tự cuối cùng của chúng, vì bản chất của tính toán mục đích chung. Điều này dẫn đến sự chậm trễ (cho đến khi giao dịch được xác nhận trong một khối) cũng như có thể có sự đảo ngược (trong trường hợp có fork trong chuỗi). Ngược lại, MultiChain có thể xử lý từng loại giao dịch chưa được xác nhận theo cách thích hợp: (a) tài sản đến cập nhật ngay lập tức số dư chưa được xác nhận của nút, (b) các mục luồng đến có sẵn ngay lập tức, với thứ tự toàn cầu của chúng sau đó được hoàn thiện, (c) quyền thay đổi được áp dụng ngay lập tức và sau đó được phát lại trong các khối đến.

Tuy nhiên, như tôi nói trước, chúng tôi chắc chắn không loại trừ hợp đồng thông minh như một mô hình hữu ích cho các ứng dụng blockchain, nếu và khi chúng tôi thấy các trường hợp sử dụng mạnh mẽ. Tuy nhiên, trong MultiChain, các hợp đồng thông minh sẽ được thực hiện trong một lớp giống như luồng trên đầu blockchain, thay vì mức giao dịch thấp nhất. Điều này sẽ bảo toàn hiệu suất vượt trội của MultiChain cho các thực thể blockchain đơn giản hơn như tài sản và luồng, đồng thời cung cấp tính toán trên chuỗi chậm hơn khi nó thực sự cần thiết. Nhưng có ít trường hợp như vậy hơn bạn nghĩ.

 

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

 

Phụ lục kỹ thuật

Tất cả các lệnh liên quan đến luồng được ghi lại đầy đủ trong Trang API MultiChain, nhưng đây là một bản tóm tắt ngắn gọn:

  • Tạo luồng bằng create stream or createfrom ... stream
  • Thêm một mục vào luồng với publish or publishfrom
  • Truy xuất danh sách các luồng bằng liststreams
  • Bắt đầu hoặc dừng theo dõi luồng với subscribeunsubscribe
  • Truy xuất các mục luồng bằng liststreamitems, liststreamkeyitemsliststreampublisheritems
  • Liệt kê các khóa luồng và nhà xuất bản với liststreamkeysliststreampublishers
  • Đối với các mục luồng lớn, hãy truy xuất toàn bộ dữ liệu bằng cách sử dụng gettxoutdata (xem maxshowndata dưới đây)
  • Kiểm soát quyền trên mỗi luồng với các lệnh gọi như grant [address] stream1.write
  • Xem các quyền của luồng bằng cách sử dụng listpermissions stream1.*

Một số ghi chú khác của nhà phát triển liên quan đến luồng:

  • Sản phẩm create quyền cho phép một địa chỉ để tạo luồng.
  • Các quyền liên quan cho mỗi luồng là write, adminactivate
  • Mới thông số blockchain: root-stream-name (để trống không có), root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • Mới tham số thời gian chạy: autosubscribe để tự động đăng ký các luồng mới được tạo và maxshowndata để giới hạn số lượng dữ liệu trong các phản hồi API (xem gettxoutdata ở trên).
  • Kích thước tối đa của dữ liệu của mục luồng được cố định bởi max-std-op-return-size tham số blockchain, cũng như tham số nhỏ hơn maximum-block-sizemax-std-tx-size giá trị trừ đi một vài trăm byte.
  • Các nút sử dụng định dạng ví cũ không thể đăng ký luồng và nên được nâng cấp.

 

Dấu thời gian:

Thêm từ Đa sắc