Gas

我可以將我所有的 Ether 發送到 Payable 功能嗎?還是應該節省一點來支付Gas?

  • February 14, 2018

我對 EVM 的工作原理有很大的疑問,

假設我在 Wei (1 Ether) 中有1000000000000000000的 Ether 餘額,我想將其全部傳遞給應付函式,讓我們呼叫函式 buy():

Contract.buy({ from: '0x0...', value: 1000000000000000000 });

那會奏效嗎?意義; 這本身會扣除 GAS 成本嗎?

或者,相反…我必須自己估算 Gas 成本並從我發送的 Ether 中扣除?例如,如果我估計 50000 的 Gas,我會這樣做:

Contract.buy({ from: '0x0...', value: 999999999999950080, gas: 50000 });

哪種方法是正確的,為什麼?

提前致謝!

編輯(Swift 中的程式碼):

   var options = Veev.options(gas: nil, from: addressFrom)
   let contract = web3.contract(contractABI, at: EthereumAddress(Rinkeby.address))
   let parameters = [EthereumAddress("0x0.."), amountToBuy] as [AnyObject]
   guard let estimatedGas = web3.contract(contractABI, at: EthereumAddress(Rinkeby.address))?.method("buy", parameters: parameters, options: options)?.estimateGas(options: nil) else { return }
   options.gas = estimatedGas
   let value: BigUInt = BigUInt(ether) - BigUInt(estimatedGas) * BigUInt(5000000000) - 1 // 5000000000 is gas Price
   options.value = value

後者。進行交易所需的總乙太幣是amount + gasLimit * gasPriceamount即您發送的乙太幣數量)。因此,您需要留出足夠的乙太幣來支付交易可能花費的最大天然氣成本。

在您需要 50000 天然氣的範例中,您希望發送1 ether - 50000 * 1 gwei並指定 1 gwei 的天然氣價格。

我可以將我所有的 Ether 發送到 Payable 功能嗎?還是應該節省一點來支付Gas?

可以,通過將gasPrice 設置為0。但實時我們不知道執行需要多少時間,這取決於具體情況。我在 etherscan 中看到一些交易的價值是 0。

請參閱以下連結: https ://etherscan.io/tx/0x173fd250d63a62bb407f214ff924b49e1c90593572eab1a8c523783f2aa58ba3

在您的範例中,您可以估計購買()函式的氣體,使用Contract. buy.estimateGas({ from: '0x0...', value: 1000000000000000000})將告訴方法將消耗多少氣體。所以沒有必要假設,但一些開發者抱怨它沒有返回準確的值。最好增加 5-10% 的額外價值。

那是為了在上述方法中更安全的一面,假設您為 exec buy() 估計的 55000 氣體,那麼您需要向方法發送值是1 ether - 55000 * 1 gwei

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