TON: Mạng mở Telegram. Phần 2: Blockchain, sharding

TON: Mạng mở Telegram. Phần 2: Blockchain, sharding

Văn bản này là phần tiếp theo của một loạt bài viết trong đó tôi xem xét cấu trúc của mạng phân phối (có lẽ là) Telegram Open Network (TON), đang chuẩn bị phát hành trong năm nay. TRONG phần trước Tôi đã mô tả mức độ cơ bản nhất của nó - cách các nút tương tác với nhau.

Để đề phòng, hãy để tôi nhắc bạn rằng tôi không liên quan gì đến sự phát triển của mạng này và tất cả tài liệu đều được thu thập từ một nguồn mở (mặc dù chưa được xác minh) - tài liệu (có kèm theo nữa cuốn sách nhỏ, phác thảo ngắn gọn những điểm chính), xuất hiện vào cuối năm ngoái. Theo tôi, lượng thông tin trong tài liệu này cho thấy tính xác thực của nó, mặc dù chưa có xác nhận chính thức nào về điều này.

Hôm nay chúng ta sẽ xem xét thành phần chính của TON - blockchain.

Các khái niệm cơ bản

Tài khoản (Tài khoản). Một tập hợp dữ liệu được xác định bằng số 256 bit id_tài khoản (thường đây là khóa chung của chủ tài khoản). Trong trường hợp cơ bản (xem bên dưới không có chuỗi công việc), dữ liệu này đề cập đến số dư của người dùng. “Chiếm đóng” cụ thể id_tài khoản ai cũng có thể, nhưng giá trị của nó chỉ có thể thay đổi theo những quy tắc nhất định.

Hợp đồng thông minh (hợp đồng thông minh). Về bản chất, đây là trường hợp đặc biệt của một tài khoản, được bổ sung mã hợp đồng thông minh và lưu trữ các biến của nó. Nếu trong trường hợp “ví”, bạn có thể gửi và rút tiền từ nó theo các quy tắc tương đối đơn giản và được xác định trước, thì trong trường hợp hợp đồng thông minh, các quy tắc này được viết dưới dạng mã của nó (theo một kiểu Turing-complete nhất định). ngôn ngữ lập trình).

Trạng thái chuỗi khối (trạng thái của chuỗi khối). Tập hợp trạng thái của tất cả các tài khoản/hợp đồng thông minh (theo nghĩa trừu tượng, bảng băm, trong đó các khóa là số nhận dạng tài khoản và các giá trị là dữ liệu được lưu trữ trong tài khoản).

