在线无码中文破解|日本影院一区二区三区|五月激情Av在线|国产香蕉视频一区|国产老熟女AAAA|云霸高清91视频|久久久www视频|在线熟女网站无码视频|国产精品 国产|韩日精品中文字幕

風險提示:理性看待區(qū)塊鏈,提高風險意識!

以太坊合約中一個合約是否可以調(diào)用另外一個合約?

2個回答

匿名用戶5星評價

2020-05-09 13:23:46

以太坊合約中一個合約是否可以調(diào)用另外一個合約?

可以的,參考合約之間的交互。數(shù)字貨幣交易平臺幣匯。比如我正試圖從另一個工廠合約中簽智能合約,然后重新部署新智能合約的地址。然而,它返回的地址是交易哈希值而不是合約地址。我相信這是因為當?shù)刂繁环祷貢r合約尚未開采。當我使用Web3部署智能合約時,它似乎一直等到智能合約被部署完成后才輸出合約地址。

武舷笨6星評價

2020-05-09 13:23:57

如何獲取另外一個智能合約部署的合約地址?

我正試圖從另一個工廠合約中簽智能合約,然后重新部署新智能合約的地址。然而,它返回的地址是交易哈希值而不是合約地址。我相信這是因為當?shù)刂繁环祷貢r合約尚未開采。當我使用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];

}}

下面是調(diào)用createContract函數(shù)的方法:

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.在交易前調(diào)用:

你可以在發(fā)生交易之前進行調(diào)用:

var address = web3.eth.contract(objectFactoryAbi)

.at(contractFactoryAddress)

.createObject.call("object");

一旦這個合約地址執(zhí)行交易那么:

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