Web3js

創建合約時響應卡住

  • October 7, 2021

我正在使用 web3 在我的本地區塊鍊網路上創建契約。在我的節點上,創建了聯繫人並生成了地址。但是在節點應用程序上,響應被擊中。

這是我的節點程式碼:

const Web3 = require('web3')
const web3 = new Web3(new Web3.providers.HttpProvider("http://192.168.56.103:8000"))
//const web3 = new Web3(ganache.provider());
const compiledFactory = require('./ethereum/build/CampaignFactory.json')

const deploy = async () => {
   accounts = await web3.eth.getAccounts()
   console.log(accounts)

   addr = await web3.eth.personal.newAccount('123456');
   console.log(addr)

   factory = await new web3.eth.Contract(JSON.parse(compiledFactory.interface))
   .deploy({ data: '0x' + compiledFactory.bytecode })
   .send({ from: accounts[0], gas: '1000000' });

   console.log(factory)
}

deploy();

這是來自節點應用程序的控制台,之後卡住了

[ '0xDa8512CBD5c5eaa1213e5A7bEefAf35e9bA2c9EA',
 '0x3F5dD664F0A803d546E087Ee03B69aEb97D428DB',
 '0x7Eb0390DbF70147f37459F5d982456527FdBdb98',
 '0xD9FcDA95002A09d7be394F085fAEC2a1f3d28476' ]
0x2Cc72882b17960e07FCeF04E54A397628075654D

這是來自節點的日誌:

INFO [08-09|03:28:10.027] Submitted contract creation              fullhash=0x63ac15fcc23f19aa44cd225dbacf7ea30069d3e106987daf63a4238caab4b73c contract=0x31F82590e051A224e7d8d63eB54f434d6073aB06

有人可以幫忙嗎?為什麼我沒有在 nodejs 應用程序上獲得地址?

這是我的部署腳本之一。隨意根據需要修改它。

部署智能合約的程式碼 | 部署.js

const Web3 = require('web3');
const { interface, bytecode } = require('./compile');

const web3 = new Web3(new Web3.providers.HttpProvider("http://192.168.56.103:8000"))

const deploy = async () => {
   const accounts = await web3.eth.getAccounts();

   console.log('Attempting to deploy from account', accounts[0]);

   const result = await new web3.eth.Contract(JSON.parse(interface))
     .deploy( { data:bytecode })
     .send( { gas: '5000000', from:accounts[0] });

   console.log('Contract deployed to', result.options.address);
};
deploy();

編譯智能合約程式碼的程式碼(創建介面和字節碼)| 編譯.js

const path = require('path');
const fs = require('fs');
const solc = require('solc');

const contractPath = path.resolve(__dirname, 'contracts', 'Contract.sol');
const source = fs.readFileSync(contractPath, 'utf8');

module.exports = solc.compile(source, 1).contracts[':Contract'];

合約路徑需要包含智能合約 .sol 文件的路徑。在 module.exports.contracts[':Contract'];中 :Contract 需要替換為合約的名稱。

如果您需要更多資訊,請詢問。

如果您使用來自其他提供商(如 rinkeby 等)的測試網,則部署契約的過程需要更長的時間才能獲得返回值。大約 6-8 分鐘

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