Truffle

呼叫 web3.eth.getAccounts() 什麼都不做 - 沒有錯誤

  • July 21, 2021

我正在嘗試使用web3@1.3.3and獲取所有帳戶@truffle/hdwallet-provider@1.2.2。我正在HDWalletProvider使用Infura。我在後端(Node.js v14.15.5)上執行此程式碼。這是我目前擁有的程式碼:

const HDWalletProvider = require('@truffle/hdwallet-provider');
const Web3 = require('web3');

const provider = new HDWalletProvider({
 mnemonic: {
   phrase: '... 12 words ...'
 },
 providerOrUrl: 'https://rinkeby.infura.io/v3/PROJECT_ID'
});

const web3 = new Web3(provider.engine);

const deploy = async (contractName) => {
 try {
   console.log('checkpoint 1');
   web3.eth.getAccounts().then(function(e) {
     console.log('checkpoint 2');
   })
   .catch(function(err) {
     console.log('checkpoint 3');
   });
 } catch (err) {
   console.log('Checkpoint 4');
 }
};

deploy('myContract');

當我執行程式碼時,唯一列印到控制台的是checkpoint 1. 沒有錯誤或異常,沒有跡象表明有什麼問題。有人可以給我一個提示我做錯了什麼嗎?為什麼getAccounts不工作?

編輯

我也嘗試了以下程式碼(根據smarteasy 的建議),但它也不起作用。它只列印checkpoint 1

const deploy = async (contractName) => {
 try {
   console.log('checkpoint 1');
   const accounts = await web3.eth.getAccounts();
   console.log('checkpoint 2');
 } catch (err) {
   console.log('checkpoint 3');
 }
};

我認為您需要將deploy()功能包裝在async

(async () => {
   deploy('myContract');
})();

一般來說,我更喜歡使用Truffle進行聯繫人測試和部署。

它被聲明為非同步,所以使用等待。常量帳戶 = 等待 web3.eth.getAccounts();

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