圍觀!你要的XDAG代碼結構和邏輯!

XDAG項目是C語言實現的,因此看起來給人格外的輕鬆親切。Dagger這個項目可以說比較神奇,或者說是雜亂。前期的名字是cheatcoin,後面整體換名字Dagger,代幣名字是XDAG。

今天來看看XDAG的白皮書解析,瞭解一個項目的發展,首先從白皮書入手瞭解。

Dagger (XDAG) 加密貨幣協議


1、名詞解釋


區塊地址 - 區塊散列(截取過)的base64編碼。

金額 - XDAG的數量,以cheato為單位。

區塊 - Dagger的基本結構。每個區塊固定長度為512字節。

- 一系列的區塊形成鏈。

Cheato - 一個XDAG包括22^32(2的32次方)個cheato。

區塊難度

- (2^128 - 1)/(hash_little/2^160)。其中hash_little是區塊的散列值的小端表示,256比特。

鏈難度 - 鏈上區塊的難度和。

散列 - 區塊散列。計算公式是:sha256(sha256(區塊內容))。

i-引用 – 如果區塊A的第i個域連接到區塊C,並且區塊C引用區塊B,則稱區塊B是區塊A的i-引用。

連接 - 如果區塊A包括類型2或者3的域,並且這些域是區塊B的散列,則稱區塊A和區塊B連接。

主塊 - 主鏈上的塊。

主鏈 - 具有最大難度的間隔鏈。

引用 - 如果從區塊A到區塊B是一段連續的區塊組成,則稱區塊B被區塊A引用。

間隔鏈 - 鏈上的區塊屬於不同的時間片。

最短鏈 - 一個從區塊A到區塊B的鏈,每個區塊都是i-引用B。i越小,鏈越短。

時間片 - 每64秒是一個時間片,時間片從Dagger創世紀開始。

區塊時間 - 區塊時間記錄在區塊頭信息裡,從1970年1月1號開始,單位是1/1024秒。

交易 - 等同區塊。

截取散列 – 散列的小端表示的最低24個字節。


圍觀!你要的XDAG代碼結構和邏輯!


2、區塊


一個區塊有16個域,每個域32個字節,每個域包括類型0到15.一般區塊,第0個域必須是類型1。傳輸用的偽塊,第0個域必須是類型0。

3、算法


每個區塊就是一個交易。一個交易可能包括多個輸入,多個輸出,輸入/輸出簽名,以及交易費用。合法的區塊滿足以下條件:

- 交易時間不小於Dagger創世紀時間。

- 交易的輸入/輸出時間不小於區塊本身時間。

- 每個輸入或者輸出必須是合法的區塊。

- 輸入金額總和必須小於2^64。

- 輸入總金額必須大於輸出總金額加上交易費用。

- 一個區塊的輸入和一個區塊的輸出連接的話,則該輸入以及輸出簽名必須一致。

- 輸出簽名個數必須是偶數,輸入簽名個數可能是奇數。輸入簽名的最後一個可以被看成任意數據。這個簽名的修改並不需要重建任意的其他簽名。

主鏈上的區塊稱為主塊,每個主塊隸屬於不同的時間片。也就是說,在一個時間片,最多隻有一塊主塊。每個主塊會被獎勵,第一個2^21個主區塊,獎勵1024個XDAG。第二個2^21個主區塊,獎勵512個XDAG。之後每2^21個主區塊,獎勵減半。

4、加密以及安全


標準ECDSA算法被用作簽名。採用的橢圓算法是Secp256k1。私鑰是32個字節,公鑰也是32個字節。簽名是64個字節,由兩個域組成,這兩個域分別是ECDSA簽名算法中的r和s。

私鑰存在wallet.dat文件中,這個文件和xdag程序在同一目錄,每個私鑰32個字節。公鑰並不保存,因為它們可以從私鑰導出。當用戶第一次啟動xdag程序時,要求用戶提供一串隨機字符。這些字符會作為隨機生成器的種子,這些字符存在dnet_key.dat文件中。每次xdag啟動時,這些字符會參與隨機數生成,所有的私鑰用這些字符生成。


分享到:


相關文章: