不充足的资金。您尝试从其发送交易的帐户资金不足。必需892413000000000并获得:0

时间:2018-11-03 19:25:06

标签: node.js ethereum solidity web3 web3js

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

enter image description here

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测试网上的帐户,如果有帮助的话:https://kovan.etherscan.io/address/0x362aa2bf4b6fb733c4ef41f4d2833e8e5adc54ed

1 个答案:

答案 0 :(得分:1)

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