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

简介: 如何获取另外一个智能合约部署的合约地址?我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。

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

我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。我相信这是因为当地址被返回时合约尚未开采。当我使用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)));

原文《以太坊常见问题和错误》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/7/

另外推荐一些之前的教程:

  • python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。
  • web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
相关文章
|
7月前
|
区块链
关于代币合约项目系统开发DAPP模式方案【源码示例】
以下是一个简单的以太坊代币合约代码示例,它定义了一个名为 `Token` 的代币合约。在实际使用中,请确保您已获得适当的许可并遵循相关法规。
|
7月前
UUPSUpgradeable部署合约和升级合约
UUPSUpgradeable部署合约和升级合约
|
JSON JavaScript 前端开发
以太坊 – 部署智能合约到Ganache
将编译好的智能合约部署到本地的Ganache区块链网络。步骤如下:更新项目的配置文件,修改网络配置连接到本地区块链网络(Ganache)。创建迁移脚本,告诉Truffle如何部署智能合约。运行新创建的迁移脚本,部署智能合约。...
1915 0
以太坊 – 部署智能合约到Ganache
量化合约交易系统开发详情(合约做市开发)丨DAPP交易所秒合约模式源码搭建
量化合约交易系统开发详情(合约做市开发)丨DAPP交易所秒合约模式源码搭建
|
机器学习/深度学习 人工智能 自然语言处理
秒合约开发原理丨秒合约系统开发(详细规则)丨秒合约源码案例部署
秒合约开发原理丨秒合约系统开发(详细规则)丨秒合约源码案例部署
|
存储 供应链 安全
DAPP公链合约代币质押系统开发指南与详情
区块链技术彻底改变了数字格局,为各行业提供安全、透明和去中心化的解决方案
|
算法 测试技术 区块链
合约交易所开发指南:合约交易所搭建基本原理和步骤实现
合约交易所是基于区块链技术构建的去中心化交易平台。它使用智能合约来管理交易和资产。 智能合约开发环境:在进行合约交易所的开发之前,使用开发环境是很重要的。常见的开发环境包括Truffle、Embark、Builder等。这些开发环境提供了一些有用的命令和工具,如编译合约、部署合约、调试合约、运行单元测试等。
|
存储 区块链 数据安全/隐私保护
合约跟单丨合约交易丨秒合约项目系统开发(源码案例)
去中心化:在一个系统中任意节点的权利和义务都是均等的
|
存储 人工智能 安全
区块链DAPP代币合约项目系统开发技术案例及详情/源码功能
  区块链、人工智能、数字孪生、人机交互、物联网等面向数据的新一代信息技术的演进并非偶然,而是从Web2.0向Web3.0演进的技术准备。从技术上来看,元宇宙是基于Web3.0技术体系和运作机制支撑下的可信数字化价值交互网络,是以区块链为核心的Web3.0数字新生态。
|
测试技术 区块链
如何搭建属于自己的一个合约交易所开发WBTC智能合约代码示例
WBTC(Wrapped Bitcoin)是一种 ERC-20 代币,代表以太坊区块链上的比特币。 它是基于智能合约的代币示例,允许在以太坊区块链上创建和传输代币。