Solidity

Truffle 和 Ganache 生成的帳戶是什麼?Truffle 遷移究竟是如何完成的?

  • October 27, 2021

我有幾個關於 Truffle、Ganache 和測試的問題:

  1. 當我執行truffle develop並獲得 10 個帳戶和 10 個私鑰時,它們是代表我在錢包中的帳戶還是其他使用者?例如,它們是否應該代表 中顯示的內容msg.sender,即我自己,或者我可以通過發送資金或在我的智能合約中處理它們來與之互動的帳戶。
  2. Ganache 上的 10 個帳戶與問題 #1 中的 10 個帳戶有何不同?Ganache 上的這 10 個賬戶是代表我錢包裡的賬戶還是其他使用者的賬戶?HTTP://127.0.0.1:7545除了 Ganache 的帳戶打開而 Truffle 生成的帳戶打開之外,它們是否相同http://127.0.0.1:9545/
  3. 當我執行 Mocha 測試時,accounts作為參數傳遞的那些是否代表我自己錢包中的帳戶?例如,它們是由 生成的 10 個帳戶truffle develop嗎?
contract("Some test", async (accounts) => {
 console.log(accounts)
});
  1. 有人說“遷移合約有助於跟踪哪些遷移已經執行。所以過程是創建一個增加數量的新遷移文件並部署只需執行 truffle migrate。” 遷移是否類似於對不同合約進行版本控制?
module.exports = function (deployer) {
 deployer.deploy(ASmartContract); // is this migrating or deploying?
};
Where are different versions stored and selected is the above process?
  1. 我看過一些部署合約的測試:
let instance = await SomeSmartContract.deployed();

而其他測試只是通過其建構子實例化它而不部署:

let someSmartContract = await SomeSmartContract.new();

兩者有什麼區別嗎?

  1. 我了解到 Solidity 編譯器將合約定義編譯成兩件事:準備部署的字節碼和 ABI。1)是否只需要在更改 Solidity 合約或其他東西(如前端程式碼或測試)時進行編譯?1) 每次在執行測試之前是否需要編譯,或者在部署/遷移之前只需要編譯一次?2) 命令“truffle migrate –reset”是否也在遷移前自動編譯?

0x000...1Ganache預設為私鑰分配 10 個帳戶0x000...a

您顯然不想在實際部署中使用這些帳戶,因為每個人都知道這些私鑰,它們很可能會受到持續監控,並且每當有人將乙太幣轉移到其中任何一個時,它遲早會被轉出。

您可以通過聲明所需的一組私鑰來覆蓋此配置,例如:

ganache-cli
   --account=0x00000000000000000000000000000000000000000000000000000000deadbeef,99999999999
   --account=0x00000000000000000000000000000000000000000000000000000000cafebabe,99999999999

但是出於測試目的,沒有理由不使用預設的私鑰集。

也就是說,除非您在任何測試中需要超過 10 個帳戶。

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