8

我试图了解artifacts.require应该如何使用。我已经看到将其描述为用于迁移和测试的标准段落。由此我推断,在进行迁移或运行测试时,truffle 可执行工具会自动定义全局范围artifacts及其方法。require但是,我正在使用一些artifacts.require在任何迁移或测试的上下文之外使用的代码,相反,此代码只需要执行通常的atnew. 但是,在此上下文中,对象artifacts未定义。

我这里有正确的图片吗?这是适当的使用artifacts.require吗?如果是这样,必须做些什么才能使其在迁移和测试之外定义?

感谢您的任何建议!

4

1 回答 1

16

artifacts.require 真的不打算在测试之外使用。这是它的定义:https ://github.com/trufflesuite/truffle-core/blob/3e96337c32aaae6885105661fd1a6792ab4494bf/lib/test.js#L240

在生产代码中,您应该使用 truffle-contract https://github.com/trufflesuite/truffle-contract将编译后的合约加载到您的应用程序中

这是一个简短的示例(来自http://truffleframework.com/docs/getting_started/packages-npm#within-javascript-code并参见 http://truffleframework.com/docs/getting_started/contracts#making-a-transaction

var contract = require("truffle-contract");
var contractJson = require("example-truffle-library/build/contracts/SimpleNameRegistry.json");
var SimpleNameRegistry = contract(contractJson);
SimpleNameRegistry
  .deployed()
  .then(function(instance) {
     return instance.setRegistry(address);
   })
  .then(function(result) {
    // If this callback is called, the transaction was successfully processed.
    alert("Transaction successful!")
  })
  .catch(function(e) {
    // There was an error! Handle it.
  });
于 2017-09-12T13:14:45.590 回答