2
0
mirror of synced 2025-02-24 03:58:06 +00:00

Updated parseTransaction to format parameters more meaningfully.

This commit is contained in:
ricmoo 2016-09-16 14:46:19 +08:00
parent d8013cae37
commit 736b08e016
5 changed files with 73 additions and 12 deletions

34
dist/ethers-wallet.js vendored
View File

@ -2226,12 +2226,42 @@ utils.defineProperty(Wallet, 'parseTransaction', function(rawTransaction) {
raw.push(signedTransaction[index]);
});
transaction.v = signedTransaction[6];
if (transaction.to) {
if (transaction.to.length === 0) {
delete transaction.to;
} else {
transaction.to = utils.getAddress('0x' + transaction.to.toString('hex'));
}
}
['gasPrice', 'gasLimit', 'nonce', 'value'].forEach(function(name) {
if (!transaction[name]) { return; }
if (transaction[name].length === 0) {
transaction[name] = new utils.BN(0);
} else {
transaction[name] = new utils.BN(transaction[name].toString('hex'), 16);
}
});
/* @TODO: Maybe? In the future, all nonces stored as numbers? (obviously, major version change)
if (transaction.nonce) {
transaction.nonce = transaction.nonce.toNumber()
}
*/
if (signedTransaction.length > 6 && signedTransaction[6].length === 1 &&
signedTransaction[7].length >= 1 && signedTransaction[7].length <= 32 &&
signedTransaction[8].length >= 1 && signedTransaction[7].length <= 32) {
transaction.v = signedTransaction[6][0];
transaction.r = signedTransaction[7];
transaction.s = signedTransaction[8];
var digest = utils.sha3(rlp.encode(raw));
transaction.from = SigningKey.recover(digest, transaction.r, transaction.s, transaction.v[0] - 27);
try {
transaction.from = SigningKey.recover(digest, transaction.r, transaction.s, transaction.v - 27);
} catch (error) { }
}
return transaction;
});

File diff suppressed because one or more lines are too long

View File

@ -123,12 +123,42 @@ utils.defineProperty(Wallet, 'parseTransaction', function(rawTransaction) {
raw.push(signedTransaction[index]);
});
transaction.v = signedTransaction[6];
if (transaction.to) {
if (transaction.to.length === 0) {
delete transaction.to;
} else {
transaction.to = utils.getAddress('0x' + transaction.to.toString('hex'));
}
}
['gasPrice', 'gasLimit', 'nonce', 'value'].forEach(function(name) {
if (!transaction[name]) { return; }
if (transaction[name].length === 0) {
transaction[name] = new utils.BN(0);
} else {
transaction[name] = new utils.BN(transaction[name].toString('hex'), 16);
}
});
/* @TODO: Maybe? In the future, all nonces stored as numbers? (obviously, major version change)
if (transaction.nonce) {
transaction.nonce = transaction.nonce.toNumber()
}
*/
if (signedTransaction.length > 6 && signedTransaction[6].length === 1 &&
signedTransaction[7].length >= 1 && signedTransaction[7].length <= 32 &&
signedTransaction[8].length >= 1 && signedTransaction[7].length <= 32) {
transaction.v = signedTransaction[6][0];
transaction.r = signedTransaction[7];
transaction.s = signedTransaction[8];
var digest = utils.sha3(rlp.encode(raw));
transaction.from = SigningKey.recover(digest, transaction.r, transaction.s, transaction.v[0] - 27);
try {
transaction.from = SigningKey.recover(digest, transaction.r, transaction.s, transaction.v - 27);
} catch (error) { }
}
return transaction;
});

View File

@ -1,6 +1,6 @@
{
"name": "ethers-wallet",
"version": "1.0.3",
"version": "1.0.4",
"description": "Ethereum wallet library.",
"main": "index.js",
"scripts": {

View File

@ -22,6 +22,7 @@ module.exports = function(test) {
test.equal(ethers, ethereumLib, 'invalid transaction');
// @TODO: More testing on parsed transaction.
test.equal(wallet.address, Wallet.parseTransaction(ethers).from, 'invalid parseTransaction');
}