Ethereum 如何在truffle中手动创建合同实例

Ethereum 如何在truffle中手动创建合同实例,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,假设我有两份这样的合同 A.sol import './B.sol'; contract A { event BCreated(address addressOfB); function createB(){ B b = new B(); BCreated(b); } } B.sol contract B { uint8 value = 5; function getValue() constant ret

假设我有两份这样的合同

A.sol
import './B.sol';
contract A {
    event BCreated(address addressOfB);
    function createB(){
        B b = new B();   
        BCreated(b);
    }
}


B.sol
contract B {    
    uint8 value = 5;
    function getValue() constant returns(uint8){
        return value;
    }
}
var A = artifacts.require("./A.sol");
var B = artifacts.require("./B.sol");
contract('A', (accounts) => {
    it("Value should be 5", async () => {
        let instanceOfA = await A.deployed()
        let resultTx = await instanceOfA.createB({ from: accounts[0] });
        console.log("Address of B: " + resultTx.logs[0].args.addressOfB);

        let instanceOfB = await B.at(resultTx.logs[0].args.addressOfB);

    })
})
我试图为这些合同编写测试用例。 我可以使用迁移文件部署契约A,并将 获取它的实例

但是我不知道如何得到B合同的实例, 使用函数createB()创建合同后

好的,在调用函数createB()之后,我可以在事件中获取合同B的地址, 但我不确定这个例子

对于这个例子,你可以说我可以单独测试契约B,因为它做的不多。 但在实际情况中,我需要使用来自事件的地址创建一个实例

下面是用于truffle测试文件的js代码 在这里我有B的地址

var A = artifacts.require("./A.sol");
contract('A', (accounts) => {
    it("Value should be 5", async () => {
        let instanceOfA = await A.deployed()
        let resultTx = await instanceOfA.createB({ from: accounts[0] });
        console.log("Address of B: " + resultTx.logs[0].args.addressOfB);
        /**
         * How do I create the instance of B now?
         */
    })
})

你可以试着这样做

A.sol
import './B.sol';
contract A {
    event BCreated(address addressOfB);
    function createB(){
        B b = new B();   
        BCreated(b);
    }
}


B.sol
contract B {    
    uint8 value = 5;
    function getValue() constant returns(uint8){
        return value;
    }
}
var A = artifacts.require("./A.sol");
var B = artifacts.require("./B.sol");
contract('A', (accounts) => {
    it("Value should be 5", async () => {
        let instanceOfA = await A.deployed()
        let resultTx = await instanceOfA.createB({ from: accounts[0] });
        console.log("Address of B: " + resultTx.logs[0].args.addressOfB);

        let instanceOfB = await B.at(resultTx.logs[0].args.addressOfB);

    })
})