Как отправить eth из новой созданной учетной записи по секретному ключу? - PullRequest
0 голосов
/ 15 марта 2020

Попытайтесь создать новую учетную запись и отправить некоторые eth на другую учетную запись с помощью библиотеки web3.

const account = web3.eth.accounts.create()

Теперь я хочу отправить eth с этой учетной записи (я отправил несколько eth на эту учетную запись) У меня есть несколько слабых мест:

  • Не совсем понимаю, что это такое 'nonce' Я попытался установить 0 или 1.
  • поле chainId. Что это? Просто взято из некоторого примера.

ошибка:

Ошибка: возвращенная ошибка: у tx нет правильного одноразового номера. одноразовый номер учетной записи: 1 index. js: 140: 36 в XMLHttpRequest.request.onreadystatechange (\ node_modules \ web3-provider-http \ src \ index. js: 110: 13) в XMLHttpRequestEventTarget.dispatchEvent (\ node_modules \ xhr2-cookies \ dist \ xml -http-request-event-target. js: 34: 22) в XMLHttpRequest._setReadyState (\ node_modules \ xhr2-cookies \ dist \ xml -http-запрос. js: 208: 14 ) в XMLHttpRequest._onHttpResponseEnd (\ node_modules \ xhr2-cookies \ dist \ xml -http-request. js: 318: 14) в IncomingMessage. (\ node_modules \ xhr2-cookies \ dist \ xml -http-request. js: 289: 61) в IncomingMessage.emit (events. js: 215: 7) в IncomingMessage.EventEmitter.emit (домен. js: 498: 23) в endReadableNT (_stream_readable. js: 1184: 12) в processTicksAndRejected (внутренний / process / task_queues. js: 80: 21)

код:

const Web3 = require('web3')
        const Tx = require('ethereumjs-tx').Transaction
        const rpcURL = 'HTTP://127.0.0.1:7545' // Your RCkP URL goes here
        const web3 = new Web3(rpcURL)
        var privateKey = "aa424f25bcb01b0dd9622cac2b6f1a51432a7b1c45a4a5b74040999f903d7b8e"//get from created account by web3.eth.accounts.create()
        var addr = "0x9658BdD2a5CE0fFd202eF473E033DEE49e28d282"

        const toAddress = '0xc74fB4Ac0011D4a78F35b7AE88407c83d95372E0'
        const amountToSend = 0.5
        var gasPrice = 2;//or get with web3.eth.gasPrice
        var gasLimit = 3000000;

        var rawTransaction = {
          "from": addr,
          nonce: '0x00',//maybe this is problem
          gasPrice: '0x09184e72a000',
          gasLimit: '0x2710',
          "to": toAddress,
          "value":  web3.utils.toWei(amountToSend, "ether") ,
          "chainId": 'mainnet'//4 //not really understand chain
        };

            var privKey = new Buffer(privateKey, 'hex');
            var tx = new Tx(rawTransaction);

            tx.sign(privKey);
            var serializedTx = tx.serialize();

            web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
              if (!err)
                  {
                    console.log('Txn Sent and hash is '+hash);
                  }
              else
                  {
                    console.error(err);
                  }
            });

1 Ответ

0 голосов
/ 16 марта 2020

Вы должны использовать getTrnsactionCount для nonce:

nonce = await web3.eth.getTransactionCount(addr);

А также в rawTransaction объект преобразует переменную nonce в hex:

nonce: web3.utils.toHex(nonce);

Вы также можете использовать pending для включения числа ожидающих транзакций:

nonce = await web3.eth.getTransactionCount(addr, "pending");
...