TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

兩週以來,Runet 一直在對 Telegram 和 Roskomnadzor 無情且無情的封鎖的情況進行喧囂。 彈跳冒犯了很多人,但所有這些都是 Geektimes 上帖子的主題。 我對其他事情感到驚訝 - 我仍然沒有看到關於計劃在 Telegram - Telegram Open Network 基礎上發布的 TON 網路 Habré 的任何分析。 我想彌補這個缺陷,因為那裡有一些值得研究的東西——儘管缺乏官方聲明。

讓我提醒您,有傳言稱 Telegram 已經發起了非常大規模的封閉式 ICO,已經籌集了令人難以置信的巨額資金。 預計 Gram 自己的加密貨幣將於今年推出 - 每個 Telegram 用戶將自動擁有一個錢包,這本身就比其他加密貨幣創造了顯著優勢。

不幸的是,由於沒有官方聲明,我只能進一步從 來源不明的文件,我立即警告你。 當然,這可能是一個非常巧妙的偽造,但也有可能這是未來系統的真實白皮書,由尼古拉·杜羅夫(Nikolai Durov)撰寫(可能是由其中一位投資者洩露的)。 但就算是假的,也不會有人禁止我們研究和討論吧?

這份文件說了什麼? 我將嘗試用我自己的話重述它,接近文本,但用俄語並且更人性化一些(尼古拉原諒我傾向於進入形式數學)。 請記住,即使這是真實的,這也只是系統的草稿描述,很可能會在公開發佈時發生變化。

我們了解到,除了加密貨幣之外,還有更多值得期待的東西。 我們按順序來吧。

  • TON區塊鏈。 這是整個系統的基礎。 如果你不知道它是什麼 блокчейн — 我建議找出來,因為這裡會有很多區塊鏈。 區塊鏈彼此嵌套,實際上是碎片化的,甚至是「垂直」的區塊鏈在其他區塊鏈的區塊內。 還有一些聽起來很酷的術語,例如 即時超立方體路由 и 無限分片範式,但稍後會詳細介紹。 當然,還有權益證明和智能合約。
  • TON P2P 網路。 系統將在此基礎上建構對等網路。 故事的這一部分將首先討論她。
  • 噸存儲。 文件存儲,無論區塊鏈如何,都將建立在上述點對點網路上。 可以與 torrent 進行比較。
  • TON 代理。 這項服務的目的是增加網路參與者的匿名性。 任何資料包都不能直接發送,而是透過額外加密的中間隧道(如 I2P 或 TOR)發送。
  • 噸雙氫睪酮。 用於儲存任意值的分散式雜湊表。 它也是建立在上面的 噸網絡 (但同時它被他使用)並幫助 噸存儲 找到“分佈”節點,以及 TON 代理 — 中間中繼器。 但應該注意的是,與區塊鏈不同,這個哈希表不是一個安全儲存——你不能在其中儲存重要資訊。
  • TON 服務。 客製化服務平台。 本質上,這是一個建立在上述一切之上的新互聯網。 資料交換 - 透過 噸網絡/TON 代理,邏輯就在智能合約中 TON區塊鏈。 以及帶有相當熟悉的 URL 的介面。
  • 噸 DNS。 由於我們談論的是熟悉的 URL,因此我們還需要一個將它們轉換為 256 位元位址(帳戶、合約、服務和節點)的轉換器。
  • 噸付款。 這就是金錢問題發揮作用的地方。 而且它不僅會是 ——與以太幣一樣,任何「代幣」都是可能的; 克將只是這裡的「預設」貨幣。

這是描述 TON 的「接地」層的第一部分——它的網路部分,建構在傳統協議之上。 在下一部分中,我們將討論「軟」——區塊鏈,它將由下面描述的系統支援。 因此,我的複述順序與上述文件中使用的順序有些不同(立即從抽象層次開始)。

基本概念

TL (鍵入語言)。 它是任意資料結構的抽象二進位格式。 它用於 Telegram 協議中,並將在 TON 中積極使用。 如果你想詳細了解一下—— 這是他的描述.

散列 (哈希)。 將任意資料結構不可逆地轉換為固定長度的單一數字的函數。 在整個文件中,我們討論該功能 SHA-256.

