不充足的资金。您尝试从中发送交易的帐户没有足够的资金。需要 892413000000000 并得到:0

Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 892413000000000 and got: 0

我正在尝试使用 web3 和 nodejs 部署 solidity 合约,但我在所有测试网上都收到错误消息: 如果我尝试在本地 testrpc 上 运行,一切正常。 您能否发现代码中可能导致此错误的任何错误,或者测试网是否存在问题?

const path = require('path');
const fs = require('fs');
const solc = require('solc');
var Web3 = require('web3');

// Infura test network (kovan)
var web3 = new Web3(new Web3.providers.HttpProvider('https://kovan.infura.io/v3/3e0f68cb39c64417b15cf55e486479dd'));
var myAddress = '0x362aa2Bf4b6fB733C4EF41F4d2833E8e5aDc54ed';
var myPrivateKey = new Buffer('a288c7c873f09e96b7f0e404759288606e2ffc0edf58874aeb5a0fe4bcd9c262', 'hex')

// Compile contract from file
const contractPath = path.resolve(__dirname, 'contracts', 'HDS.sol');
const contractSourceCode = fs.readFileSync(contractPath, 'UTF-8');
const compiledContract = solc.compile(contractSourceCode, 1).contracts[':HDS']
var newContractAddress = web3.utils.toChecksumAddress(web3.utils.randomHex(20));

// Create a transaction
var rawTx = {
    from: myAddress,
    nonce: web3.utils.toHex('13'),
    gasPrice: web3.utils.toHex(web3.utils.toWei('1', 'gwei')),
    gas: web3.utils.toHex('892413'),
    gasLimit: web3.utils.toHex('892413'),
    data: compiledContract.bytecode
};

// // Unlock account to sign transaction
// web3.eth.personal.unlockAccount(myAddress, myPrivateKey, 600)
// .then(console.log('Account unlocked!'))
// .catch((error) => { console.log(error); });

web3.eth.getBalance(myAddress)
.then(function(balance) { console.log("My balance: ", balance); })
.catch(function(error)  { console.log(error); });

web3.eth.accounts.signTransaction(rawTx, myPrivateKey)
.then(function(signResult) {    
    web3.eth.sendSignedTransaction(signResult.rawTransaction)
    .on('error', function (error) { console.log("Error deploying contract: " + error); })
    .on('transactionHash', function (transactionHash) { console.log("Transaction hash: " + transactionHash); })
    .on('receipt', function (receipt) { console.log("Receipt contract address: " + receipt.contractAddress); })
    .on('confirmation', function (confirmationNumber, receipt) {     
        console.log("Confirmation number: " + confirmationNumber);
        console.log("Confirmation receipt: " + receipt);
    })
    .catch(function (error) { console.log(error); });
});

这是 Kovan testnet 上的帐户,如果有帮助的话:https://kovan.etherscan.io/address/0x362aa2bf4b6fb733c4ef41f4d2833e8e5adc54ed

您需要在将交易发送到网络之前签署交易。最简单的方法是使用您的助记符解锁一个帐户。您可以在初始化 web3 并使用 truffle-hdwallet-provider 时执行此操作,之后您可以从您的帐户发送交易而无需手动签名,我认为这是最简单的方法。另一种选择是在使用私钥发送之前手动签署每笔交易,您可以阅读 here 如何做到这一点。这两种方式在功能方面没有区别,但如果您是新手,第一种方式会更容易一些。