Mở rộng chuỗi khối với dữ liệu ngoài chuỗi

Nút nguồn: 1738525

Khi một hàm băm có giá trị một triệu từ

Hiện tại, rõ ràng là nhiều trường hợp sử dụng blockchain không liên quan gì đến các giao dịch tài chính. Thay vào đó, mục đích của chuỗi là cho phép tổng hợp phi tập trung, đặt hàng, đánh dấu thời gian và lưu trữ bất kì loại thông tin, bao gồm dữ liệu có cấu trúc, thư từ hoặc tài liệu. Giá trị cốt lõi của blockchain là cho phép những người tham gia đồng ý một cách rõ ràng và vĩnh viễn về chính xác dữ liệu được nhập vào, khi nào và bởi ai, mà không cần dựa vào một trung gian đáng tin cậy. Ví dụ: SAP đã ra mắt gần đây nền tảng blockchain, hỗ trợ MultiChain và Hyperledger Fabric, nhắm mục tiêu đến một loạt các chuỗi cung ứng và các ứng dụng phi tài chính khác.

Cách đơn giản nhất để sử dụng blockchain để ghi dữ liệu là nhúng từng phần dữ liệu trực tiếp vào bên trong một giao dịch. Mọi giao dịch blockchain đều được ký kỹ thuật số bởi một hoặc nhiều bên, được sao chép tới mọi nút, được sắp xếp và đánh dấu thời gian bởi thuật toán đồng thuận của chuỗi và được lưu trữ vĩnh viễn theo cách chống giả mạo. Do đó, mọi dữ liệu trong giao dịch sẽ được lưu trữ giống nhau nhưng độc lập bởi mọi nút, cùng với bằng chứng về việc ai đã viết nó và khi nào. Người dùng của chuỗi có thể truy xuất thông tin này bất kỳ lúc nào trong tương lai.

Ví dụ: MultiChain 1.0 cho phép một hoặc nhiều “luồng” được đặt tên được tạo trên một chuỗi khối và sau đó được sử dụng để lưu trữ và truy xuất dữ liệu thô. Mỗi luồng có tập hợp quyền ghi riêng và mỗi nút có thể tự do chọn luồng để đăng ký. 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 đó trong thời gian thực, cho phép các mục được truy xuất nhanh chóng dựa trên thứ tự, dấu thời gian, số khối hoặc địa chỉ nhà xuất bản của chúng, cũng như thông qua “khóa” (hoặc nhãn) các mục có thể được gắn thẻ. MultiChain 2.0 (kể từ alpha 1) mở rộng luồng để hỗ trợ văn bản Unicode hoặc dữ liệu JSON, cũng như nhiều khóa cho mỗi mục và nhiều mục cho mỗi giao dịch. Nó cũng bổ sung các chức năng tóm tắt như “hợp nhất JSON” kết hợp các mục có cùng khóa hoặc nhà xuất bản một cách hữu ích.

Tính bảo mật và khả năng mở rộng

Mặc dù lưu trữ dữ liệu trực tiếp trên một blockchain hoạt động tốt, nhưng nó lại mắc phải hai thiếu sót chính - tính bảo mật và khả năng mở rộng. Để bắt đầu với tính bảo mật, nội dung của mọi mục luồng hiển thị cho mọi nút trên chuỗi và đây không nhất thiết phải là một kết quả mong muốn. Trong nhiều trường hợp, một phần dữ liệu chỉ được hiển thị cho một tập hợp con nhất định của các nút, ngay cả khi các nút khác cần thiết để giúp sắp xếp, đánh dấu thời gian và công chứng của nó.

Tính bảo mật là một vấn đề tương đối dễ giải quyết, bằng cách mã hóa thông tin trước khi nó được nhúng vào một giao dịch. Khóa giải mã cho từng phần dữ liệu chỉ được chia sẻ với những người tham gia muốn xem nó. Việc phân phối khóa có thể được thực hiện trên chuỗi sử dụng mật mã không đối xứng (như mô tả ở đây) hoặc thông qua một số cơ chế ngoài chuỗi, như được ưu tiên. Bất kỳ nút nào thiếu chìa khóa để giải mã một mục sẽ không có gì khác hơn là ngôn ngữ vô nghĩa nhị phân.

Mặt khác, khả năng mở rộng là một thách thức lớn hơn. Giả sử rằng bất kỳ nền tảng blockchain tốt nào cũng phải hỗ trợ thông lượng mạng là 500 giao dịch mỗi giây. Nếu mục đích của chuỗi là lưu trữ thông tin, thì quy mô của mỗi giao dịch sẽ phụ thuộc chủ yếu vào lượng dữ liệu mà nó chứa. Mỗi giao dịch cũng sẽ cần (ít nhất) 100 byte chi phí để lưu trữ địa chỉ của người gửi, chữ ký số và một vài bit và mảnh khác.

