Solidity
通過合約工廠部署如何比直接部署合約便宜?
當我直接部署一個合約時,該交易使用了大約 3,500,000 個 gas。
當我通過合約工廠部署相同的合約時,交易使用了大約 3,000,000 的 gas。
在第一種情況下,我讓 remix IDE 設置氣體量。在第二種情況下,我在 MyEtherWallet 中將氣體限制設置為 4,000,000 氣體。我不認為gas限制應該有所作為,因為交易應該返回任何多餘的部分。
那麼,契約工廠是如何減少gas使用量的呢?
最有可能是 tx 數據。工廠將您創建的合約的字節碼內聯儲存在其字節碼中,因此您無需在創建合約時將字節碼作為 tx 數據提供。這與在沒有工廠的情況下創建它相反,您可能僅在 tx 數據上花費數十萬天然氣。
編譯後的合約(不是工廠)有多少字節?我的猜測是 9-13k 字節,這將佔整個 500k(tx 數據是每個非零字節 68 個氣體和零字節 4 個氣體)。
沒有更多細節是不可能給出答案的,但可能發生的情況是,您使用的 Contract Factory 的程式碼比您編譯的solidity 程式碼更優化。
在本文中,作者嘗試編譯solidity 程式碼或LLL 等效程式碼,發現
在我最近的一次重新實現中,LLL 二進製文件最終比 Solidity 對應的文件小 70%。
這可以解釋你所擁有的差異。