Truffle

誰在為契約中的交易付款?

  • August 9, 2018

假設我用我的外部賬戶對合約函式進行了交易,那麼我必須為此交易支付 gas。

如果合約中的函式現在自己進行交易以向其他合約寫入內容,那麼誰為此付費?

我在我的truffle develop環境中對此進行了測試,看起來我的帳戶只是為第一個契約的交易支付了費用,而不是為第二次交易支付了費用。

我之前也沒有向第一個合約發送任何乙太幣。但第二筆交易也奏效了。

  • 合約交易是免費的嗎?
  • 或者這只是我的測試環境中的一種特殊行為,以使事情變得更容易?

編輯:

合約進行了一個簡單的交易,如下所示:

contract First {
   Second secondContract;
   uint test;

   function setSomething(uint _testValue) external {
       secondContract.set(_testValue); //also set a uint within contract 2
       test = _testValue;
   }
}

如果我在測試中添加以下行,結果是 0 Ether,因為我從未將 Ether 發送到該合約。

console.log(`Contract balance: ${web3.fromWei(web3.eth.getBalance(firstContact.address))}`);

測試仍然有效,如果我從第二份契約中讀取價值,我也會得到正確的價值。

您的交易消耗的氣體是在執行您的呼叫期間使用的總氣體Contract A。如果 A 對另一個合約進行呼叫(或委託呼叫),則該合約消耗的 gas 也會添加到您的交易消耗的 gas 中。

如果您查看此類交易的Parity 跟踪,您可以看到呼叫的各種其他合約,以及呼叫使用了多少 gas。交易的最終成本包括所有這些。

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