為什麼我的契約部署起來如此昂貴?
我嘗試部署基於 openzeppelin 庫的合約(見下文)。我支付的費用約為 146 美元,契約甚至沒有部署(即它耗盡了 gas )。我覺得這難以置信的高。它確實降低了我對乙太坊的熱情,因為我認為它更像是一個平台,而不是一個 pozi/價值儲存(即比特幣)。
ethscan.io 稱合約因gas 耗盡而失敗。
Warning! Error encountered during contract execution [Out of gas] Value: 0 Ether ($0.00) Transaction Fee: 0.034104011574 Ether ($146.01) Gas Price: 0.00000011368003858 Ether (113.68003858 Gwei) Gas Limit & Usage by Txn: 300,000 | 300,000 (100%) Gas Fees: Base: 104.963834926 Gwei
我做了什麼愚蠢的事情,礦工“偷”了我的費用,還是這是市場價格?
有沒有辦法使用 Go 來估計合約創建/初始化的成本(我猜它在 init 函式中有什麼)?無論如何,我使用乙太坊開發工俱生成的綁定(“github.com/ethereum/go-ethereum/accounts/abi/bind”)使用 Go 部署它
原始碼
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; contract XYZXTESTToken is ERC20 { uint256 private constant TOTAL_SUPPLY = (18000 * 10000000 * (10**18)); constructor() ERC20("XYZXTESTTOKEN", "XYZXTESTTOKEN") { _mint(msg.sender, TOTAL_SUPPLY); } }
我做了什麼愚蠢的事情,礦工“偷”了我的費用,還是這是市場價格?
除了設置相對較低的氣體限制之外,您沒有做任何愚蠢的事情。礦工並沒有竊取你的費用,只是你使用了錯誤的參數,tx 可以成功或失敗,但無論如何都必須支付 gas。
我使用 Remix 部署了您的合約,並且 tx 天然氣成本為:1,154,936
這意味著,是您使用的300,000限制的****3.8倍。
現在我想就我所說的做一點回應,你做了一些愚蠢的事情:沒有確保你會得到你所支付的。這意味著確保您的參數(即,gas 價格/gas 限制)具有允許部署智能合約的值。
只有當您確定一切正常時,您才應該部署到主網,主網不是測試沙箱。
如果您還沒有這樣做,我建議您使用本地區塊鍊和/或測試網,例如 Rinkeby 或 Ropsten。或者,您也可以部署到 L2 解決方案,例如Polygon,其中 gas 價格更實惠。
有幾個開發框架可以簡化開發/測試和部署,例如Truffle、Hardhat或Brownie來引用最容易訪問的框架,但它要麼是 JavaScript 要麼是 Python。
但是,如果您絕對想堅持使用 go 和 go-ethereum 綁定,您可能會對模擬客戶端或使用 go-ethereum 設置本地區塊鏈感興趣。