Contract-Development
從合約地址接收乙太幣的交易
交易是否將乙太幣從合約地址發送到 block.transactions 中列出的普通地址,或者它們是否不易檢測?
如果不在block.transactions中比如何檢測?
所有交易都列在塊中,並且可以使用交易雜湊進行恢復。您可以通過過濾到您要查找的內容來輪詢節點上的更改。此外,如果您從合約中觸發事件,您可以過濾以僅在看到該事件時獲取更新;因此,如果您希望您的合約在每次發送乙太幣時都提醒您,您可以創建一個事件,該事件在呼叫支付函式時發出。
嚴格來說,不存在智能合約發送的交易。每個有效交易都必須由某個私鑰簽名,並且從該私鑰派生的
from
地址成為交易的地址。只要智能合約地址不是從私鑰派生的,就不可能有任何源自智能合約地址的交易。當交易目的地址有一些屬於它的字節碼時,即當交易發送到智能合約地址時,這個字節碼就會被執行。除此之外,字節碼可以將乙太幣從自己的地址發送到另一個地址,也可以呼叫甚至部署其他智能合約。此時,此類呼叫或部署的智能合約的字節碼被執行,並可能反過來呼叫或部署更多的智能合約,等等。
當一個合約上的字節碼呼叫另一個合約時,對於被呼叫的合約來說,這看起來很像發送給它的交易,但這種呼叫實際上不是交易。它沒有交易雜湊或數字簽名,沒有收據,也不包含在區塊中。
所以這樣的呼叫實際上很難檢測到。找到這種呼叫的一種方法是分析在其中執行該呼叫的事務的執行狀態,即觸發相互呼叫的合約鏈的原始事務,最終導致範圍內的呼叫。
另一種也是首選的方式是使用事件。被呼叫的字節碼可能會記錄一些事件,並將其包含在原始交易的收據中。事件被索引並且可能帶有復雜的有效負載,這使得它們易於查找和分析。