Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Incorrect error from invalid private key for signTransaction #1998

Closed
little-shippy opened this issue Oct 15, 2018 · 2 comments
Closed

Incorrect error from invalid private key for signTransaction #1998

little-shippy opened this issue Oct 15, 2018 · 2 comments
Labels
Bug Addressing a bug

Comments

@little-shippy
Copy link

Hey guys,

I was running into an issue where I was getting an insufficient funds error when trying to sign a transaction. I found that this is a fairly common issue on the forums and it can be caused by having a private key that doesn't start with a 0x.

There is a simple solution to this in the packages/web3-eth-accounts/src/index.js file on line 145:

if (!privateKey) {
    error = new Error('No private key given!');

    callback(error);
    return Promise.reject(error);
}

if (!privateKey.startsWith('0x')) {
    error = new Error('Private key is invalid!');

    callback(error);
    return Promise.reject(error);
}

https://github.com/ethereum/web3.js/blob/v1.0.0-beta.36/packages/web3-eth-accounts/src/index.js#L145

I tested this from the v1.0.0-beta.36 tag and all tests passed.

@therightstuff
Copy link

@little-shippy i've been struggling this for weeks and couldn't find a solution anywhere - thank you!!!

@therightstuff
Copy link

sadly, i've finally had a chance to try this and i'm still getting a nonsensical insufficient funds error (the exact same unsigned transaction works just fine with sendTransaction).

using the develop branch and ethereumjs-tx-1.3.3.min.js:

var Buffer = ethereumjs.Buffer.Buffer;
var ethereumjsTx = ethereumjs.Tx;

...

// create transaction
var transaction = {
    "from": sourceAccount, // required
    "to": targetAccount, // required
    "value": web3.toHex(valueWei), // required
    "gas": web3.toHex(gasLimit),
    "gasLimit": web3.toHex(gasLimit),
    "gasPrice": web3.toHex(gasPrice),
    "chainId": web3.version.network,
    "nonce": web3.toHex(nonce)
};

var tx = new ethereumjsTx(transaction);
var privateKey = Buffer.from(testAccountPrivateKey, 'hex');
tx.sign(privateKey);
var rawTransaction = '0x' + tx.serialize().toString('hex');
transactionHash = web3.eth.sendRawTransaction(rawTransaction);

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Bug Addressing a bug
Projects
None yet
Development

No branches or pull requests

3 participants