Web3js

為什麼呼叫 .at() 比 .deployed() 慢得多?

  • October 7, 2017

我正在嘗試創建一個輔助函式,該函式將允許我在.deployed()對我的合約的呼叫與使用.at(). 第二個呼叫(在下面的程式碼中被註釋掉)非常慢。我每秒針對本地測試網進行大約 1-2 次呼叫(輪詢事件),並且使用第二種方法使 Chrome 保持在 100%。第一種方法大約快 20 倍。為什麼會這樣,我該如何解決?

getContractDeploy: function() {
   contract_deploy = App.contracts.CONTRACTX.deployed();
   //contract_deploy = App.contracts.CONTRACTX.at(contract_address);
 return contract_deploy;
},

如果您使用的是 truffle,那麼您正在使用truffle-contract來管理合約。

查看 的實現at,它會額外呼叫以web3.eth.getCode確保在提供的地址存在合約。

的實現deployed更簡單,它只依賴於合約工件的資訊。

在熱路徑上呼叫不是一個好主意.at(),或者如果地址不經常更改,至少記憶體結果。

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