Отправляйте необработанные транзакции с помощью eth-lightwallet

Я создаю приложение кошелька и пытаюсь подписывать и отправлять необработанные транзакции с помощью eth-lightwallet.

function functionCallWallet(){
        var fromAddr = document.getElementById('functionCaller').value
        var contractAddr = document.getElementById('contractAddr').value
        console.log("Contract Address:"+contractAddr);
        var abi = JSON.parse(document.getElementById('contractAbi').value)
        console.log(abi);
        console.log(typeof abi);
        var contract = web3.eth.contract(abi).at(contractAddr);
        var functionName = document.getElementById('functionName').value;
        var args = document.getElementById('functionArgs').value.split(",");
        var gasPrice = 50000000000
        var gas = 3141592
        txOptions = {
            gasPrice: gasPrice,
            gasLimit: gas,
            value: 10000000,
            nonce:2.0e20
            }
        txOptions.to = contractAddr;
        var functionCallTx = txutils.functionTx(abi,functionName,args,txOptions);
        var password = prompt('Enter password ', 'Password');
        lightwallet.keystore.deriveKeyFromPassword(password, function(err, pwDerivedKey) {
        var signedFunctionTx = signing.signTx(global_keystore,pwDerivedKey,functionCallTx,fromAddr);
        console.log("Signed function transaction:"+signedFunctionTx);
        console.log('');
        web3.eth.sendRawTransaction('0x'+signedFunctionTx, function(err, hash) {
            console.log(err);
            console.log(hash);
            });
        })
      }

Я могу правильно подписать транзакцию. Но когда дело доходит до отправки необработанной транзакции по сети, у меня ничего не получается. В web3 API они используют https://github.com/ethereum/wiki/wiki/JavaScript-API#example-45 , они используют библиотеку ethereumjs-accounts для сериализации необработанных транзакций в шестнадцатеричный формат. Есть ли в eth-lightwallet функция сериализации в шестнадцатеричный формат, чтобы ее можно было использовать, а затем данные находились в формате, используемом функцией web3 sendRawTransaction, или нужно использовать библиотеку ethereumjs-accounts, упомянутую в документации web3?

Я получаю эту ошибку, очевидно, я не сериализую ее правильно, но я все равно поставлю ошибку

Error: rlp: input string too long for uint64, decoding into (types.Transaction)(types.txdata).AccountNonce
    at Object.module.exports.InvalidResponse 

Ответы (1)

Я думаю, что ошибка декодирования связана со значением объявления ( nonce:2.0e20) внутри txOptions. Это должно быть целочисленное значение, скажем, что-то вроде nonce: 31(или nonce:'0x1F', если вы предпочитаете шестнадцатеричную форму).

Спасибо за ваш ответ, но, судя по их примеру использования, это не так. github.com/ConsenSys/eth-lightwallet/blob/master/example/… . Я чувствую, что десятичный одноразовый номер может подойти.
Это также целое число в их примере. Значение одноразового номера сначала устанавливается равным 2, а затем каждый раз увеличивается на 1.
Я тестировал на мордене, поэтому значения nonce начинаются с 2 ^ 20, что составляет 1048576 в десятичном формате. Когда я поставил 1048576 для одноразового номера, моя проблема была решена. @Guiseppe Bertone, вы действительно можете отредактировать свой ответ.
Сделанный. Nonce должен быть целым числом.