Nếu chúng ta lấy một trường hợp đơn giản, trong đó mỗi mục là một cấu trúc JSON nhỏ có 100 byte, thông lượng dữ liệu tổng thể sẽ là 100 kilobyte mỗi giây, được tính từ 500 × (100 + 100). Điều này có nghĩa là băng thông dưới 1 megabit / giây, thoải mái trong khả năng của bất kỳ kết nối Internet hiện đại nào. Dữ liệu sẽ tích lũy với tốc độ khoảng 3 terabyte mỗi năm, đây là một số lượng không hề nhỏ. Nhưng với ổ cứng 12 terabyte bây giờ phổ biến rộng rãiRAID bộ điều khiển kết hợp nhiều ổ đĩa vật lý thành một ổ đĩa logic duy nhất, chúng tôi có thể dễ dàng lưu trữ 10-20 năm dữ liệu trên mỗi nút mà không gặp quá nhiều rắc rối hay tốn kém.

Tuy nhiên, mọi thứ trông rất khác nếu chúng ta đang lưu trữ các phần thông tin lớn hơn, chẳng hạn như tài liệu được quét. Một bản quét JPEG chất lượng hợp lý của một tờ giấy A4 có thể có kích thước 500 kilobyte. Nhân con số này với 500 giao dịch mỗi giây và chúng tôi đang xem xét thông lượng 250 megabyte môi giây. Điều này có nghĩa là băng thông 2 gigabit / giây, nhanh hơn hầu hết các mạng cục bộ, chưa nói đến kết nối với Internet. Tại Amazon Web Services 'rẻ nhất giá công bố 0.05 đô la cho mỗi gigabyte, nó có nghĩa là hóa đơn băng thông hàng năm là 400,000 đô la cho mỗi nút. Và mỗi nút sẽ lưu trữ 8000 terabyte dữ liệu mới được tạo ra hàng năm ở đâu?

Rõ ràng rằng, đối với các ứng dụng blockchain lưu trữ nhiều phần dữ liệu lớn, lưu trữ trên chuỗi đơn giản không phải là một lựa chọn thực tế. Để tăng thêm sự xúc phạm, nếu dữ liệu được mã hóa để giải quyết vấn đề bí mật, các nút sẽ được yêu cầu lưu trữ một lượng lớn thông tin mà chúng thậm chí không thể đọc được. Đây không phải là một đề xuất hấp dẫn đối với những người tham gia mạng lưới.

Giải pháp băm

Vậy chúng ta giải quyết vấn đề về khả năng mở rộng dữ liệu như thế nào? Làm thế nào chúng ta có thể tận dụng khả năng công chứng dữ liệu phi tập trung của blockchain mà không cần sao chép dữ liệu đó đến mọi nút trên chuỗi?

Câu trả lời là với một phần công nghệ thông minh được gọi là “băm”. Hàm băm là một số dài (nghĩ 256 bit hoặc khoảng 80 chữ số thập phân) xác định duy nhất một phần dữ liệu. Hàm băm được tính toán từ dữ liệu bằng cách sử dụng chức năng một chiều có thuộc tính mật mã quan trọng: Với bất kỳ phần dữ liệu nào, việc tính toán hàm băm của nó rất dễ dàng và nhanh chóng. Nhưng với một hàm băm cụ thể, về mặt tính toán không khả thi để tìm một phần dữ liệu sẽ tạo ra hàm băm đó. Và khi chúng ta nói "tính không khả thi về mặt tính toán", chúng ta muốn nói đến nhiều phép tính hơn số nguyên tử trong vũ trụ đã biết.

Các mã băm đóng một vai trò quan trọng trong tất cả các blockchain, bằng cách xác định duy nhất các giao dịch và khối. Chúng cũng đặt nền tảng cho thách thức tính toán trong các hệ thống bằng chứng công việc như bitcoin. Nhiều hàm băm khác nhau đã được phát triển, với các tên gobbledygook như BLAKE2, MD5 và RIPEMD160. Nhưng để bất kỳ hàm băm nào được tin cậy, nó phải trải qua quá trình đánh giá và kiểm tra học thuật sâu rộng. Các bài kiểm tra này xảy ra dưới dạng các cuộc tấn công cố gắng, chẳng hạn như “preimage” (tìm kiếm đầu vào với hàm băm đã cho), “preimage thứ hai” (tìm kiếm đầu vào thứ hai có cùng hàm băm với đầu vào đã cho) và “va chạm” (tìm bất kỳ hai đầu vào khác nhau với cùng một băm). Sống sót qua chiếc găng tay này là điều không hề dễ dàng, với một lịch sử lâu dài và bi thảm về các hàm băm bị hỏng đã chứng minh câu châm ngôn nổi tiếng: “Đừng tung tiền điện tử của riêng bạn”.

