Mining

從挖礦接收 ETH 時未呼叫支付函式

  • February 2, 2022

我有一份契約,負責將 ETH 發送到一組註冊地址。當我將 ETH 轉移給它時,該功能執行良好,但是當 ETH 來自礦工時,ETH 不會被分配(不呼叫“payable”函式)。

I)這是預期的行為嗎?(是的,我應該閱讀規範)

II) 當合約從礦工那裡收到 ETH 時,有沒有辦法在合約中執行一些程式碼

此行為是由 EVM 設計的。根據solidity docs

沒有接收 Ether 功能的合約可以接收 Ether 作為 coinbase 交易(又名礦工塊獎勵)的接收者或作為自毀的目的地。合約無法對此類乙太幣轉賬做出反應,因此也無法拒絕它們。這是 EVM 的設計選擇,Solidity 無法解決它。

因此,合約在獲得區塊獎勵時不可能執行任何功能。

要檢測是否收到了塊獎勵,您可以在合約中創建一個餘額變數並在每個payable函式中更新它。如果手動餘額不等於,address(this).balance則要麼已收到塊獎勵,要麼某些合約中的自毀功能已將其餘額發送到該合約。

然後,您可以在鏈下觀察合約餘額並呼叫合約上的某些函式來呼叫您的邏輯。

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