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