Solidity

MainNet與TestNet中方法呼叫的執行差異

  • July 3, 2018

我正在查看 Etherscan 上的新智能合約送出列表以度過下午,我遇到了這個:

https://etherscan.io/address/0x70bf9df6967dc96156e76cc43b928a7ef02e159a

契約似乎是一個簡單的問答遊戲,但我注意到原始答案可以在這裡一目了然:

https://etherscan.io/tx/0xb479a806fd83e528e635c285b7302a28f0119c4be90ed37232c385bb855f8584

答案是“一部手機”,我認為它很快就會被盜,因為我不能是唯一這樣做的人。我決定把它拿走,聯繫主人,然後把它送回安全的地方。我在 TestNet 上進行了一些測試,看看是否一切正常(您需要發送 1 ETH 才能送出消息),並且一切正常。這是測試合約地址,您可以查看交易以查看我將要遵循的流程:

https://ropsten.etherscan.io/address/0x69e0d22469f654467bcf5c021f3e2162df96e099

如您所見,一切都很順利,所以我決定在主網上進行。然而,即使消息和所有內容都是正確的,它還是吃掉了我的 ETH,什麼也沒發生。我已經接受了 Ether 的損失,但我想知道,為什麼它不起作用,即使它在 TestNet 上起作用?

我寫了一篇博文來更詳細地講述你的不幸經歷。這是發生的事情:

  • 使用他們的第一個帳戶,他們使用此交易部署了一個通過命令傳遞的HiddenQuestionSender合約
  • 12 天后,他們使用他們的第二個帳戶部署了與此交易的X_GAME合約
  • 在那之後,他們使用他們的第一個帳戶告訴HiddenQuestionSender設置問題,StartGame使用 0 乙太幣,並NewQuestion使用此交易更改雜湊值。在通話數據中,您可以看到問題,但看不到答案;但最後沒關係。您還可以找到新的假雜湊:0xaee11ed86334ac3afdac440921f36b90a937dfbc02f43b02a81b763b769fca4a.
  • 緊接著,再次使用他們的第二個賬戶,他們StartGame用 1.03 乙太幣與這筆交易進行了通話。注意TxReceipt Status: Success.
  • 後來,你用這筆交易和 1.01 Ether 試試運氣。你輸給了契約。
  • 在某個時候,他們通過這筆交易收集了他們的獎勵,這也列在了 的內部交易中X_GAME。它是那裡唯一的一個,提醒你已經太遲了。

對於其他閱讀本文的人,可以通過以下方式更早地檢測到可疑的東西web3.eth.getStorageAt(X_GAME.address, slotIndex)

  • 在 slot 1,發現這questionSender不是他們的地址,而是智能合約的奇怪地址:HiddenQuestionSender
  • 在 slot 2,找出responseHash不匹配的web3.sha3(“A phonE”)

你也可以使用 Ganache--fork從主網上安全地測試你自己攻擊的結果。

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