Để quay trở lại vấn đề ban đầu của chúng tôi, chúng tôi có thể giải quyết khả năng mở rộng dữ liệu trong blockchain bằng cách nhúng các hàm băm của các phần lớn dữ liệu trong các giao dịch, thay vì chính dữ liệu. Mỗi băm hoạt động như một “cam kết” đối với dữ liệu đầu vào của nó, với bản thân dữ liệu được lưu trữ bên ngoài chuỗi khối hoặc “ngoài chuỗi”. Ví dụ: bằng cách sử dụng hàm băm SHA256 phổ biến, một hình ảnh JPEG 500 kilobyte có thể được biểu thị bằng một số 32 byte, giảm hơn 15,000 ×. Ngay cả với tốc độ 500 hình ảnh mỗi giây, điều này giúp chúng tôi thoải mái quay trở lại lãnh thổ của các yêu cầu lưu trữ và băng thông khả thi, xét về dữ liệu được lưu trữ trên chính chuỗi.

Tất nhiên, bất kỳ người tham gia blockchain nào cần hình ảnh ngoài chuỗi đều không thể tái tạo nó từ hàm băm của nó. Nhưng nếu hình ảnh có thể được truy xuất theo một cách nào đó khác, thì hàm băm trên chuỗi sẽ xác nhận ai đã tạo ra nó và khi nào. Cũng giống như dữ liệu trên chuỗi thông thường, hàm băm được nhúng bên trong một giao dịch được ký kỹ thuật số, được đưa vào chuỗi theo sự đồng thuận. Nếu một tệp hình ảnh rơi ra khỏi bầu trời và băm cho hình ảnh đó khớp với một băm trong chuỗi khối, thì nguồn gốc và dấu thời gian của hình ảnh đó sẽ được xác nhận. Vì vậy, blockchain đang cung cấp chính xác giá trị về mặt công chứng giống như thể hình ảnh được nhúng trực tiếp vào chuỗi.

Một câu hỏi về giao hàng

Càng xa càng tốt. Bằng cách nhúng các hàm băm vào một chuỗi khối thay vì dữ liệu gốc, chúng tôi có một giải pháp dễ dàng cho vấn đề khả năng mở rộng. Tuy nhiên, một câu hỏi quan trọng vẫn còn:

Làm cách nào để chúng tôi cung cấp nội dung ngoài chuỗi ban đầu cho những nút cần nó, nếu không thông qua chính chuỗi?

Câu hỏi này có một số câu trả lời khả thi và chúng tôi biết những người dùng MultiChain áp dụng tất cả chúng. Một cách tiếp cận cơ bản là thiết lập một kho lưu trữ tập trung tại một số bên đáng tin cậy, nơi tất cả dữ liệu ngoài chuỗi được tải lên sau đó được truy xuất sau đó. Hệ thống này có thể tự nhiên sử dụng “định địa chỉ nội dung”, nghĩa là băm của mỗi phần dữ liệu đóng vai trò trực tiếp như mã định danh của nó để truy xuất. Tuy nhiên, trong khi thiết lập này có thể hoạt động đối với khái niệm bằng chứng, nó không có ý nghĩa đối với sản xuất, bởi vì toàn bộ điểm của blockchain là loại bỏ các trung gian đáng tin cậy. Ngay cả khi hàm băm trên chuỗi ngăn người trung gian làm sai lệch dữ liệu, nó vẫn có thể xóa dữ liệu hoặc không thể cung cấp cho một số người tham gia, do lỗi kỹ thuật hoặc hành động của nhân viên gian dối.

Một khả năng hứa hẹn hơn là giao tiếp điểm-điểm, trong đó nút yêu cầu một số dữ liệu ngoài chuỗi yêu cầu trực tiếp từ nút đã xuất bản nó. Điều này tránh dựa vào một trung gian đáng tin cậy, nhưng mắc phải ba thiếu sót thay thế:

  • Nó yêu cầu một bản đồ địa chỉ blockchain đến địa chỉ IP, để cho phép người tiêu dùng một số dữ liệu giao tiếp trực tiếp với nhà xuất bản của nó. Blockchains nói chung có thể tránh kiểu cấu hình mạng tĩnh này, có thể là một vấn đề về chuyển đổi dự phòng và quyền riêng tư.
  • Nếu nút nhà xuất bản ban đầu đã rời khỏi mạng hoặc tạm thời không hoạt động, thì bất kỳ ai khác sẽ không thể truy xuất dữ liệu.
  • Nếu một số lượng lớn các nút quan tâm đến một số dữ liệu, thì nhà xuất bản sẽ bị quá tải bởi các yêu cầu. Điều này có thể tạo ra tắc nghẽn mạng nghiêm trọng, làm chậm hệ thống của nhà xuất bản và dẫn đến sự chậm trễ lâu dài cho những người cố gắng truy xuất dữ liệu đó.

