Go-Ethereum

在 geth 控制台中創建合約

  • October 2, 2016

我在腳本名稱 contract.js 中有以下程式碼( foo、pwd 和 id 在我的實際腳本中被它們的值替換)

var web3=require('web3');
personal.unlockAccount('id', "pwd")
var aContract = web3.eth.contract([]);
var a = aContract.new(
{
   from: web3.eth.accounts[1], 
   data: 'foo',
   gas: 3000000
}, function (e, contract){
   console.log(e, contract);
   if (typeof contract.address !== 'undefined') {
       console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
   }
})

我想在 geth 控制台中執行這段程式碼,所以我輸入了

loadScript("/usr/username/contract.js")

但我所擁有的只是以下錯誤:

錯誤:TypeError:無法訪問未定義的成員“契約”為假

我知道我沒有定義 ABI,但是當我直接在 geth 控制台中鍵入上面的程式碼時,它就可以工作,然後我可以探勘這個合約(在本地)。

那麼真的有可能使用 loadscript 獲得相同的結果嗎?

您的問題很可能是您重新定義了web3.

web3存在於*開箱即用的 geth 控制台中,*已連接到節點。除非您需要除 geth 使用的特定版本之外的特定版本,否則無需手動添加。在這種情況下,它可能會中斷,因為require('web3')返回 web3 對象的工廠,而不是 web3 本身。

總之,不需要web3就可以試試。

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