Creating SIWE Messages
This section describes how to generate Sign-In with Ethereum messages and print them to the console.
A completed version of this part can be found in the example repository (00_print).
Creating SIWE messages in JavaScript is straightforward when using the siwe library in npm. To begin, create a new project called siwe-print.
mkdir siwe-print && cd siwe-print/
npm init --yes
npm install --save siwe
mkdir src/
We can then write the following into ./src/index.js:
const siwe = require('siwe');
const domain = "localhost";
const origin = "https://localhost/login";
function createSiweMessage (address, statement) {
const siweMessage = new siwe.SiweMessage({
uri: origin,
version: '1',
chainId: '1'
return siweMessage.prepareMessage();
"This is a test statement."
Now run the example:
node src/index.js
You should see output similar to the following message, with different values for the Nonce and Issued At fields:
localhost wants you to sign in with your Ethereum account:
This is a test statement.
URI: https://localhost/login
Version: 1
Chain ID: 1
Nonce: oNCEHm5jzQU2WvuBB
Issued At: 2022-01-28T23:28:16.013Z
To learn about all the available fields in a SiweMessage, check out the information in EIP-4361​
The fields we are most interested in for the purposes of this guide are address and statement. address is the Ethereum address which the user is signing in with, and the statement as this will describe to the user what action we wish to perform on their behalf.
Often, as in this example, we don't need to do any manipulation of the message, so we can immediately convert it into the textual representation that the user will sign.
Copy link