如何在truffle中手动创建合约实例
How to manually create the instance of the contract in truffle
假设我有 2 个这样的合同
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;
}
}
我正在尝试为这些合约编写测试用例。
我可以使用迁移文件部署合同 A 并将
获取它的实例。
但是我不知道如何获取合约B的实例,
使用函数 createB()
创建合约后
Ok调用函数createB()后可以在events中获取到合约B的地址,
但不确定实例。
对于这个例子,你可以说我可以单独测试合约B,因为它做的不多。
但在实际情况下,我需要使用来自事件的地址创建一个实例。
这是松露测试文件的一小段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?
*/
})
})
你可以这样尝试
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);
})
})
假设我有 2 个这样的合同
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;
}
}
我正在尝试为这些合约编写测试用例。 我可以使用迁移文件部署合同 A 并将 获取它的实例。
但是我不知道如何获取合约B的实例, 使用函数 createB()
创建合约后Ok调用函数createB()后可以在events中获取到合约B的地址, 但不确定实例。
对于这个例子,你可以说我可以单独测试合约B,因为它做的不多。 但在实际情况下,我需要使用来自事件的地址创建一个实例。
这是松露测试文件的一小段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?
*/
})
})
你可以这样尝试
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);
})
})