Contract-Development

將乙太幣從合約發送到地址時是否需要 gas 費?

  • December 30, 2021

每筆修改區塊鏈狀態的交易都需要消耗氣體。但是,我有一個疑問,想問一下。將乙太幣從合約發送到地址時是否需要 gas 費?如果是,如何實現存款/取款場景?使用者將一些乙太幣存入合約後,他/她可能不會提取相同數量的乙太幣,因為他/她需要支付交易費用。那麼,存款/取款如何運作呢?

它像這樣分解。

首先,有兩種地址,外部擁有(正常)賬戶(EOA)和合約。

每個 EOA 都有一個簽名密鑰,可以在任何時間簽署並向任何它想要的人發送交易,包括契約。

合約沒有簽名密鑰,永遠無法發起交易。如果 EOA 或其他合約發送交易,它們有程式碼並且必須執行它們的功能。

所有交易都以由 EOA 簽署的交易開始。如果它涉及契約,則該契約可能會起作用。簽名者支付汽油費。該合約可能會向另一個合約發送消息,使其發揮作用。簽名者仍然支付汽油費。等等。無論合約和消息鏈有多長,原始簽名者都會支付所有的gas。

假設 Alice 想要存款,然後從一個像 ATM 一樣工作的合約中取款。

首先,Alice 將資金存入合約0x123。合約函式看起來像:

function acceptDeposit() public payable {
 balances[msg.sender] += msg.value; 
}

然後,愛麗絲想要取回她的錢。“退出”模式是一種很好的做法。在契約中,它看起來像:

function withdrawFunds(uint amount) public {
 require(balances[msg.sender] >= amount;
 balances[msg.sender] -= amount;
 msg.sender.transfer(amount);
}

在這兩種情況下,Alice 都會啟動流程,簽署交易並支付 gas。一是“手續費”接受她的押金。然後,“手續費”來處理她的提款。

希望能幫助到你。

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