我创建了一个基本的松露项目,我正在编写自动化测试。
有两种方法可以实例化要测试的智能契约,我想了解这两种方法之间的区别:
const SimpleStorage = artifacts.require("./SimpleStorage.sol");
contract("SimpleStorage", accounts => {
beforeEach( async () => {
// Way 1:
this.instance = await SimpleStorage.new({ from: accounts[0] });
// Way 2:
this.instance = await SimpleStorage.deployed();
});它在这两种情况下都有效,但我想了解新的和部署的之间的区别。
谢谢
发布于 2021-01-31 10:23:34
.new()指示它部署契约的一个实例。
.deployed()会在活动网络上返回已部署的契约,这是一个曲折的过程。您可以在想要部署合同的UI或nodejs应用程序中使用这一点,但是truffle test使用沙箱来防止测试在生产合同上涂鸦。因此,test继续部署一个新的,就像new()一样,它假装是已部署的契约。
就我个人而言,我的习惯是使用new(),所以我知道它是一个新的实例,而不依赖于那些总是按预期工作的花招。在我看来,这种方法更明确,也不太容易受到未来破坏的变化或干扰本身的影响。
这种行为是有充分理由的。开发人员可能养成在任何地方使用deployed()的习惯。在测试中,它可能导致麻烦,所以沙箱的想法使他们远离麻烦。我把这次拦截当作紧急断路器,这不应该是预防灾难的主要手段或唯一手段,所以new(),因为这才是我真正想要的。
在实践中,工作和结果基本上是一样的。也许一个善良的灵魂会融入微妙的差异,如果存在的话。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/92952
复制相似问题