以太坊中如何獲取另外一個智慧合約部署的合約地址?
如何獲取另外一個智慧合約部署的合約地址?
我正試圖從另一個工廠合約中籤智慧合約,然後重新部署新智慧合約的地址。然而,它返回的地址是交易雜湊值而不是合約地址。我相信這是因為當地址被返回時合約尚未開採。當我使用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/
另外推薦一些之前的教程:
相關文章
- 如何打造安全的以太坊智慧合約
- 以太坊智慧合約gas如何估計?
- 以太坊蜜罐智慧合約分析
- 使用Remix編譯和部署以太坊智慧合約REM編譯
- 以太坊智慧合約升級策略
- 以太坊智慧合約-猜數字
- 使用truffle部署以太坊智慧合約到區塊鏈區塊鏈
- 以太坊智慧合約call注入攻擊
- 如何取消以太坊智慧合約授權,防止被黑客盜取Token?黑客
- 區塊鏈——以太坊、智慧合約簡介區塊鏈
- 以太坊智慧合約 Hexagon 存在溢位漏洞Go
- 技術工坊|深度探索以太坊智慧合約(深圳)
- 以太坊智慧合約開發第四篇:實現Hello World智慧合約
- 以太坊教程:搭建環境、編寫編譯一個智慧合約編譯
- olidity語言開發以太坊智慧合約中的繼承繼承
- 什麼是以太坊?什麼是智慧合約?
- eth以太坊智慧合約交易平臺開發
- 以太坊智慧合約開發第七篇:智慧合約與網頁互動網頁
- 以太坊智慧合約開發環境搭建以及第一個Dapp開發環境APP
- 區塊鏈2.0以太坊智慧合約solidity之helloworld區塊鏈Solid
- 【精通以太坊】——第九章 智慧合約安全
- 以太坊智慧合約開發第二篇:理解以太坊相關概念
- iOS 部署智慧合約iOS
- 第九課 如何除錯以太坊官網的智慧合約眾籌案例除錯
- 以太坊常見合約型別及其用途型別
- 採用以太坊智慧合約技術的報名系統原始碼原始碼
- 區塊鏈之--2小時構建以太坊智慧合約區塊鏈
- 以太坊智慧合約開發第五篇:字串拼接—Solidity字串Solid
- 第三課 如何實現以太坊最簡智慧合約“Hello World”的執行
- Conflux與以太坊合約開發工具區別UX
- Polygon馬蹄鏈在以太坊上的智慧合約開發應用Go
- 智慧合約開發(3)—— 以太坊虛擬機器(EVM)基礎虛擬機
- 區塊鏈100講:淺析以太坊網路智慧合約原理區塊鏈
- 【區塊鏈】實戰·以太坊智慧合約程式設計引導區塊鏈程式設計
- 富士通推出新技術檢測以太坊智慧合約漏洞
- 以太坊智慧合約開發第六篇:truffle開發框架框架
- 以太坊開發實戰學習-合約安全(八)
- 通過Mist部署智慧合約