Truffle
誰在為契約中的交易付款?
假設我用我的外部賬戶對合約函式進行了交易,那麼我必須為此交易支付 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。交易的最終成本包括所有這些。