首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >contract.new函数与contract.deployed函数的区别

contract.new函数与contract.deployed函数的区别
EN

Ethereum用户
提问于 2021-01-31 09:34:37
回答 1查看 145关注 0票数 0

我创建了一个基本的松露项目,我正在编写自动化测试。

有两种方法可以实例化要测试的智能契约,我想了解这两种方法之间的区别:

代码语言:javascript
复制
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();
  });

它在这两种情况下都有效,但我想了解新的和部署的之间的区别。

谢谢

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-01-31 10:23:34

.new()指示它部署契约的一个实例。

.deployed()会在活动网络上返回已部署的契约,这是一个曲折的过程。您可以在想要部署合同的UI或nodejs应用程序中使用这一点,但是truffle test使用沙箱来防止测试在生产合同上涂鸦。因此,test继续部署一个新的,就像new()一样,它假装是已部署的契约。

就我个人而言,我的习惯是使用new(),所以我知道它是一个新的实例,而不依赖于那些总是按预期工作的花招。在我看来,这种方法更明确,也不太容易受到未来破坏的变化或干扰本身的影响。

这种行为是有充分理由的。开发人员可能养成在任何地方使用deployed()的习惯。在测试中,它可能导致麻烦,所以沙箱的想法使他们远离麻烦。我把这次拦截当作紧急断路器,这不应该是预防灾难的主要手段或唯一手段,所以new(),因为这才是我真正想要的。

在实践中,工作和结果基本上是一样的。也许一个善良的灵魂会融入微妙的差异,如果存在的话。

希望能帮上忙。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/92952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档