我有一组onlyOwner方法,在部署合同(在合同内创建游戏)时需要正确运行。自动启动状态以进行测试的最佳方法是什么?使用松露,React,Ganache
答案 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.json
,deploy()
,new()
函数和deployed()
的技巧。