Provider: A read-only connection to the Ethereum network. It can query blockchain data like balances, transaction history, and call view functions on smart contracts, but cannot send transactions.
Signer: An abstraction that can sign transactions and messages. It has access to a private key and can send transactions to the network.
// Provider - read-only
const provider = new ethers.providers.JsonRpcProvider();
const balance = await provider.getBalance(address);
// Signer - can send transactions
const wallet = new ethers.Wallet(privateKey, provider);
const tx = await wallet.sendTransaction({
to: "0x...",
value: ethers.utils.parseEther("1.0")
});
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.