為什麼 Ropsten 消耗的 Gas 比 Rinkeby 多?
我將以下智能合約部署到 Rinkeby 和 Ropsten。
pragma solidity ^0.5.8; contract storeHash{ string private vehicleData; function setVehicleData(string memory _vehicleData) public{ vehicleData = _vehicleData; } }
與IPFS雜湊(QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4)的契約事務會消耗Rinkeby 26719燃氣(https://rinkeby.etherscan.io/tx/0x9d25520ba42f35e23943e9226a031c9fd287d3b9acb1ea0f0b0d9fbe40064991>)和41119上設有通往Ropsten(<https://ropsten.etherscan.io/tx/0xed4863b705986353abda658661c00e682cadb446c36af7c7217f4e51ff050eef) 為什麼會這樣?
從目測來看,差距接近15,000。
SSTORE 操作花費 20,000 gas 將值寫入零槽。也就是說,以前什麼都沒有,但現在有了。區塊鏈的整體狀態有所增加。
另一方面,用一個新值覆蓋一個非零值只需要 5,000 gas。
15,000 的差異解釋了許多交易中成本的大部分可能差異。
如果要寫入的值與儲存中的值相同,則為 NOOP(在 Canstopinople 之後)。這又便宜了很多。
TL; 博士;
做這種事情的函式有最壞情況和最好情況的成本。
string
使用任意長度的 a 會出現較小的差異。確切的成本將隨著解包輸入並將其複製到儲存的迭代過程中涉及的工作而有所不同。建議將重點放在測試方法上,以確保兩種情況下的測試場景相同。我想你會發現這些差異與網路無關,而是與不同場景的執行成本有關。
希望能幫助到你。
目前 Ropsten 和 Rinkeby 使用兩種不同版本的乙太坊協議,因此存在差異是正常的。你可能還記得在 Ropsten 上,它在幾個月前測試了最後一個分支(他們發現了這個錯誤),而在 Rinkeby 上沒有人這樣做。事實上,存在持續存在的差異。