How to Use a Signer in Ethers.js
This guide will introduce you to use a Signer in Ethers.js and level up your Web3 stack!
What is a Signer in ethers.js?
A Signer is an abstraction to the Ethereum Account that has access to a private key, which grants access to messages and transactions to be securely signed off-chain while maintaining an interaction with the blockchain.
A Signer allows you to verify that you own a particular account, so that you can send transactions to the blockchain from that account.
Ethers.js Signer Use Cases
The following are four potential use cases of a Signer within Ethers.js:
- Balances - use signer.getBalance to retrieve the balance of a user’s wallet
- ENS Domains - use signer.resolveName to retrieve the ENS domain connected to the wallet address.
- Signing - use signer.signTransaction to sign a transaction to confirm ownership by a specific wallet address.
- Wallet - use ethers.Wallet to create a new wallet by passing in a private key identifying the owner of the wallet.
There are many more use cases that can be explored by visiting the Signer docs, here.
How to Use a Signer with the Alchemy SDK
This example will teach you how to send a transaction using the Alchemy SDK. Please Note: The following code snippets require prior installation of alchemy-SDK.
1. Import Alchemy, Network, Wallet and Utils via alchemy-sdk. Learn more about dotev, here.
const { Alchemy, Network, Wallet, Utils } = require("alchemy-sdk");
const dotenv = require("dotenv");
2. Optional Config object, but defaults to demo api-key and eth-mainnet.
const { API_KEY, PRIVATE_KEY } = process.env;
const settings = {
apiKey: API_KEY,
network: Network.ETH_GOERLI, // Replace with your network.
};
const alchemy = new Alchemy(settings);
3. Define wallet - an implementation of Signer that can sign transactions and messages using a private key.
let wallet = new Wallet(PRIVATE_KEY);
4. Define the transaction and specify details required of the transaction.
const transaction = {
to: "0xa238b6008Bc2FBd9E386A5d4784511980cE504Cd",
value: Utils.parseEther("0.001"),
gasLimit: "21000",
maxPriorityFeePerGas: Utils.parseUnits("5", "gwei"),
maxFeePerGas: Utils.parseUnits("20", "gwei"),
nonce: await alchemy.core.getTransactionCount(wallet.getAddress()),
type: 2,
chainId: 5, // Corresponds to ETH_GOERLI
};
5. Define the raw transaction using wallet and transact using Alchemy’s API methods.
const rawTransaction = await wallet.signTransaction(transaction);
await alchemy.transact.sendTransaction(rawTransaction);
Updated almost 2 years ago