主页 > imtoken安装地址 > 如何获取以太坊中另一个智能合约部署的合约地址?

如何获取以太坊中另一个智能合约部署的合约地址?

imtoken安装地址 2023-02-18 05:43:30

如何获取另一个智能合约部署的合约地址?

我正在尝试从另一个工厂合同中签署智能合同以太坊智能合约查询,并重新部署新智能合同的地址。 但是,它返回的地址是交易哈希而不是合约地址。 我相信这是因为返回地址时合约尚未开采。 当我使用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)
        }
    });

可以参考下面的例子以太坊智能合约查询,获取智能合约地址的方式有很多种:

contract Object {
    string name;
    function Object(String _name) {
        name = _name
    }
}
contract ObjectFactory {
    function createObject(string name) returns (address objectAddress) {
        return address(new Object(name));
    }
}

1.存储地址并在需要时返回:

将地址作为属性存储在智能合约中,并使用普通的 getter 方法检索它们。

contract ObjectFactory {
    Object public theObj;
    function createObject(string name) returns (address objectAddress) {
        theObj = address(new Object(name));
        return theObj;
    }
}

2.交易前电话:

您可以在交易发生之前调用它:

var address = web3.eth.contract(objectFactoryAbi)
    .at(contractFactoryAddress)
    .createObject.call("object");

一旦这个合约地址执行了交易,那么:

var txHash = web3.eth.contract(objectFactoryAbi)
    .at(contractFactoryAddress)
    .createObject("object", { gas: price, from: accountAddress });

3.计算未来的合约地址

您还可以像这样计算未来的智能合约地址:

var ethJsUtil = require('ethereumjs-util');
var futureAddress = ethJsUtil.bufferToHex(ethJsUtil.generateAddress(
      contractFactoryAddress,
      await web3.eth.getTransactionCount(contractFactoryAddress)));

摘自原文《以太坊常见问题与错误》:

也推荐一些以前的教程: