gpt4 book ai didi

ethereum - 如何在松露中手动创建合约的实例

转载 作者:行者123 更新时间:2023-12-04 19:28:27 25 4
gpt4 key购买 nike

说我有 2 个这样的契约(Contract)

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;
}
}

我正在尝试为这些契约(Contract)编写测试用例。
我可以使用迁移文件部署契约(Contract) A 并将
获取它的实例。

但是我不确定如何获得契约(Contract)B的实例,
使用函数 createB() 创建合约后

好的,我可以在调用函数 createB() 后在事件中获取合约 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);

})
})

关于ethereum - 如何在松露中手动创建合约的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com