Để tránh những vấn đề này, lý tưởng nhất là chúng tôi nên sử dụng một số loại cơ chế phân phối phi tập trung. Các nút có thể truy xuất dữ liệu mà chúng cần mà không cần dựa vào bất kỳ hệ thống riêng lẻ nào - có thể là kho lưu trữ tập trung hoặc nhà xuất bản ban đầu của dữ liệu. Nếu nhiều bên có một phần dữ liệu, họ nên chia sẻ gánh nặng phân phối nó cho bất kỳ ai khác muốn. Không ai cần phải tin tưởng một nguồn dữ liệu riêng lẻ, bởi vì hàm băm trên chuỗi có thể chứng minh rằng dữ liệu không bị giả mạo. Nếu một nút độc hại cung cấp cho tôi dữ liệu sai cho một hàm băm, tôi chỉ cần loại bỏ dữ liệu đó và thử hỏi người khác.

Đối với những người có kinh nghiệm với chia sẻ tập tin ngang hàng các giao thức như Napster, Gnutella hoặc BitTorrent, điều này nghe có vẻ rất quen thuộc. Thật vậy, nhiều nguyên tắc cơ bản giống nhau, nhưng có hai điểm khác biệt chính. Đầu tiên, giả sử chúng tôi đang sử dụng blockchain của mình trong bối cảnh doanh nghiệp, hệ thống sẽ chạy trong một nhóm người tham gia khép kín, thay vì Internet nói chung. Thứ hai, blockchain bổ sung thêm một xương sống sắp xếp thứ tự, dấu thời gian và công chứng phi tập trung, cho phép tất cả người dùng duy trì một cái nhìn nhất quán và chống giả mạo về chính xác những gì đã xảy ra, khi nào và bởi ai.

Làm thế nào để một nhà phát triển ứng dụng blockchain có thể đạt được việc phân phối nội dung ngoài chuỗi phi tập trung này? Một lựa chọn phổ biến là sử dụng một nền tảng chia sẻ tệp ngang hàng hiện có, chẳng hạn như Hệ thống tập tin liên quốc gia (IPFS) và sử dụng nó cùng với blockchain. Mỗi người tham gia chạy cả nút blockchain và nút IPFS, với một số phần mềm trung gian phối hợp giữa hai nút này. Khi xuất bản dữ liệu ngoài chuỗi, phần mềm trung gian này lưu trữ dữ liệu gốc trong IPFS, sau đó tạo một giao dịch blockchain có chứa hàm băm của dữ liệu đó. Để truy xuất một số dữ liệu ngoài chuỗi, phần mềm trung gian trích xuất băm từ blockchain, sau đó sử dụng băm này để tìm nạp nội dung từ IPFS. Nút IPFS cục bộ sẽ tự động xác minh nội dung đã truy xuất dựa trên băm để đảm bảo nó không bị thay đổi.

Mặc dù giải pháp này là khả thi, nhưng tất cả đều khá vụng về và bất tiện. Đầu tiên, mỗi người tham gia phải cài đặt, duy trì và cập nhật ba phần mềm riêng biệt (nút blockchain, nút IPFS và phần mềm trung gian), mỗi phần mềm lưu trữ dữ liệu của mình ở một nơi riêng biệt. Thứ hai, sẽ có hai mạng ngang hàng riêng biệt, mỗi mạng có cấu hình riêng, cổng mạng, hệ thống nhận dạng và cấp phép (mặc dù cần lưu ý rằng IPFS chưa hỗ trợ mạng đóng). Cuối cùng, việc kết hợp chặt chẽ IPFS và chuỗi khối với nhau sẽ làm cho phần mềm trung gian ngày càng phức tạp. Ví dụ: nếu chúng ta muốn dữ liệu ngoài chuỗi được tham chiếu bởi một số giao dịch blockchain được truy xuất ngay lập tức (với các lần thử lại tự động), phần mềm trung gian sẽ cần phải liên tục thiết lập và chạy, duy trì trạng thái phức tạp của riêng nó. Sẽ thật tuyệt nếu nút blockchain làm tất cả những điều này cho chúng ta?

Dữ liệu ngoài chuỗi trong MultiChain 2.0

