从 web3js 调用 Factory 合约的子函数
Posted
技术标签:
【中文标题】从 web3js 调用 Factory 合约的子函数【英文标题】:Calling function in child of Factory contract from web3js 【发布时间】:2019-07-08 18:41:19 【问题描述】:给定一份合同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!!
)
)
)
【问题讨论】:
【参考方案1】:调用this.exampleFactory.examples(0)
返回子合约的地址,web3.js不知道ABI。
需要导入孩子的ABI,并用地址实例化一个对象
artifacts.require("Example" )
Const example = await Example.at(await this.exampleFactory.examples(0))
【讨论】:
以上是关于从 web3js 调用 Factory 合约的子函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 web3js 和 galanche 调用具有价值的以太坊智能合约
java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)
java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)