web3.js Wallet Guide
Introduction
The web3-eth-accounts package contains functions to generate Ethereum accounts and sign transactions and data.
web3-eth-accounts
Methods
The following is a list of web3-eth-account methods with descriptions and examples of usage:
- create
- privateKeytoAccount
- privateKeytoAddress
- privateKeytoPublicKey
- parseAndValidatePrivateKey
- sign
- signTransaction
- recoverTransaction
- hashMessage
- recover
- encrypt
- decrypt
Creating a Web3Account with the web3-eth-accounts package and signing a message
import { create } from 'web3-eth-accounts';
// the create method returns a Web3Account object. It contains an address and private key and allows you to be able to encrypt, sign and signTransaction.
const account = create();
{
address: '0xbD504f977021b5E5DdccD8741A368b147B3B38bB',
privateKey: 'privateKey',
signTransaction: [Function: signTransaction],
sign: [Function: sign],
encrypt: [AsyncFunction: encrypt]
}
account.sign("hello world");
{
message: 'hello world',
messageHash: '0xd9eba16ed0ecae432b71fe008c98cc872bb4cc214d3220a36f365326cf807d68',
v: '0x1b',
r: '0xe4fce466ef18f6cd8b4f4175a9a04cd2872a1a6a8cfc2ff67fb0cfd6d78ec758',
s: '0x37ca3a789976f1854d16e50a04caf2e06ee14b0ac4a5878b43929767f2008288',
signature: '0xe4fce466ef18f6cd8b4f4175a9a04cd2872a1a6a8cfc2ff67fb0cfd6d78ec75837ca3a789976f1854d16e50a04caf2e06ee14b0ac4a5878b43929767f20082881b'
}
import a private key and sign a transaction with the web3 package
import Web3 from 'web3';
const web3 = new Web3("provider");
const account = web3.eth.accounts.privateKeyToAccount("privateKey");
signedTransaction = await account.signTransaction({
from: a.address,
to: '0xe4beef667408b99053dc147ed19592ada0d77f59',
value: '0x1',
gas: '300000',
gasPrice: await web3.eth.getGasPrice()
})
> {
messageHash: '0xfad22c3ab5ecbb6eec934a21243ee1866fbbd3786f4e8e8ec631b917ef65174d',
v: '0xf4f6',
r: '0xc0035636d9417f63fdd418bc545190e59b58a4ff921bbf4efebf352dac211f11',
s: '0x4944d746ff12c7bca41f77c8f7d75301cea8b205e021dfde34d09d5bdccc713d',
rawTransaction: '0xf866808477359400830493e094e4beef667408b99053dc147ed19592ada0d77f59018082f4f6a0c0035636d9417f63fdd418bc545190e59b58a4ff921bbf4efebf352dac211f11a04944d746ff12c7bca41f77c8f7d75301cea8b205e021dfde34d09d5bdccc713d',
transactionHash: '0xa3fed275c97abc4a160cd9bef3ec90206686f32821a8fd4e01a04130bff35c1a'
}
Local wallets
Local wallets are an in-memory wallet that can hold multiple accounts. Wallets are a convenient way to sign and send transactions in web3.js.
danger
If used within the browser, wallets are not saved anywhere and disappear when the page is refreshed. If used within your application, wallets will disappear after the program is completed.
Methods
The following is a list of Wallet methods in the web3-eth-accounts package with description and example usage:
Creating a local wallet
// creating a new wallet
web3.eth.accounts.create()
> Wallet(0) [
_accountProvider: {
create: [Function: createWithContext],
privateKeyToAccount: [Function: privateKeyToAccountWithContext],
decrypt: [Function: decryptWithContext]
},
_addressMap: Map(0) {},
_defaultKeyName: 'web3js_wallet'
]
// add a wallet using a private key
web3.eth.accounts.wallet.add("PrivateKey");
Signing a message using a wallet
import Web3 from 'web3';
web3.eth.accounts.wallet.create(1);
const message = web3.utils.utf8ToHex('Hello world'); // sign only takes hexstrings, so turn message to hexstring
web3.eth.sign(message, 0).then(console.log); // 0 refers to using the first index of the wallet to sign the message
> {
message: '0x48656c6c6f20776f726c64',
messageHash: '0x8144a6fa26be252b86456491fbcd43c1de7e022241845ffea1c3df066f7cfede',
v: '0x1c',
r: '0x3a420906f331896cb5db1366cdaeef1f0b14f9f71d72c178e87b76f8b31f3f36',
s: '0x32ffccc78638c1d7e46dbf16041ddaef90ab50a85eeeaa46f8c496a39237831a',
signature: '0x3a420906f331896cb5db1366cdaeef1f0b14f9f71d72c178e87b76f8b31f3f3632ffccc78638c1d7e46dbf16041ddaef90ab50a85eeeaa46f8c496a39237831a1c'
}
Sending a transaction using a local wallet
We have written a guide for sending transactions using local wallets and node wallets.