Hôm nay, chúng tôi rất vui khi phát hành phiên bản xem trước thứ ba (alpha 3) của MultiChain 2.0, với giải pháp tích hợp hoàn toàn và liền mạch cho dữ liệu ngoài chuỗi. Mỗi phần thông tin được xuất bản lên luồng có thể là trực tuyến hoặc ngoài chuỗi theo ý muốn và MultiChain sẽ đảm nhận mọi thứ khác.

Không thực sự, ý chúng tôi là tất cả mọi thứ. Là một nhà phát triển xây dựng trên MultiChain, bạn sẽ không phải lo lắng về hàm băm, lưu trữ cục bộ, khám phá nội dung, phân phối phi tập trung hoặc xác minh dữ liệu. Đây là những gì xảy ra đằng sau hậu trường:

  1. Nút MultiChain xuất bản ghi dữ liệu mới vào bộ nhớ cục bộ của nó, chia các mục lớn thành nhiều phần để dễ dàng phân phối và phân phối.
  2. Giao dịch để xuất bản các mục luồng ngoài chuỗi được tạo tự động, chứa (các) hàm băm và (các) kích thước tính bằng byte.
  3. Giao dịch này được ký kết và phát lên mạng, truyền giữa các nút và đi vào chuỗi khối theo cách thông thường.
  4. Khi một nút đã đăng ký một luồng nhìn thấy một tham chiếu đến một số dữ liệu ngoài chuỗi, nó sẽ thêm các băm phân đoạn cho dữ liệu đó vào hàng đợi truy xuất của nó. (Khi đăng ký một luồng cũ, một nút cũng xếp hàng đợi bất kỳ mục nào ngoài chuỗi đã xuất bản trước đó để truy xuất.)
  5. Là một quá trình nền, nếu có các phần trong hàng đợi truy xuất của nút, các truy vấn sẽ được gửi đến mạng để xác định các phần đó, như được xác định bằng các hàm băm của chúng.
  6. Các truy vấn phân đoạn này được truyền tới các nút khác trong mạng theo kiểu ngang hàng (hiện tại giới hạn ở hai bước - xem chi tiết kỹ thuật bên dưới).
  7. Bất kỳ nút nào có dữ liệu cho một đoạn đều có thể phản hồi và phản hồi này được chuyển tiếp tới người đăng ký theo cùng một đường dẫn với truy vấn.
  8. Nếu không có nút nào trả lời truy vấn phân đoạn, phân đoạn sẽ được trả về hàng đợi để thử lại sau.
  9. Nếu không, người đăng ký chọn nguồn hứa hẹn nhất cho một đoạn (dựa trên bước nhảy và thời gian phản hồi) và gửi cho nó một yêu cầu cho dữ liệu của đoạn đó, một lần nữa dọc theo cùng một đường dẫn ngang hàng như phản hồi trước đó.
  10. Nút nguồn cung cấp dữ liệu được yêu cầu, sử dụng lại cùng một đường dẫn.
  11. Người đăng ký xác minh kích thước và hàm băm của dữ liệu so với yêu cầu ban đầu.
  12. Nếu mọi thứ được kiểm tra, người đăng ký sẽ ghi dữ liệu vào bộ nhớ cục bộ của nó, làm cho dữ liệu đó ngay lập tức có thể truy xuất thông qua các API luồng.
  13. Nếu nội dung được yêu cầu không đến hoặc không khớp với hàm băm hoặc kích thước mong muốn, thì đoạn mã sẽ được trả lại hàng đợi để truy xuất trong tương lai từ một nguồn khác.

Quan trọng nhất, tất cả những điều này xảy ra cực kỳ nhanh chóng. Trong các mạng có độ trễ thấp, các phần nhỏ dữ liệu ngoài chuỗi sẽ đến tay người đăng ký trong vòng tích tắc của giao dịch tham chiếu đến họ. Và đối với các ứng dụng tải cao, thử nghiệm của chúng tôi cho thấy rằng MultiChain 2.0 alpha 3 có thể duy trì tốc độ hơn 1000 mục ngoài chuỗi hoặc 25 MB dữ liệu ngoài chuỗi được truy xuất mỗi giây, trên máy chủ tầm trung (Core i7) với mức Kết nối Internet. Mọi thứ đều hoạt động tốt với các mặt hàng ngoài chuỗi có kích thước lên đến 1 GB, vượt xa giới hạn 64 MB cho dữ liệu trên chuỗi. Tất nhiên, chúng tôi hy vọng sẽ cải thiện những con số này hơn nữa khi chúng tôi dành thời gian tối ưu hóa MultiChain 2.0 trong giai đoạn beta của nó.

