Solidity

即使沒有實際傳輸,也會發出傳輸事件

  • May 2, 2021

我是智能合約的新手,並試圖理解它,以便我可以檢測到通過智能合約向我的使用者進行的乙太幣轉賬。

我知道我可以找到主題發出的事件

$$ $$. 但是對於那些我沒有程式碼但我可以從主題中推斷出來的契約$$ $$發出了 Transfer 或 AssetWithdrawal 等事件,我如何確定在發出 Transfer 事件時發生了實際的資產轉移(因為我沒有該契約的程式碼) 謝謝你的幫助。

你只需要相信契約。這個想法是合約的程式碼是公開的(我的意思是字節碼),所以每個人都可以分析它並決定是否信任它。現實情況是字節碼是不可讀的,因此人們改為分析原始碼,然後確保編譯該原始碼產生的字節碼與發佈在鏈上的字節碼完全相同(這里人們假設編譯器產生的字節碼在與原始碼中編寫的方式相同,即信任編譯器)。此外,人們通常將後者的檢查委託給 [Etherscan.io} 1

因此,儘管理論上智能合約應該允許去信任的生態系統,但在嚴酷的現實中,人們仍然必須信任 Solidity 編譯器的開發人員和Etherscan.io的管理員。

這種情況可以通過使用人類可讀的字節碼來解決。也許有一天會在某些區塊鏈中實現。

我有點不確定你的意思是乙太幣轉賬還是(ERC20)代幣轉賬。乙太幣轉賬不會發出任何事件(除非某些合約碰巧在收到乙太幣時發出)。如果您在沒有合約的情況下在 EOA(外部擁有的賬戶)之間轉移乙太幣,那麼肯定不會發出任何事件。

因此,讓我為這兩種情況提供一個答案,以防萬一。

這很容易。您不能依賴任何發出的事件,但您可以簡單地查看事務並查看它是否附加了相關值。乙太幣總是與value欄位一起轉移(你可以在這裡看到一個例子:https ://etherscan.io/tx/0x94cd1f32992d07810d2ccadf8839fa3098e2883e16ab0e7163a5d0b255d3539e )

(ERC20) 代幣

如果您談論的是 ERC20 代幣,它們通常應該Transfer在代幣轉移時發出事件。但是,無法確定他們是否總是這樣做(因此完全符合 ERC20)。

如果你想確定你不能信任這個事件。您必須檢查實際的代幣轉移。即使這樣也可能有點棘手:您要麼必須比較交易前後的餘額,要麼嘗試分析合約字節碼和發送的數據,看看它是否觸發了代幣轉移。這樣的分析可能相當……困難。

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