Web3js

以程式方式保存已送出合約的合約地址

  • April 17, 2018

我了解以下 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});

// 這裡可以確認它的地址確實是你之前計算的那個。

不要忘記通過使用非同步呼叫來改進這個展示程式碼。

引用自:https://ethereum.stackexchange.com/questions/11798