Khi sử dụng dữ liệu off-chain thay vì on-chain trong các luồng, các nhà phát triển ứng dụng MultiChain phải thực hiện chính xác hai việc:

  • Khi xuất bản dữ liệu, hãy chuyển cờ “offchain” đến các API thích hợp.
  • Khi sử dụng các API truy vấn luồng, hãy xem xét khả năng một số dữ liệu ngoài chuỗi có thể chưa khả dụng, như được báo cáo bởi cờ "có sẵn". Mặc dù trường hợp này hiếm khi xảy ra trong trường hợp bình thường, nhưng điều quan trọng là các nhà phát triển ứng dụng phải xử lý nó một cách thích hợp.

Tất nhiên, để ngăn mọi nút truy xuất mọi mục ngoài chuỗi, các mục nên được nhóm lại với nhau thành các luồng theo cách thích hợp, với mỗi nút đăng ký các luồng quan tâm đó.

Các mục nội bộ và ngoài chuỗi có thể được sử dụng trong cùng một luồng và các chức năng tóm tắt và truy vấn luồng khác nhau liên quan đến cả hai loại dữ liệu giống nhau. Điều này cho phép nhà xuất bản đưa ra lựa chọn thích hợp cho mọi mục trong luồng mà không ảnh hưởng đến phần còn lại của ứng dụng. Ví dụ: một luồng các mục JSON về hoạt động của mọi người có thể sử dụng dữ liệu ngoài chuỗi cho thông tin nhận dạng cá nhân và dữ liệu trên chuỗi cho phần còn lại. Người đăng ký có thể sử dụng hợp nhất JSON của MultiChain để kết hợp cả hai loại thông tin thành một JSON duy nhất để đọc.

Nếu bạn muốn dùng thử các mặt hàng ngoài chuỗi, chỉ cần theo dõi thông thường của MultiChain Bắt đầu và nhớ không bỏ qua phần 5.

Vậy tiếp theo là gì?

Với sự hỗ trợ liền mạch cho dữ liệu ngoài chuỗi, MultiChain 2.0 sẽ mang đến một bước tiến lớn cho các ứng dụng blockchain tập trung vào việc đánh dấu thời gian và công chứng dữ liệu quy mô lớn. Về lâu dài, chúng tôi đã suy nghĩ về rất nhiều cải tiến có thể có trong tương lai đối với tính năng này cho các phiên bản Cộng đồng và / hoặc Doanh nghiệp của MultiChain:

  • Luồng triển khai đọc quyền sử dụng kết hợp các mặt hàng ngoài chuỗi, băm muối, truy vấn phân đoạn đã ký và phân phối được mã hóa.
  • Cho phép dữ liệu ngoài chuỗi bị “lãng quên” một cách rõ ràng, tự nguyện bởi các nút riêng lẻ hoặc bởi tất cả các nút theo phản hồi của một thông báo trên chuỗi.
  • Đăng ký luồng có chọn lọc, trong đó các nút chỉ truy xuất dữ liệu cho các mặt hàng ngoài chuỗi với các nhà xuất bản hoặc khóa cụ thể.
  • Sử dụng cây merkle để cho phép một mã băm trên chuỗi duy nhất đại diện cho số lượng không giới hạn các mặt hàng ngoài chuỗi, tạo ra một bước nhảy vọt khác về khả năng mở rộng.
  • Công cụ lưu trữ có thể lắp ráp, cho phép dữ liệu ngoài chuỗi được lưu giữ trong cơ sở dữ liệu hoặc hệ thống tệp bên ngoài thay vì đĩa cục bộ.
  • Các nút học hỏi theo thời gian nơi mỗi loại dữ liệu ngoài chuỗi thường có sẵn trong mạng và tập trung các truy vấn phân đoạn của chúng một cách thích hợp.

Chúng tôi cũng thích nghe phản hồi của bạn trong danh sách trên cũng như các mặt hàng ngoài chuỗi nói chung. Với MultiChain 2.0 vẫn chính thức ở giai đoạn alpha, có rất nhiều thời gian để cải thiện tính năng này trước khi phát hành cuối cùng.

Trong thời gian chờ đợi, chúng tôi đã bắt đầu làm việc trên “Bộ lọc thông minh”, tính năng chính cuối cùng được lên kế hoạch cho Cộng đồng MultiChain 2.0. Bộ lọc thông minh là một đoạn mã được nhúng trong chuỗi khối để thực hiện các quy tắc tùy chỉnh để xác thực dữ liệu hoặc giao dịch. Bộ lọc thông minh có một số điểm tương đồng với "hợp đồng thông minh" và có thể thực hiện nhiều điều tương tự, nhưng có những điểm khác biệt chính về mặt an toàn và hiệu suất. Chúng tôi mong muốn được nói với bạn nhiều hơn trong khóa học.

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

