风险提示:理性看待区块链,提高风险意识!

以太坊合约中一个合约是否可以调用另外一个合约?

2个回答

匿名用户5星评价

2020-05-09 13:23:46

以太坊合约中一个合约是否可以调用另外一个合约?

可以的,参考合约之间的交互。数字货币交易平台币汇。比如我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。我相信这是因为当地址被返回时合约尚未开采。当我使用Web3部署智能合约时,它似乎一直等到智能合约被部署完成后才输出合约地址。

武舷笨6星评价

2020-05-09 13:23:57

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

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


热搜币种 更多

币种价格24H 涨跌幅
  • FTT

    FarmaTrust

    ¥17.61

    2.4923 USDT
    -3%
  • BTC

    比特币

    ¥440,347.47

    62338.61 USDT
    -1.88%
  • CFX

    Conflux Token

    ¥1.31

    0.1852 USDT
    -0.91%
  • XCH

    奇亚

    ¥113.90

    16.1241 USDT
    -7.54%
  • DOGE

    狗狗币

    ¥0.76

    0.1073 USDT
    -5.71%
  • TRX

    波场币

    ¥1.10

    0.156 USDT
    +1.1%
  • FIL

    Filecoin

    ¥26.11

    3.6964 USDT
    -2.2%
  • SOL

    Solana

    ¥1,013.23

    143.44 USDT
    -3.67%
  • SHIB

    柴犬币

    ¥0.00

    1.735E-5 USDT
    -5.81%
  • CELO

    Celo

    ¥4.99

    0.7065 USDT
    -8.96%
  • DYDX

    dYdX

    ¥6.36

    0.9004 USDT
    -0.96%
  • HT

    火币积分

    ¥3.69

    0.5226 USDT
    -4.51%