Truffle

truffle migrate 在重啟 testrpc 後從第一次遷移重啟

  • October 30, 2017

我正在嘗試在 testrpc 上創建某種私有鏈,所以我testrpc -u 0 -d --db /path/to/db每次都用來啟動 testrpc。問題是,如果我重新啟動 testrpc(殺死它並重新啟動它)truffle migrate從頭開始(1_*)重新啟動遷移過程,儘管 testrpc 使用舊的鏈數據庫。有沒有辦法解決這個問題或者這是一個問題?

當您將合約部署到您的私有鏈時。Truffle 儲存鏈的網路 ID,以了解它部署在哪個鏈上。(與目前鏈上的地址)

在 build/contract/yourContract.json 有一個欄位

"networks": {
"1": {  //live network
 "events": {},
 "links": {},
 "address": "0xd77d2a7a728dc7c7c58ac1bcfdfb35934b3ed066"
},
"15": { // network id I manually set
 "events": {},
 "links": {},
 "address": "0x1c10cbe2e883567eea5de1017f3d21b5b2600abb"
},
"1507630284099": { // timestamp generated by testrpc
 "events": {},
 "links": {},
 "address": "0xcdc26c0a2e7f43f4ad571373fc68c1a58ed8a25a"
}
},

您遇到的問題是您沒有使用 testrpc 設置網路 ID。

採用

-i--network-id: 指定 TestRPC 將用於標識自身的網路 ID(預設為目前時間或分叉區塊鏈的網路 ID,如果已配置) doc

testrpc -u 0 -d --db /path/to/db --network-id=15

設置一個 id,這樣當你重新啟動 testrpc 時,你會保留你的數據庫,當你再次執行時,truffle migrate它會告訴你Network up to date.

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