Web3js

儲存和檢索合約地址的正確方法是什麼?

  • November 24, 2016

假設我創建了一個新契約:

web3.eth.contract(abi).new({ data: code }, (err, contract) => { ... })

在回調中,我可以獲得contract.address新契約的。然後我可以成功呼叫該契約。

我只是想了解儲存此地址的正確方法應該是什麼?我傾向於將它儲存到我的系統將在啟動時載入的數據庫中。

或者,還有更好的方法?我想我期待一種類似 DNS 的東西,我可以給我的合約一個唯一的名稱和版本,它會映射到地址。這不存在嗎?在遷移步驟中將地址放入數據庫聽起來合理嗎?

理想情況下,您將在整個應用程序中與合約進行互動。您可以將其儲存在database, locally or even hardcode地址中。

如果您儲存在 db 中,您可以在需要時輕鬆處理未來的遷移和合約升級。

如果合約部署是動態的,您可以將部署掛接到一個 Promise 中,並在它返回時保存地址。並為所有部署的合約創建一個全域變數。

您可能想查看iurimatias/embark-framework

其他答案所建議的數據庫或配置文件選項聽起來不錯:即使有一個類似 DNS 的系統資料庫,DApps 最初也必須對其地址進行硬編碼。

您的問題很及時,ENS(乙太坊名稱服務)剛剛部署在測試網(Ropsten)上。

有關快速入門和其他詳細資訊,請參閱ENS wiki 。這裡有一個介紹:

ENS 是乙太坊名稱服務,一個基於乙太坊區塊鏈的分佈式、可擴展的命名系統。

ENS 可用於解析各種資源。ENS 的初始標准定義了乙太坊地址的解析,但該系統在設計上是可擴展的,允許將來解析更多資源類型,而無需升級 ENS 的核心組件。

ENS 部署在 Ropsten 測試網上 0x112234455c3a32fd11230c42e7bccd4a84e02010。

初步討論在這裡

引用自:https://ethereum.stackexchange.com/questions/10216