thông điệp (tin nhắn). Ở trên tôi đã sử dụng cụm từ “tiền ghi có và ghi nợ” - đây là một ví dụ cụ thể về tin nhắn (“chuyển khoản N gam Từ tài khoản tài khoản_1 mỗi tài khoản tài khoản_2"). Rõ ràng, chỉ nút sở hữu khóa riêng của tài khoản mới có thể gửi tin nhắn như vậy tài khoản_1 - và có thể xác nhận điều này bằng chữ ký. Kết quả của việc gửi những tin nhắn như vậy đến một tài khoản thông thường là số dư của tài khoản đó tăng lên và kết quả của hợp đồng thông minh là việc thực thi mã của nó (sẽ xử lý việc nhận tin nhắn). Tất nhiên, các thông báo khác cũng có thể xảy ra (không phải chuyển số tiền mà là dữ liệu tùy ý giữa các hợp đồng thông minh).

giao dịch (giao dịch). Việc một tin nhắn được gửi đi được gọi là một giao dịch. Giao dịch thay đổi trạng thái của blockchain. Chính các giao dịch (bản ghi gửi tin nhắn) tạo nên các khối trong chuỗi khối. Về vấn đề này, bạn có thể coi trạng thái của blockchain như một cơ sở dữ liệu gia tăng - tất cả các khối đều là “khác biệt” cần được áp dụng tuần tự để có được trạng thái hiện tại của cơ sở dữ liệu. Các chi tiết cụ thể về việc đóng gói những “khác biệt” này (và khôi phục trạng thái đầy đủ từ chúng) sẽ được thảo luận trong bài viết tiếp theo.

Blockchain trong TON: nó là gì và tại sao?

Như đã đề cập ở bài viết trước, blockchain là một cấu trúc dữ liệu, các phần tử (khối) được sắp xếp thành một “chuỗi” và mỗi khối tiếp theo của chuỗi chứa hàm băm của khối trước đó. Các ý kiến ​​​​đặt câu hỏi: tại sao chúng ta lại cần cấu trúc dữ liệu như vậy khi chúng ta đã có DHT - bảng băm phân tán? Rõ ràng, một số dữ liệu có thể được lưu trữ trong DHT, nhưng điều này chỉ phù hợp với những thông tin không quá “nhạy cảm”. Số dư tiền điện tử không thể được lưu trữ trong DHT - chủ yếu là do thiếu kiểm tra thanh Liêm. Trên thực tế, toàn bộ sự phức tạp của cấu trúc blockchain tăng lên nhằm ngăn chặn sự can thiệp vào dữ liệu được lưu trữ trong đó.

Tuy nhiên, chuỗi khối trong TON trông thậm chí còn phức tạp hơn so với hầu hết các hệ thống phân tán khác - và vì hai lý do. Đầu tiên là mong muốn giảm thiểu nhu cầu về nĩa. Trong tiền điện tử truyền thống, tất cả các tham số được đặt ở giai đoạn ban đầu và bất kỳ nỗ lực thay đổi chúng nào đều thực sự dẫn đến sự xuất hiện của một “vũ trụ tiền điện tử thay thế”. Lý do thứ hai là hỗ trợ cho việc nghiền nát (mảnh vỡ, mảnh vỡ) chuỗi khối. Blockchain là một cấu trúc không thể trở nên nhỏ hơn theo thời gian; và thông thường mỗi nút chịu trách nhiệm vận hành mạng buộc phải lưu trữ nó hoàn toàn. Trong các hệ thống truyền thống (tập trung), sharding được sử dụng để giải quyết các vấn đề như vậy: một số bản ghi trong cơ sở dữ liệu được đặt trên một máy chủ, một số trên máy chủ khác, v.v. Trong trường hợp tiền điện tử, chức năng như vậy vẫn còn khá hiếm - đặc biệt, do rất khó để thêm phân đoạn vào một hệ thống không được lên kế hoạch ban đầu.

TON có kế hoạch giải quyết cả hai vấn đề trên như thế nào?

Nội dung chuỗi khối. Chuỗi công việc.

TON: Mạng mở Telegram. Phần 2: Blockchain, sharding

Trước hết, hãy nói về những gì được lên kế hoạch lưu trữ trong blockchain. Trạng thái của tài khoản (“ví” trong trường hợp cơ bản) và hợp đồng thông minh sẽ được lưu trữ ở đó (để đơn giản, chúng tôi sẽ giả định rằng điều này giống với tài khoản). Về bản chất, đây sẽ là một bảng băm thông thường - các khóa trong đó sẽ là các mã định danh id_tài khoảnvà các giá trị là cấu trúc dữ liệu chứa những thứ như:

  • thăng bằng;
  • mã hợp đồng thông minh (chỉ dành cho hợp đồng thông minh);
  • lưu trữ dữ liệu hợp đồng thông minh (chỉ dành cho hợp đồng thông minh);
  • số liệu thống kê;
  • (tùy chọn) khóa chung để chuyển từ tài khoản, theo mặc định account_id;
  • hàng đợi các tin nhắn gửi đi (ở đây chúng được nhập để chuyển tiếp đến người nhận);
  • danh sách các tin nhắn mới nhất được gửi tới tài khoản này.

Như đã đề cập ở trên, bản thân các khối bao gồm các giao dịch - tin nhắn được gửi đến các tài khoản account_id khác nhau. Tuy nhiên, ngoài account_id, tin nhắn còn chứa trường 32 bit chuỗi công việc_id - cái gọi là định danh chuỗi công việc (chuỗi công việc, chuỗi khối hoạt động). Điều này cho phép bạn có một số blockchain độc lập với nhau với các cấu hình khác nhau. Trong trường hợp này, Workchain_id = 0 được coi là trường hợp đặc biệt, không có chuỗi công việc — số dư trong đó sẽ tương ứng với tiền điện tử TON (Gram). Rất có thể, lúc đầu, các chuỗi công việc khác sẽ không tồn tại.

Các mảnh vỡ. Mô hình phân mảnh vô hạn.

Nhưng sự tăng trưởng về số lượng blockchain không dừng lại ở đó. Hãy giải quyết vấn đề sharding. Hãy tưởng tượng rằng mỗi tài khoản (account_id) được phân bổ chuỗi khối riêng - nó chứa tất cả các thông báo đến - và trạng thái của tất cả các chuỗi khối như vậy được lưu trữ trên các nút riêng biệt.

Tất nhiên, điều này rất lãng phí: rất có thể, trong mỗi trường hợp này chuỗi mảnh vỡ (chuỗi mảnh, chuỗi khối phân đoạn) các giao dịch sẽ rất hiếm khi đến và sẽ cần rất nhiều nút mạnh mẽ (nhìn về phía trước, tôi lưu ý rằng chúng ta không chỉ nói về khách hàng trên điện thoại di động - mà còn về các máy chủ nghiêm túc).

Do đó, chuỗi phân đoạn kết hợp các tài khoản theo tiền tố nhị phân của số nhận dạng của chúng: nếu chuỗi phân đoạn có tiền tố là 0110 thì nó sẽ bao gồm các giao dịch của tất cả id tài khoản bắt đầu bằng những số này. Cái này shard_prefix có thể có độ dài từ 0 đến 60 bit - và điều chính là nó có thể thay đổi linh hoạt.

TON: Mạng mở Telegram. Phần 2: Blockchain, sharding

Ngay khi một trong các chuỗi phân đoạn bắt đầu nhận quá nhiều giao dịch, các nút làm việc trên đó, theo các quy tắc định trước, sẽ “chia” nó thành hai phần tử con - tiền tố của chúng sẽ dài hơn một chút (và đối với một trong số chúng, bit này sẽ là bằng 0 và ngược lại - 1). Ví dụ, shard_prefix = 0110b sẽ chia thành 01100b và 01101b. Đổi lại, nếu hai chuỗi phân đoạn “láng giềng” bắt đầu cảm thấy đủ thoải mái (trong một thời gian), chúng sẽ hợp nhất lại.

Do đó, việc phân đoạn được thực hiện “từ dưới lên” - chúng tôi giả định rằng mỗi tài khoản có phân đoạn riêng, nhưng hiện tại chúng được “dán lại với nhau” bằng các tiền tố. Đây chính là ý nghĩa của nó Mô hình phân mảnh vô hạn (mô hình sharding vô hạn).

Riêng biệt, tôi muốn nhấn mạnh rằng các chuỗi công việc hầu như chỉ tồn tại - trên thực tế, chuỗi công việc_id nó là một phần của mã định danh của một chuỗi phân đoạn cụ thể. Theo thuật ngữ chính thức, mỗi chuỗi phân đoạn được xác định bởi một cặp số (chuỗi công việc_id, shard_prefix).

Sửa lỗi. Chuỗi khối dọc.

Theo truyền thống, bất kỳ giao dịch nào trên blockchain đều được coi là “được thiết lập chắc chắn”. Tuy nhiên, trong trường hợp của TON, có thể “viết lại lịch sử” - trong trường hợp ai đó (cái gọi là. nút thắt ngư dân) sẽ chứng minh rằng một trong các khối đã được ký không chính xác. Trong trường hợp này, một khối hiệu chỉnh đặc biệt được thêm vào chuỗi phân đoạn tương ứng, chứa hàm băm của chính khối đang được sửa (chứ không phải khối cuối cùng trong chuỗi phân đoạn). Nghĩ về shardchain như một chuỗi các khối được đặt theo chiều ngang, chúng ta có thể nói rằng khối sửa chữa được gắn vào khối bị lỗi không phải ở bên phải mà là từ phía trên - vì vậy nó được coi là một phần của một “blockchain dọc” nhỏ . Vì vậy, chúng ta có thể nói rằng shardchains là chuỗi khối hai chiều.

TON: Mạng mở Telegram. Phần 2: Blockchain, sharding

Nếu, sau một khối bị lỗi, những thay đổi do khối đó thực hiện được tham chiếu bởi các khối tiếp theo (tức là các giao dịch mới được thực hiện dựa trên những khối không hợp lệ), thì những thay đổi sửa chữa cũng được thêm vào các khối này “trên cùng”. Nếu các khối không ảnh hưởng đến thông tin “bị ảnh hưởng”, thì những “sóng điều chỉnh” này sẽ không áp dụng cho chúng. Ví dụ: trong hình minh họa ở trên, giao dịch của khối đầu tiên, làm tăng số dư của tài khoản C, được xác định là không chính xác - do đó, giao dịch làm giảm số dư của tài khoản này trong khối thứ ba cũng phải bị hủy và khối khắc phục nên được cam kết ở trên cùng của khối.

Cần lưu ý rằng mặc dù các khối điều chỉnh được mô tả là nằm “phía trên” các khối ban đầu, nhưng trên thực tế, chúng sẽ được thêm vào cuối chuỗi khối tương ứng (nơi chúng phải được sắp xếp theo thứ tự thời gian). Vị trí hai chiều chỉ hiển thị điểm nào trong chuỗi khối mà chúng sẽ được “liên kết” (thông qua hàm băm của khối ban đầu nằm trong chúng).

Bạn có thể triết lý riêng về quyết định “thay đổi quá khứ” tốt như thế nào. Có vẻ như nếu chúng ta thừa nhận khả năng một khối không chính xác xuất hiện trong shardchain thì chúng ta không thể tránh khỏi khả năng xuất hiện một khối sửa lỗi sai. Ở đây, theo như tôi có thể nói, sự khác biệt nằm ở số lượng nút phải đạt được sự đồng thuận trên các khối mới - sẽ có một số lượng tương đối nhỏ người làm việc trên mỗi chuỗi phân đoạn.”nhóm làm việc» các nút (thay đổi thành phần của nó khá thường xuyên) và việc đưa ra các khối khắc phục sẽ cần có sự đồng ý của mọi người nút xác thực. Tôi sẽ nói nhiều hơn về trình xác thực, nhóm làm việc và các vai trò nút khác trong bài viết tiếp theo.

Một blockchain để thống trị tất cả

Có rất nhiều thông tin được liệt kê ở trên về các loại blockchain khác nhau, bản thân những thông tin này cũng cần được lưu trữ ở đâu đó. Đặc biệt, chúng ta đang nói về các thông tin sau:

  • về số lượng và cấu hình các chuỗi công việc;
  • về số lượng chuỗi phân đoạn và tiền tố của chúng;
  • về nút nào hiện chịu trách nhiệm cho chuỗi phân đoạn nào;
  • băm của các khối cuối cùng được thêm vào tất cả các chuỗi phân đoạn.

Như bạn có thể đoán, tất cả những thứ này được ghi lại trong một bộ lưu trữ blockchain khác - chuỗi chủ (chuỗi chủ, chuỗi khối bậc thầy). Do sự hiện diện của hàm băm từ các khối của tất cả các chuỗi phân đoạn trong khối của nó, nó làm cho hệ thống có tính kết nối cao. Điều này có nghĩa là, cùng với những điều khác, việc tạo một khối mới trong chuỗi chính sẽ xảy ra ngay sau khi tạo các khối trong chuỗi phân đoạn - dự kiến ​​các khối trong chuỗi phân đoạn sẽ xuất hiện gần như đồng thời khoảng 5 giây một lần và khối tiếp theo trong chuỗi phân đoạn sẽ xuất hiện gần như đồng thời. masterchain - một giây sau đó.

Nhưng ai sẽ chịu trách nhiệm thực hiện tất cả công việc to lớn này - gửi tin nhắn, thực hiện hợp đồng thông minh, hình thành các khối trong chuỗi phân đoạn và chuỗi chính, và thậm chí kiểm tra lỗi các khối? Liệu tất cả những điều này có được thực hiện một cách bí mật qua điện thoại của hàng triệu người dùng có cài đặt ứng dụng khách Telegram không? Hoặc có lẽ nhóm Durov sẽ từ bỏ ý tưởng phân cấp và máy chủ của họ sẽ thực hiện theo cách cũ?

Trên thực tế, cả câu trả lời này và câu trả lời kia đều không đúng. Nhưng phần lề của bài viết này sắp hết, vì vậy chúng ta sẽ nói về các vai trò khác nhau của các nút (bạn có thể đã nhận thấy đề cập đến một số nút trong số đó), cũng như cơ chế hoạt động của chúng, trong phần tiếp theo.

Nguồn: www.habr.com

Thêm một lời nhận xét