網路節點 (節點)。 節點是確保系統運作的軟體。 特別是,假設每個 Telegram 用戶端應用程式都將包含一個 TON 節點。 在低層,節點擁有 IPv4/IPv6 位址並使用 UDP 協定進行通訊;在高層,它們擁有 摘要地址 並實作 ADNL 協定(關於抽象位址和 ADNL - 見下文)。 當談到系統的某些部分執行某些操作或儲存某些資料時,可以理解這是由網路節點完成的。

摘要地址 (或簡單地說 地址, 地址)。 節點的地址由其公鑰決定。 更嚴格地說,它是包含公鑰的資料結構的256位元雜湊(SHA256)(未指定特定的加密演算法-以橢圓曲線和RSA-2048為例)。 為了使一個節點與另一個節點通信,它不僅需要知道該節點的位址,還需要知道該資料結構。 理論上,一個實體節點可以建立任意數量的位址(對應不同的金鑰)。

此外,經常使用這樣的連結:TL 結構形式的「原型」(幾乎包含任何資料),以及來自它的 256 位元散列,用於尋址。

區塊鏈 (blockchain)。 區塊鏈是一種資料結構、元素(),它們被排序成一條“鏈”,鏈中的每個後續區塊都包含前一個區塊的雜湊值。 透過這種方式,實現了完整性——只能透過添加新區塊來進行更改。

服務 (服務)。 TON 內的服務可以有多種類型,這取決於它們是否使用區塊鏈。 例如,一個(或多個)網路節點可以使用下面描述的 ADNL 協定處理某些 RPC 請求,而無需在區塊鏈中建立任何記錄 - 就像傳統的 Web 伺服器一樣。 包括透過 ADNL 實現 HTTP 的可能性,以及信差本身向該協定的過渡。 與 TOR 或 I2P 類比,這將使其更能抵抗各種阻塞。

同時,許多服務涉及與區塊鏈的互動以及處理區塊鏈外部的請求。 例如,對於 TON Storage(文件儲存)來說,將文件本身儲存在區塊鏈上並不是很合理。 它將僅包含文件雜湊(以及有關它們的一些元資訊),專門的網路節點將充當“文件伺服器”,準備透過 ADNL 將它們發送到其他節點。

霧服務 (霧服務)。 我們正在談論一些意味著去中心化和開放參與的服務。 例如,任何想要將其節點提供為在其他節點之間轉送資料包的中介(代理)的參與者都可以支援 TON 代理服務。 如果需要,他可以為此收取自己設定的費用 - 使用 TON 支付系統進行小額支付(這也是一項霧氣服務)。

ADNL:抽象資料封包網路層

在最低級別,節點之間的通訊將使用 UDP 協定進行(儘管其他選項也是可以接受的)。

如上所述,為了讓一個節點向另一個節點發送資料包,它必須知道其公鑰之一(以及它定義的位址)。 它使用此金鑰對資料包進行加密,並將 256 位元目標位址新增至資料包的開頭 - 由於一個節點可以擁有其中多個位址,這將允許它確定使用哪個金鑰進行解密。

TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

此外,資料包的開頭可能包含所謂的位址,而不是接收者的位址。 識別符 這個頻道。 在這種情況下,資料包的處理已經取決於節點之間的特定協定 - 例如,發送到某個通道的資料可能是發送給另一個節點的,並且必須轉發給它(這是服務) TON 代理)。 另一種特殊情況可能是節點之間直接交互,但使用該通道的單獨金鑰對進行加密(使用 Diffie-Hellman 協定預先產生)。

最後,一個特殊情況是「空」通道 - 如果節點尚不知道其「鄰居」的公鑰,它可以向它們發送根本不加密的資料包。 這僅用於初始化 - 一旦節點發送有關其金鑰的訊息,它們就應該用於進一步的通訊。

上述協定(256位元通道標識符+資料包內容)稱為ADNL。 該文件提到了在其之上實現 TCP 類似物或其自己的附加元件 - RLDP(可靠大數據報協定)的可能性,但沒有詳細介紹其實作。

TON DHT:分散式雜湊表

與其他分散式系統一樣,TON 涉及 DHT 的實現 - 分散式哈希表。 更具體地說,該表是 類似 Kademlia。 如果你不熟悉這種類型的哈希表,不用擔心,下面我將大致描述它們是如何運作的。

TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

