Testing

如何檢測合約中的資金轉移?

  • April 6, 2018

我需要(以程式方式)確定契約正確退還了價值。合約使用這個命令:

msg.sender.transfer(msg.value)

當然,我可以在交易之前和之後檢查餘額(這很有效),但我希望我可以直接檢查交易。這可能嗎?

正如這個問題所示,我有點困惑這些“退款交易”的寫法。它們是原始交易的一部分嗎?

Etherscan 將這些稱為“內部交易”,並且該術語似乎已經流行起來。搜尋該術語可能會幫助您發現其他方法。

一些解決方案按個人喜好降序排列:

  1. 理想情況下,solidity 方法應該寫成拋出異常(提供失敗的狀態值)或成功轉移資金。然後,您只需驗證收據中的交易狀態。
  2. 檢查合約中只有在成功傳輸時才會發出的事件。
  3. 將資金接收到您編寫的契約中,該契約在收到資金時發出事件,並監視該事件。
  4. 搞亂交易跟踪,或監控交易前後的餘額。這兩者都有微妙之處,並且容易出錯。

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