Web3Js 合约部署从未解决承诺或从未退出



>我正在尝试使用 infura、metamask、Web3 在 Ropsten 测试网络上部署合约。它得到部署,但承诺永远不会得到解决,或者功能没有退出。我认为它不断向我返回确认块。我将如何退出发送函数或解决承诺?

const fs = require('fs')
const Web3 = require('web3')
const HDWalletProvider = require('truffle-hdwallet-provider')
deploy()
function deploy() {
const provider = new HDWalletProvider(
'mnemonic',
'https://ropsten.infura.io/v3/ID'
)
const web3 = new Web3(provider)
var contractData = fs.readFileSync('../../build/contracts/Testcontract.json');
var contract = JSON.parse(contractData);
var abi = contract['abi'];
var bytecode = contract['bytecode'];
var testContract = new web3.eth.Contract(abi);
var account = 'ACCOUNT_NUMBER';
testContract.deploy({
data: bytecode,
arguments: ['SenderAlice', 'ReceiverBob', 120]
})
.send({
from: account,
gas: 4000000
}, function (error, transactionHash) {
}).once('error', function (error) {
console.log('error', error);
}).once('transactionHash', function (transactionHash) {
console.log('transactionHash', transactionHash);
}).once('receipt', function (receipt) {
console.log('receipt', receipt.contractAddress);
}).once('confirmation', function (confirmationNumber, receipt) {
console.log('confirmation', confirmationNumber);
});
}

使用 async/await。

变化::

  • 将"异步"放在部署函数之前
  • 在testContract.deploy之前放置"await">
  • 添加 process.exit(( 以返回到控制台

const fs = require('fs')
const Web3 = require('web3')
const HDWalletProvider = require('truffle-hdwallet-provider')
deploy()
async function deploy() {
const provider = new HDWalletProvider(
'mnemonic',
'https://ropsten.infura.io/v3/id'
)
const web3 = new Web3(provider)
var contractData = fs.readFileSync('./build/contracts/Transfer.json');
var contract = JSON.parse(contractData);
var abi = contract['abi'];
var bytecode = contract['bytecode'];
var testContract = new web3.eth.Contract(abi);
var account = '0x0Fb80359dD096A1Ec1FbfDC07ddEBc2003272b0c';
await testContract.deploy({
data: bytecode
})
.send({
from: account,
gas: 4000000
}, function(error, transactionHash) {
}).once('error', function(error) {
console.log('error', error);
}).once('transactionHash', function(transactionHash) {
console.log('transactionHash', transactionHash);
}).once('receipt', function(receipt) {
console.log('receipt', receipt.contractAddress);
}).once('confirmation', function(confirmationNumber, receipt) {
console.log('confirmation', confirmationNumber);
});
process.exit();
}

最新更新