获取另一份合同部署的合同地址

时间:2017-02-14 15:50:26

标签: javascript ethereum solidity

我正在尝试从另一个工厂合同部署合同,然后返回新创建的合同的地址。但它返回的地址是事务哈希而不是契约地址。我相信这是因为当地址被退回时合同尚未开采。当我使用web3部署部署合同时,似乎要等到合同部署之后再输出地址。

工厂合同:

contract Factory {
mapping(uint256 => Contract) deployedContracts;
uint256 numContracts;
function Factory(){
    numContracts = 0;
}

function createContract (uint32 name) returns (address){
    deployedContracts[numContracts] = new Contract(name);
    numContracts++;
    return deployedContracts[numContracts];
}}

这就是我调用createContract函数的方式。

factory.createContract(2,function(err, res){
        if (err){
            console.log(err)
        }else{
        console.log(res)
        }
    });

1 个答案:

答案 0 :(得分:1)

我们今天遇到了这个问题,我们按如下方式解决了这个问题:

在创建新合同时提出一个事件。

然后,一旦块被挖掘,使用事务哈希并调用web3.eth.getTransactionhttp://web3js.readthedocs.io/en/1.0/web3-eth.html#gettransaction

然后查看logs对象,您应该找到新创建的合同及其地址所调用的事件。

注意:这假设您能够更新正在创建的合同的Solidity代码,或者在创建时已经调用此类事件。

相关问题