Недостаточно средств. На счете, с которого вы пытались отправить транзакцию, недостаточно средств. Требуется 892413000000000 и получено: 0 - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь развернуть договор о надежности с использованием web3 и nodejs, и я получаю сообщение об ошибке во всех тестовых сетях: Если я пытаюсь запустить на локальном 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 testnet, если она помогает: https://kovan.etherscan.io/address/0x362aa2bf4b6fb733c4ef41f4d2833e8e5adc54ed

1 Ответ

0 голосов
/ 04 ноября 2018

Вам необходимо подписать транзакцию, прежде чем отправить ее в сеть. Самый простой способ сделать это - разблокировать одну учетную запись с помощью мнемоники. Вы можете сделать это, когда вы инициализируете web3 и используете truffle-hdwallet-provider, после этого вы можете отправлять транзакции со своей учетной записи без необходимости вручную подписывать их, на мой взгляд, это самый простой способ сделать это. Другой вариант - вручную подписать каждую транзакцию перед отправкой, используя свой закрытый ключ. Вы можете прочитать здесь , как это сделать. Между этими двумя способами нет никакой разницы в функциональности, но первый способ немного проще, если вы новичок в этом.

...