我調 Dusk 索引器時踩過一個坑:讓 transaction ID 與 contract ID 共用一個 hash 函數。區塊哈希和 Merkle root 用 SHA3-256;合約 bytecode 與 event bloom filter 用 BLAKE3;contract ID 和 transaction ID 用 BLAKE2b;錢包完整性與密鑰派生用 SHA2-256。
這像檔案館的四枚印章。入庫章、合同章和取件章都能壓出編號,可登記系統只認指定那枚。算法選錯,輸出照樣像正常哈希,節點卻找不到對應對象。另一個坑是把十六進制展示字符串再 hash 一次,協議接口通常喫原始 bytes;編碼多繞一步,結果就全變了。
所以我接入時會保留原始字節,用官方 SDK 或 Rusk 生成 ID,再拿已知區塊、交易和合約做測試向量。@Dusk Dusk 文檔也建議少重複實現協議編碼。多種算法把職責分開,也把版本、字節序和輸入格式變成驗收項。能生成一串長度正確的字符,只說明函數跑完了,鏈上身份還得反查確認#dusk $DUSK
這像檔案館的四枚印章。入庫章、合同章和取件章都能壓出編號,可登記系統只認指定那枚。算法選錯,輸出照樣像正常哈希,節點卻找不到對應對象。另一個坑是把十六進制展示字符串再 hash 一次,協議接口通常喫原始 bytes;編碼多繞一步,結果就全變了。
所以我接入時會保留原始字節,用官方 SDK 或 Rusk 生成 ID,再拿已知區塊、交易和合約做測試向量。@Dusk Dusk 文檔也建議少重複實現協議編碼。多種算法把職責分開,也把版本、字節序和輸入格式變成驗收項。能生成一串長度正確的字符,只說明函數跑完了,鏈上身份還得反查確認#dusk $DUSK