从javascript访问另一个智能合约中包含的一个智能合约

时间:2019-04-18 22:07:19

标签: javascript blockchain ethereum solidity truffle

我正在尝试使用Truffle开发dApp,并想测试我的智能合约。合同中包含第二个合同,如下所示:

pragma solidity >=0.4.21 <0.6.0;

contract SubContract {
    uint public foo;

    constructor() public {
        foo = 0;
    }
}

contract MainContract {
    SubContract public contract;

    constructor() public {
        contract = new SubContract();
    }
}

然后我要像这样测试Java中的合同:

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

contract("MainContract", function(accounts) {

  it("initializes SubContract contract", function() {
    return MainContract.deployed().then(function(instance) {
      return instance.contract;
    }).then(function(subContractInstance) {
       return subContractInstance.foo();
    }).then(function(foo) {
      assert.equal(foo.toNumber(), 0);
    });
  });
});

如果我随后尝试按原样运行此测试,则表明无法访问foo()的成员函数undefined。如果在测试中将其从instance.contract更改为instance.contract(),即使没有其他字段通过getter方法访问,它也会告诉我没有函数contract()。我在这里缺少什么才能访问SubContract实例?

0 个答案:

没有答案