-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
149 lines (136 loc) · 6.39 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<!-- Primary Meta Tags -->
<title>Sign message using Metamask | Web3 signature and ecRecover</title>
<meta name="title" content="Sign message using Metamask | Web3 signature and ecRecover">
<meta name="description" content="Sign a message using your MetaMask wallet and recover signed messages to verify owner of an address">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://shobhitic.github.io/ethsign/">
<meta property="og:title" content="Sign message using Metamask | Web3 signature and ecRecover">
<meta property="og:description" content="Sign a message using your MetaMask wallet and recover signed messages to verify owner of an address">
<!-- <meta property="og:image" content=""> -->
<!-- Twitter -->
<meta property="twitter:card" content="website">
<meta property="twitter:url" content="https://shobhitic.github.io/ethsign/">
<meta property="twitter:title" content="Sign message using Metamask | Web3 signature and ecRecover">
<meta property="twitter:description" content="Sign a message using your MetaMask wallet and recover signed messages to verify owner of an address">
<!-- <meta property="twitter:image" content=""> -->
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="#">Ethereum Signatures</a>
<button id="connect-btn" class="btn btn-primary" onclick="connect()">Connect to MetaMask</button>
</div>
</nav>
<div class="container">
<div class="mt-5">
<div class="row">
<h2 class="mb-3">Sign message using MetaMask wallet</h2>
<div class="col-lg-6">
<p>Step 1: Connect to Metamask wallet.</p>
<p>Step 2: Enter your message.</p>
<p>Step 3: Press the sign button.</p>
<p>Step 4: Sign the message using Metamask.</p>
<p>Step 5: Copy the signature.</p>
</div>
<div class="col-lg-6">
<form onsubmit="sign(event)">
<div>
<label for="message" class="mb-2">Message to sign</label>
<textarea id="message" class="form-control" placeholder="Enter the message to sign" rows="4"></textarea>
</div>
<div class="mt-3">
<button id="sign-btn" class="btn btn-primary" disabled>Sign</button>
</div>
</form>
<div id="signature-container" class="mt-2">
</div>
</div>
</div>
<hr>
<div class="row mt-5">
<h2 class="mb-3">Recover the signer address from signature</h2>
<div class="col-lg-6">
<p>Step 1: Connect to Metamask wallet.</p>
<p>Step 2: Enter the message.</p>
<p>Step 3: Enter the signature.</p>
<p>Step 4: Press the recover button.</p>
<p>Step 5: Check the address of signer.</p>
</div>
<div class="col-lg-6">
<form onsubmit="recover(event)">
<div>
<label for="recover-message" class="mb-2">Message to recover</label>
<textarea id="recover-message" class="form-control" placeholder="Enter the message to recover"></textarea>
</div>
<div class="mt-2">
<label for="recover-signature" class="mb-2">Signature to recover</label>
<textarea id="recover-signature" class="form-control" placeholder="Enter the signature to recover"></textarea>
</div>
<div class="mt-3">
<button id="recover-btn" class="btn btn-primary" disabled>Recover</button>
</div>
</form>
<div id="address-container" class="mt-2">
</div>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<p>Created by <a href="https://twitter.com/shobhitic">@shobhitic</a></p>
</div>
</div>
</div>
<script type="text/javascript">
var account = null;
const connect = async () => {
if (window.ethereum) {
await window.ethereum.send('eth_requestAccounts');
window.w3 = new Web3(window.ethereum);
var accounts = await w3.eth.getAccounts();
account = accounts[0];
var signBtn = document.getElementById('sign-btn')
signBtn.disabled = false
var recoverBtn = document.getElementById('recover-btn')
recoverBtn.disabled = false
var connectBtn = document.getElementById('connect-btn')
connectBtn.disabled = true
connectBtn.textContent = account.substr(0, 6) + "..." + account.substr(38)
} else {
alert('Metamask not detected')
}
}
const sign = async (e) => {
e.preventDefault()
if (account) {
var messageBox = document.getElementById('message')
var signature = await w3.eth.personal.sign(messageBox.value, account)
document.getElementById('signature-container').innerHTML = "<div>Signature:</div><textarea id='signature-textarea' class='form-control' disabled>" + signature + "</textarea>";
} else {
alert('Please connect Metamask first')
}
return false;
}
const recover = async (e) => {
e.preventDefault();
if (account) {
var recoverMessageBox = document.getElementById('recover-message')
var recoverSignatureBox = document.getElementById('recover-signature')
var recoveredAddress = await w3.eth.personal.ecRecover(recoverMessageBox.value, recoverSignatureBox.value)
document.getElementById('address-container').innerHTML = "<div>Address:</div><textarea id='address-textarea' class='form-control' disabled>" + recoveredAddress + "</textarea>";
} else {
alert('Metamask not detected')
}
}
</script>
</body>
</html>