Contract-Development
將乙太幣從合約發送到地址時是否需要 gas 費?
每筆修改區塊鏈狀態的交易都需要消耗氣體。但是,我有一個疑問,想問一下。將乙太幣從合約發送到地址時是否需要 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。一是“手續費”接受她的押金。然後,“手續費”來處理她的提款。
希望能幫助到你。