從抽象意義上講,DHT 將 256 位元金鑰映射為任意長度的二進位值。 在這種情況下,表中的鍵是來自某個 TL 結構的雜湊值(該結構本身也與 DHT 儲存在一起)。 這與節點位址的形成非常相似 - 它們確實可以存在於 DHT 中(例如,使用這樣的金鑰對應於給定節點的 IP 位址) 摘要地址,如果他不隱藏的話)。 但在一般情況下,「密鑰原型」(它們的 說明, 關鍵描述)是元數據,指示哈希表中條目的「所有者」(即某個節點的公鑰)、儲存值的類型以及隨後可以更改該條目的規則。 例如,規則可能只允許所有者更改該值,或禁止向下更改該值(以防止重播攻擊)。

除了256位元密鑰之外,還引入了DHT位址的概念。 與常規主機位址的差異在於 DHT 位址必須與 IP 位址綁定。 如果節點不隱藏其 IP,則可以使用常規位址進行 DHT。 但更常見的是,會為 DHT 需求建立一個單獨的「半永久」地址。
TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡
在金鑰和 DHT 地址上方引入了距離的概念 - 一切都與表格一致 卡德里亞 — 鍵之間的距離等於它們的 XOR(位元異或)。 與 Kademlia 表一樣,某個鍵對應的值必須儲存在 s 到該鍵的距離最短的節點(s 這是一個相對較小的數字)。

為了讓 DHT 節點與其他此類節點進行通信,它會保存在記憶體中 DHT路由表 — 先前與之互動的節點的 DHT 和 IP 位址,以與它們的距離分組。 有 256 個這樣的群組(它們對應於距離值中設定的最高有效位元 - 即,距離從 0 到 255 的節點將落入一組,從 256 到 65535 - 落入下一個群組,等等)。 在每個群組中,儲存有限數量的「最佳」節點(就對它們的 ping 而言)。

TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

每個節點必須支援多種操作: 儲存鍵的值, 節點搜尋 и 尋找價值。 搜尋節點涉及根據給定的金鑰從路由表中發布距離它最近的節點; 查找值是相同的,除非節點知道鍵的值(然後它只回傳它)。 因此,如果節點想要透過 DHT 中的鍵來尋找值,它會向其路由表中最接近該鍵的少數節點發送請求。 如果所需的值不在它們的回應中,但存在其他節點位址,則向它們重複請求。

TON DHT 可用於各種目的,例如,實現類似 torrent 的文件儲存(請參閱. 噸存儲); 確定實現某些服務的節點的位址; 在區塊鏈上儲存有關帳戶所有者的信息。 但最重要的應用是透過抽象位址發現節點。 為此,地址被用作需要找到其值的鍵。 作為請求的結果,要么會找到節點本身(如果搜尋到的位址是其半永久 DHT 位址),要么該值將是用於連接的 IP 位址和連接埠 - 或應用為連接的另一個位址。中間隧道。

TON 中的覆蓋網絡

上述 ADNL 協定意味著任何節點都能夠相互交換資訊 - 儘管不一定以最佳方式進行。 我們可以說,由於 ADNL,所有節點都形成了一個全域 TON 圖(理想連接)。 但也可以建立覆蓋網路 - 該圖中的子圖。
TON:電報開放網路。 第 1 部分:簡介、網路層、ADNL、DHT、覆蓋網絡

在這樣的網路中,互動僅直接進行-透過參與網路的節點之間預先形成的連結(透過上述 ADNL 通道)。 鄰居之間這種連接的形成,即搜尋鄰居本身,是一個自動過程,旨在維持覆蓋網路的連接性並最大限度地減少其中資料交換的延遲。

此外,還有一種方法可以在網路內快速分發大型廣播更新 - 它們被分成多個片段,並補充有糾錯代碼,並且所有這些片段都從一個參與者發送到另一個參與者。 因此,參與者在沿著網路進一步發送它們之前不必完全獲取所有部分。

覆蓋網路可以是公共的或私有的。 成為公共網路的成員並不困難——你需要找到一個描述它的 TL 結構(它可以是公共的,也可以透過 DHT 中的某個金鑰來存取)。 在專用網路的情況下,節點必須事先知道該結構。

待續

我決定將 TON 評論分成幾篇文章。 這部分到此結束,並且 下一個 我接著考慮 TON 將包含的區塊鏈(更準確地說,區塊鏈)的結構。

來源: www.habr.com

添加評論