合約ID,助力資料遷移的通關秘籍 | 三分鐘入門Neo3

買賣虛擬貨幣
在上一篇「三分鐘入門Neo3」文章中,我們介紹了指令碼雜湊(Script Hashes)在Neo2環境中的應用,以及它們可能對開發者和網路造成的負面影響。 儘管合同重定向能夠解決資料遷移過程中的一些問題,但這一方案依舊需要第三方服務商手動更新其服務,才能使用新的合約雜湊。因此,Neo創始人及核心開發者張錚文又提出了一個新方案「唯一合約ID」(Unique Contract IDs)。

唯一合約ID

張錚文介紹了「唯一合約ID」帶來的好處:

“主要區別在於,使用GUID不需要新增重定向記錄,並且合約可以隨時升級,而無需記錄其他資訊以防止重新部署舊合約。因為如果部署了舊合約,則會建立新的GUID。”

此方案不僅能夠減緩資料遷移對於合約儲存的壓力,還能在合約更新後依舊保留原有的識別符號(指令碼雜湊)。將每個ID分配給每個已部署的合約,並在程式碼更新過程中一直存在。這意味著與Neo智慧合約整合的服務商將不再需要在合約更新時手動更新其基礎架構。

實施合約ID

初步方案提出後,張錚文先在本地測試了此方案的可行性,並提供了一個切實的「唯一合約ID」生成方案。

NGD軟體開發者劉夢雨在確認該提案時強調,考慮到合約儲存遭到威脅後會造成雜湊衝突,所以將合約的資料字首以ID形式編碼,不僅能夠緩解儲存空間,也能保證儲存的安全性。

注意到對「唯一合約ID」安全性與的要求,劉夢雨建議了兩種備選方案來生成所需的合約ID。在最初建議使用區塊高度,事務索引和生成金鑰的syscall計數器之後,又提出了「全域性計數器」的概念。

全域性計數器的優勢在於簡單。每次將合約部署到Neo3中,它都會使用計數器來確定並獲取下一個可用的ID號,與此同時計數器的數字也會遞增。每個新的部署都會重複此過程,以確保每個合約都收到唯一的ID號。

劉夢雨實施了這兩種方案,但是事實證明,全域性計數器最受開發者喜愛,因為它消除了對雜湊衝突的擔憂。但這個方案有個缺點是混淆原生合約與新合約的類別,如果將來需要新增新的本地合約,全域性計數器(以及所有合約ID)將受到影響。

核心開發者Shargon則提出建議,認為原生合約應採用負值,具有遞減的ID(-1,-2,-3 ..等),以便原生合約與新合約都可以使用相同的全域性計數器,互不影響彼此的ID分配。 

儘管「唯一合約ID」最初是為了防止DoS攻擊而設計的,但這也為開發者、第三方服務商提供了許多其他幫助,並有助於減緩區塊的儲存空間。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;