Created
May 24, 2023 16:41
-
-
Save critesjosh/8649ba69f28f1e6440ecf0401a21067d to your computer and use it in GitHub Desktop.
for testing signing messages with metamask just using the browser console.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String.prototype.hexEncode = function(){ | |
var hex, i; | |
var result = ""; | |
for (i=0; i<this.length; i++) { | |
hex = this.charCodeAt(i).toString(16); | |
result += ("000"+hex).slice(-4); | |
} | |
return result | |
} | |
// paste this into your browser console | |
let account = await window.ethereum.request({ method: 'eth_requestAccounts' }) | |
// for use with personal_sign | |
let message = "sign this please" | |
// eth_signTypedData_v4 parameters. All of these parameters affect the resulting signature. | |
const msgParams = JSON.stringify({ | |
domain: { | |
// This defines the network, in this case, Mainnet. | |
chainId: 1, | |
// Give a user-friendly name to the specific contract you're signing for. | |
name: 'Ether Mail', | |
// Add a verifying contract to make sure you're establishing contracts with the proper entity. | |
verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', | |
// This identifies the latest version. | |
version: '1', | |
}, | |
// This defines the message you're proposing the user to sign, is dapp-specific, and contains | |
// anything you want. There are no required fields. Be as explicit as possible when building out | |
// the message schema. | |
message: { | |
contents: 'Hello, Bob!', | |
attachedMoneyInEth: 4.2, | |
from: { | |
name: 'Cow', | |
wallets: [ | |
'0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', | |
'0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF', | |
], | |
}, | |
to: [ | |
{ | |
name: 'Bob', | |
wallets: [ | |
'0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', | |
'0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57', | |
'0xB0B0b0b0b0b0B000000000000000000000000000', | |
], | |
}, | |
], | |
}, | |
// This refers to the keys of the following types object. | |
primaryType: 'Mail', | |
types: { | |
// This refers to the domain the contract is hosted on. | |
EIP712Domain: [ | |
{ name: 'name', type: 'string' }, | |
{ name: 'version', type: 'string' }, | |
{ name: 'chainId', type: 'uint256' }, | |
{ name: 'verifyingContract', type: 'address' }, | |
], | |
// Not an EIP712Domain definition. | |
Group: [ | |
{ name: 'name', type: 'string' }, | |
{ name: 'members', type: 'Person[]' }, | |
], | |
// Refer to primaryType. | |
Mail: [ | |
{ name: 'from', type: 'Person' }, | |
{ name: 'to', type: 'Person[]' }, | |
{ name: 'contents', type: 'string' }, | |
], | |
// Not an EIP712Domain definition. | |
Person: [ | |
{ name: 'name', type: 'string' }, | |
{ name: 'wallets', type: 'address[]' }, | |
], | |
}, | |
}); | |
// personal_sign | |
// let sig = await window.ethereum.request({method: 'personal_sign', params: [message.hexEncode(), account[0]]}) | |
// eth_signTypedData_v4 | |
let sig = await window.ethereum.request({method: 'eth_signTypedData_v4', params: [account[0], msgParams]}) | |
console.log(sig) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment