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

问题描述 投票:0回答:1

我正在尝试使用infura,metamask,Web3在Ropsten测试网络上部署Contract。它得到了部署,但是承诺从未得到解决,或者功能没有退出。我认为它会一直退还给我确认框。我将如何退出发送功能或解决承诺?

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);
        });
}
blockchain ethereum web3js
1个回答
0
投票

使用异步/等待。

changes ::

  • 在部署功能之前放置“异步”
  • 在testContract.deploy之前输入“等待”
  • 添加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();

}
© www.soinside.com 2019 - 2024. All rights reserved.