为Solidity项目构建React前端

时间:2018-08-05 16:30:47

标签: reactjs solidity truffle

我有一组onlyOwner方法,在部署合同(在合同内创建游戏)时需要正确运行。自动启动状态以进行测试的最佳方法是什么?使用松露,React,Ganache

1 个答案:

答案 0 :(得分:0)

假设您进行了这样的迁移,并且文件名为2_cat.js

var Cat = artifacts.require("./Cat.sol");

module.exports = function(deployer) {
  deployer.deploy(Cat);
};

进行上述迁移将根据您提供的--network标志(即truffle migrate --network development)将Cat合同部署到网络中。

您还将在build/contracts文件夹中找到一个文件。该文件应为Cat.json,您将找到一个类似这样的块:

  "networks": {
    "xxx": {
      "events": {},
      "links": {},
      "address": "0x...",
      "transactionHash": "0x..."
    }
  }

address是已部署的Cat合同的地址。您可以使用该地址并在新的终端中启动truffle console来开始与之交互。

例如,要读取Cat合同中的内容,您可以执行以下操作:

c = Cat.at("0x_put_address_here")
c.method_name.call()

要编写某些内容(更改合同状态),您可以执行以下操作:

c = Cat.at("0x_put_address_here")
c.method_name(arg1, arg2)

如果您需要从特定地址发送该交易,则可以执行以下操作:

c = Cat.at("0x_put_address_here")
c.method_name(arg1, arg2, {from: "0x_account_address"}) // for example, the owner

确保这是一个帐户地址。不是合同地址。当然,该帐户需要有一些以ETH支付的汽油费。

好的,那是设置合同状态的手动过程。为此,您可以使用truffle exec命令并传递JS文件路径。

例如,该JS文件可以是这样的:

let Cat = artifacts.require("./Cat");

module.exports = async function() {
  let c = await Cat.deployed()
  await ct.method_name(arg1, arg2, {from: "0x_account_address"})
}

将其保存在Truffle项目的根目录或目录中。然后,在您的终端中运行以下命令:

$ cd /path/to/your/truffle/project/root
$ truffle exec path/to/that/js/file.js --network development

运行上述命令后,您的合同状态应更新。 deployed()函数将去查找build/contracts/Cat.json文件,并在address中取出networks值。

类似于c = Cat.at("0x_put_address_here")。但是,它将在您每次更新和部署该合同时为您巧妙地找到Cat地址并为您创建合同实例,而无需您对Cat地址进行硬编码。

这里要记住的最重要的事情是,您需要首先运行truffle migrate命令。否则,address的{​​{1}}中的networks值将不会更新,您可能正在更新旧合同。

更糟糕的是,您可能会尝试创建由于没有Cat.json文件而尚未部署的合同实例。

希望这会有所帮助。我还发布了一些有关here中的build/contracts/Cat.jsondeploy()new()函数和deployed()的技巧。