Web3js
儲存和檢索合約地址的正確方法是什麼?
假設我創建了一個新契約:
web3.eth.contract(abi).new({ data: code }, (err, contract) => { ... })
在回調中,我可以獲得
contract.address
新契約的。然後我可以成功呼叫該契約。我只是想了解儲存此地址的正確方法應該是什麼?我傾向於將它儲存到我的系統將在啟動時載入的數據庫中。
或者,還有更好的方法?我想我期待一種類似 DNS 的東西,我可以給我的合約一個唯一的名稱和版本,它會映射到地址。這不存在嗎?在遷移步驟中將地址放入數據庫聽起來合理嗎?
理想情況下,您將在整個應用程序中與合約進行互動。您可以將其儲存在
database, locally or even hardcode
地址中。如果您儲存在 db 中,您可以在需要時輕鬆處理未來的遷移和合約升級。
如果合約部署是動態的,您可以將部署掛接到一個 Promise 中,並在它返回時保存地址。並為所有部署的合約創建一個全域變數。
其他答案所建議的數據庫或配置文件選項聽起來不錯:即使有一個類似 DNS 的系統資料庫,DApps 最初也必須對其地址進行硬編碼。
您的問題很及時,ENS(乙太坊名稱服務)剛剛部署在測試網(Ropsten)上。
有關快速入門和其他詳細資訊,請參閱ENS wiki 。這裡有一個介紹:
ENS 是乙太坊名稱服務,一個基於乙太坊區塊鏈的分佈式、可擴展的命名系統。
ENS 可用於解析各種資源。ENS 的初始標准定義了乙太坊地址的解析,但該系統在設計上是可擴展的,允許將來解析更多資源類型,而無需升級 ENS 的核心組件。
ENS 部署在 Ropsten 測試網上 0x112234455c3a32fd11230c42e7bccd4a84e02010。
初步討論在這裡。