Contract-Development

Contract.deployed() 沒有按預期工作

  • August 30, 2019

我使用 Truffle 來測試合約。當我使用 Contract.deployed() 並獲取地址時,例如:

  • 在第一個測試中,合約的地址是 0x07D899846146b3503dE9D9Dc36B94C2e428eA434
  • 在第二個中,合約的地址是 0xF79f3B32b78ebD07B2E661b52e9CF374e311f1d5

另一個問題是,似乎每次我測試契約時,它的狀態都會重新初始化。

似乎Contract.deployed()create 的工作方式類似於Contract.new(),它為每個測試創建一個新的契約實例。

哪個會導致這個問題?

實際上我的許多類似問題還沒有回答(即使在 truffle 官方論壇上 80% 的問題也沒有解決),這清楚地表明要麼 truffle 開發人員失去了對項目的控制權意味著修補一方在另一方產生問題,或者他們離開了這個項目作為孤兒,所以不要指望你的問題有任何合乎邏輯的明確答案,我在很多地方問過簡單的問題,沒有人提到這一點,有人嘗試過,但在這里和那裡談論但不是重點,所以我希望這個他將是您問題的完美答案,謝謝

在為 Truffle 編寫測試時,您使用contract()函式。如文件中所述,此函式重新執行您的遷移腳本並Contract.deployed()返回遷移期間部署的合約實例。

您可以beforeEach()在那裡使用和部署新合約(可能會添加一些初始化事務)。這種方式更加明確和清晰,您總是可以看到您使用的是重新部署的契約還是使用過的契約。

您不需要總是為測試使用相同的合約地址,因為您可以使用這些函式返回的合約實例,如果您需要合約地址,您可以通過(可能)instance.address或類似的方式訪問它。有關更多詳細資訊,請參閱truffle-contract 文件

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