Chi tiết kỹ thuật

Mặc dù các mục luồng ngoài chuỗi trong MultiChain 2.0 rất dễ sử dụng, nhưng chúng chứa nhiều quyết định thiết kế và các tính năng bổ sung có thể được quan tâm. Danh sách dưới đây chủ yếu sẽ liên quan đến các nhà phát triển xây dựng các ứng dụng blockchain và có thể được bỏ qua bởi các loại kỹ thuật ít hơn:

  • Chính sách mỗi luồng. Khi một luồng MultiChain được tạo, nó có thể bị hạn chế theo tùy chọn để chỉ cho phép dữ liệu trong chuỗi hoặc ngoài chuỗi. Có một số lý do có thể để làm điều này, thay vì để mỗi nhà xuất bản tự quyết định. Ví dụ: các mặt hàng trong chuỗi cung cấp đảm bảo tính sẵn có không đồng đều, trong khi các mặt hàng cũ ngoài chuỗi có thể không thể mua lại được nếu nhà xuất bản của họ và những người đăng ký khác bỏ mạng. Mặt khác, các mặt hàng trên chuỗi không thể bị “lãng quên” nếu không sửa đổi chuỗi khối, trong khi các mặt hàng ngoài chuỗi linh hoạt hơn. Điều này có thể quan trọng về mặt quy tắc bảo mật dữ liệu, chẳng hạn như quy định GDPR mới của Châu Âu.
  • Siêu dữ liệu trên chuỗi. Đối với các mặt hàng ngoài chuỗi, giao dịch trên chuỗi vẫn chứa (các) nhà xuất bản, (các) khóa, định dạng (JSON, văn bản hoặc nhị phân) và tổng kích thước của mặt hàng. Tất cả điều này chiếm rất ít không gian và giúp các nhà phát triển ứng dụng xác định xem liệu sự không có sẵn của một mặt hàng ngoài chuỗi có đáng quan tâm đối với một truy vấn luồng cụ thể hay không.
  • Giới hạn hai bước. Khi chuyển tiếp các truy vấn chunk trên mạng ngang hàng, có một sự cân bằng giữa khả năng truy cập và hiệu suất. Mặc dù sẽ rất tốt nếu mọi truy vấn được truyền đi dọc theo mọi con đường, nhưng điều này có thể làm tắc nghẽn mạng bằng những “tiếng kêu” không cần thiết. Vì vậy, hiện tại các truy vấn chunk được giới hạn trong hai bước, có nghĩa là một nút có thể truy xuất dữ liệu ngoài chuỗi từ bất kỳ ứng dụng ngang hàng nào của nó. Trong các mạng nhỏ hơn dưới 1000 nút có xu hướng đặc trưng cho các blockchain doanh nghiệp, chúng tôi tin rằng điều này sẽ hoạt động tốt, nhưng chúng tôi rất dễ dàng điều chỉnh ràng buộc này (hoặc cung cấp nó như một tham số) nếu chúng tôi hóa ra là sai.
  • Lưu trữ cục bộ. Mỗi nút MultiChain lưu trữ dữ liệu ngoài chuỗi trong thư mục “khối” của thư mục blockchain thông thường của nó, sử dụng định dạng nhị phân hiệu quả và chỉ mục LevelDB. Một thư mục con riêng biệt được sử dụng cho các mục trong mỗi luồng đã đăng ký, cũng như các mục do chính nút xuất bản. Trong mỗi thư mục con này, các phần trùng lặp (với cùng một hàm băm) chỉ được lưu trữ một lần. Khi một nút hủy đăng ký khỏi một luồng, nó có thể chọn có xóa dữ liệu ngoài chuỗi được truy xuất cho luồng đó hay không.
  • Bộ nhớ cache nhị phân. Khi xuất bản các phần lớn dữ liệu nhị phân, cho dù trên chuỗi hay ngoài chuỗi, có thể không thực tế cho các nhà phát triển ứng dụng gửi dữ liệu đó đến API của MultiChain trong một yêu cầu JSON-RPC. Vì vậy, MultiChain 2.0 triển khai một bộ nhớ cache nhị phân, cho phép các phần lớn dữ liệu được tạo qua nhiều lệnh gọi API, và sau đó được xuất bản trong một bước cuối cùng ngắn gọn. Mỗi mục trong bộ đệm nhị phân được lưu trữ dưới dạng một tệp đơn giản trong thư mục con “bộ đệm” của thư mục blockchain, cho phép hàng gigabyte dữ liệu cũng được đẩy trực tiếp qua hệ thống tệp.
  • Các API giám sát. MultiChain 2.0 alpha 3 bổ sung thêm hai API mới để theo dõi việc truy xuất không đồng bộ dữ liệu ngoài chuỗi. API đầu tiên mô tả trạng thái hiện tại của hàng đợi, cho biết có bao nhiêu phần (và bao nhiêu dữ liệu) đang đợi hoặc đang được truy vấn hoặc truy xuất. API thứ hai cung cấp số liệu thống kê tổng hợp cho tất cả các truy vấn và yêu cầu chunk được gửi kể từ khi nút khởi động, bao gồm số lượng các loại lỗi khác nhau.
  • Tuôn ra khi xuất bản. Khi xuất bản một mục ngoài chuỗi, MultiChain đảm bảo rằng bản sao dữ liệu cục bộ của nó được ghi đầy đủ (hoặc “được xóa”) vào ổ đĩa vật lý trước khi giao dịch tham chiếu đến dữ liệu đó được phát tới mạng. Nếu không, nếu nút không may bị mất nguồn ngay sau khi phát giao dịch, dữ liệu ngoài chuỗi có thể bị mất vĩnh viễn. Đây không phải là vấn đề đối với bản thân MultiChain, vì độ trễ giữa các lần truy xuất của một đoạn mã sẽ tự động tăng lên theo thời gian. Nhưng nó có thể gây ra vấn đề ở cấp ứng dụng, nơi mà mọi người đều biết về sự tồn tại của một số dữ liệu nhưng không ai có thể tìm thấy nó.
  • Hiệu suất xuất bản. Bằng cách chuyển dữ liệu ngoài chuỗi vào đĩa theo cách này, MultiChain có thể bị phạt về hiệu suất, vì đĩa vật lý chạy chậm. Ví dụ: ổ cứng tầm trung 7200 vòng / phút chỉ có thể thực hiện khoảng 100 lần ghi dữ liệu ngẫu nhiên mỗi giây, hạn chế tốc độ mà một nút riêng lẻ có thể xuất bản các mục ngoài chuỗi. Có ba cách giải quyết có thể cho vấn đề này. Đầu tiên và đơn giản nhất, các nút có thể sử dụng ổ thiết bị trạng thái rắn (SSD) thay vì ổ cứng thông thường, hỗ trợ 10,000 giây thao tác ghi ngẫu nhiên mỗi giây. Thứ hai, nhiều mặt hàng ngoài chuỗi có thể được xuất bản trong một giao dịch duy nhất bằng cách sử dụng API “createrawsendfrom”. Trong trường hợp này, MultiChain ghi tất cả dữ liệu ngoài chuỗi được tham chiếu bởi một giao dịch trong một hoạt động đĩa đơn. Cuối cùng, MultiChain có thể được định cấu hình để không lưu dữ liệu ngoài chuỗi vào đĩa trước khi truyền phát giao dịch tham chiếu đến nó. Sử dụng tùy chọn này một cách cẩn thận.
  • Tích hợp tiền tệ bản địa. Đối với các trường hợp sử dụng yêu cầu, MultiChain luôn cung cấp tùy chọn sử dụng đồng tiền bản địa trên blockchain để ngăn chặn spam giao dịch và / hoặc khuyến khích các trình xác thực khối (“thợ đào”). Trong những trường hợp này, các giao dịch phải cung cấp cho người khai thác một khoản phí tối thiểu tỷ lệ với kích thước của họ tính bằng byte, để được chuyển tiếp và xác nhận trên chuỗi. Cơ chế này đã được mở rộng để cho phép ngăn chặn thư rác ngoài chuỗi, bằng cách yêu cầu một khoản phí bổ sung tối thiểu cho mỗi kilobyte dữ liệu ngoài chuỗi được tham chiếu trong một giao dịch.
  • Lưu trữ các nút. Nếu một nút muốn đăng ký mọi luồng và do đó truy xuất và lưu trữ mọi mục ngoài chuỗi đã xuất bản, nó có thể được định cấu hình để làm như vậy bằng cách sử dụng tham số thời gian chạy “autosubscribe”. Bất kỳ nút nào như vậy sẽ hoạt động như một bản sao lưu cho toàn bộ mạng, đảm bảo rằng các mục ngoài chuỗi sẽ không bị mất hoặc không có sẵn, bất kể nút nào khác biến mất. Người ta có thể tưởng tượng các công ty bên thứ ba cung cấp dịch vụ này như một dịch vụ thương mại.

Bạn có thể tìm thấy chi tiết đầy đủ về tất cả các lệnh gọi và thông số API có liên quan trên Trang xem trước MultiChain 2.0.

Dấu thời gian:

Thêm từ Đa sắc