Solidity

在眾籌合約中實施應付賬款回退功能的正確方法是什麼?

  • April 21, 2022

我正在實施眾籌智能合約以接受乙太幣並呼叫 ERC20 智能合約來分配代幣數量,該數量取決於投資的乙太幣數量。

我聽說僅實施預設應付賬款回退不是正確的方法,因為這不會阻止客戶直接從交易所共享錢包賬戶發送乙太幣。

 function() payable {

 }

那麼,在眾籌合約中實施備份應付(除了在那裡)以便客戶只能通過 MEW、Metamask 和其他私人錢包發送乙太幣的正確方法是什麼?

據我所知,該fallback功能在內部sendstransfers從一個智能合約到另一個智能合約時有 2300 gas 的津貼。發生這種情況是因為sendtransfer沒有設置消耗氣體的機制,因此它們預設限制為 2300(另一方面call,根據需要消耗盡可能多的氣體)。所以他們仍然會觸發程式碼執行,但被呼叫的合約只獲得了 2,300 gas 的津貼,目前僅夠記錄一個事件。

如果您從外部帳戶收到乙太幣,我相信您的sendtransfer. 所以理論上,如果你只接受來自外部賬戶的乙太幣,你可以使用這個fallback方法。我相信最好的做法是對revert任何呼叫fallback並簡單地添加一個購買功能即payable.

希望能幫助到你!

如果您只想啟用此類事務,則還應檢查 tx.origin 以排除對您的回退的任何可能的不同呼叫。

require(tx.origin == msg.sender, “EOA direct transfer not detected”); 

因為你的備份的第一行就足夠了。

另一方面,這也使您的備份無法用於惡意合約的操縱。

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