使用 geth 控制台和松露部署時出現不同的錯誤
我正在嘗試通過兩種不同的方式部署契約,但我無法成功。
第一種方式:
1.
geth console —rinkeby —rpc —rpcapi db,eth,net,web3,personal —unlock="0x..." 2>>geth.log
我的賬戶上有乙太幣,我輸入了正確的密碼,我確定該賬戶在 eth.accounts 列表中
我用 編譯我的合約
solc
,它給了我二進制程式碼和 abi,我把它放進去變數bin
和abi
. 我放在0x
二進制程式碼之前。
var contract = web3.eth.contract(abi)
4.
var token = myContract.new( {from: eth.coinbase, data: bin, gas: 1000000}, function(e, myContract) { if (e) { console.log(e); } else { if (myContract.address) { console.log ("mined " +myCcontract.address); } } })
它說
錯誤:無法儲存合約程式碼,請檢查您的gas量。
第二種方法是使用松露。我已經成功地將契約部署到 rinkeby 很多次了,但現在我陷入了這個錯誤。
我執行
geth
並解鎖帳戶有我的
truffle.js
:module.exports = {
網路:{
開發:{
主機:“localhost”,
埠:8545,
network_id:“*”,gas:900000},
rinkeby:{
主機:‘127.0.0.1’,
埠:8545,
network_id:4 ,
gas: 4612388, // 用於部署的 Gas 限制
來自:“0xeb1eb48fc3c2756cde3dce8a53472e437062f976” } } };
3.
truffle migrate --reset --network rinkeby
它說
遇到錯誤,放棄。網路狀態未知。手動查看成功的交易。類型錯誤:contract.detectNetwork 不是 /usr/local/lib/node_modules/truffle/build/cli.bundled.js:201861:21 在 /usr/local/lib/node_modules/truffle/build/cli.bundled 的函式。 js:326484:15 在
我的目的是學習如何通過 geth 或 truffle 控制台與合約的功能進行互動。但是……出了問題。請幫我修一下。
如果你完成了這個問題,已經謝謝了
首先嘗試使用 testrpc - https://github.com/ethereumjs/testrpc。
而此錯誤消息“遇到錯誤,保釋。網路狀態未知”表示 geth 無法正常工作或未使用埠 8545 或由於 ip 127.0.0.1 而無法正常工作。
嘗試使用 testrpc。你將有一個很棒的經歷。為了測試目的與合約互動更快
或者,我編寫了一個小庫用於部署,可能對某人有用。它使用 ethers.js(web3.js 的穩定表親)進行部署,它冗長而閃亮:)
const etherlime = require('etherlime'); const ICOTokenContract = require('./build/contracts/ICOToken.json'); const randomAddress = '0xda8a06f1c910cab18ad187be1faa2b8606c2ec86'; const defaultConfigs = { gasPrice: 20000000000, gasLimit: 4700000 } const deployer = new etherlime.InfuraPrivateKeyDeployer('Your Privste KEY', 'ropsten', 'Your infura API key', defaultConfigs); const runICODeployment = async () => { const contractWrapper = await deployer.deploy(ICOTokenContract); const transferTransaction = await contractWrapper.contract.transferOwnership(randomAddress); const result = await contractWrapper.verboseWaitForTransaction(transferTransaction.hash, 'Transfer Ownership'); } runICODeployment()
將它放在一個文件中並使用 node.js 執行它。