Web3js
以程式方式保存已送出合約的合約地址
我了解以下 web3js 程式碼塊的工作原理,改編自此處:
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethcontract
但是如何以程式方式保存合約地址呢?我想,可以打開一個文件並將其保存在回調中,但不是這樣。=:)
而且我不相信myContractReturned標識符對我們有幫助;鑑於 JavaScript 的非同步特性(更不用說探勘延遲)。甚至如何使用它?
這是一個學術問題(因為無法保證甚至會生成地址),但對社區中的朋友做了什麼(或想法)感到好奇。謝謝!
–
var myContractReturned = MyContract.new(param1,param2, { from:mySenderAddress, data:bytecode, gas:gasEstimate}, function(error, myContract){ if(!error) { if(!myContract.address) { // Step-1: Runs on contract submission/deployment. console.log(myContract.transactionHash) } else { // Step-2: Runs after contract is deployed. console.log(myContract.address) } } });
合約的地址是根據部署者的地址和交易隨機數計算出來的。您無需等待合約被探勘即可獲得。
在 NodeJs 中,類似的事情會做:
var ethUtil = 需要 ('ethereumjs-util'); var currentNonce = web3.eth.getTransactionCount(myAccount); var futureAddress = ethUtil.bufferToHex(ethUtil.generateAddress(myAccount, currentNonce)); // futureAddress 是你在下面部署的合約的地址 var MyContract = web3.eth.contract(abiArray); var contractInstance = MyContract.new([contructorParam1] [, contructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000}); // 這裡可以確認它的地址確實是你之前計算的那個。
不要忘記通過使用非同步呼叫來改進這個展示程式碼。