呼叫Web3J的工厂合同儿童的功能



给定合同Example和工厂合同ExampleFactory

//Example.sol
contract ExampleFactory {
  Example [] public examples;
 function newExample(bytes32 _name) {
   Example example = new Example(_name);
   examples.push(example);
 }
}
contract Example {
  bytes32 public name;
  bool printed;
  event Print(bytes32);
  constructor(bytes32 _name) {
    name = _name;
  }
  function printName() public {
    printed = true;
    emit Print(name);
  }
}

如何在我的truffle test中调用printName?:

//Example.test.sol
artifacts.require("ExampleFactory");
contract("Example", function () {
  beforeEach(async function() {
    this.exampleFactory = await ExampleFactory.new()
    await ExampleFactory.newExample(web3.utils.utf8ToHex("hello"))
  })
  describe("printName()", function () {
    it("PRINTS!", async function() {
     const example = await this.exampleFactory.examples(0);
     await example.printName() // example.printName is not a function!!
    })
  })
})

调用 this.exampleFactory.examples(0)返回儿童合同的地址,web3.js不知道ABI。您需要导入孩子的ABI并实例化地址

的对象
artifacts.require("Example" )
Const example = await Example.at(await this.exampleFactory.examples(0))

最新更新