The sign method calculates an Ethereum specific signature with:
sign(keccak256("\\x19Ethereum Signed Message:\\n" + len(message) + message)))
.
By adding a prefix to the message makes the calculated signature recognizable as an Ethereum specific signature. This prevents misuse where a malicious dapp can sign arbitrary data (e.g. transaction) and use the signature to impersonate the victim.
NOTE: the address to sign with must be unlocked.
Parameters
Object Name | Required | Type | Detail |
---|---|---|---|
ADDRESS | ✅ | String | Address of the account that will sign the messages |
Typed Data | ✅ | Object | Typed structured data to be signed |
Typed data is a JSON object containing type information, domain separator parameters and the message object.
"params": [
"0x0d8e461687b7d06f86ec348e0c270b0f279855f0",
{
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "version",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"Person": [
{
"name": "name",
"type": "string"
},
{
"name": "wallet",
"type": "address"
}
],
"Mail": [
{
"name": "from",
"type": "Person"
},
{
"name": "to",
"type": "Person"
},
{
"name": "contents",
"type": "string"
}
]
},
"primaryType": "Mail",
"domain": {
"name": "Ether Mail",
"version": "1",
"chainId": 1,
"verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
},
"message": {
"from": {
"name": "Cow",
"wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"
},
"to": {
"name": "Bob",
"wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"
},
"contents": "Hello, Bob!"
}
}
]
Result
Signature. As in eth_sign
it is a hex encoded 129 byte array starting with 0x
. It encodes the r
, s
and v
parameters from appendix F of the yellow paper in big-endian format. Bytes 0…64 contain the r
parameter, bytes 64…128 the s
parameter and the last byte the v
parameter. Note that the v
parameter includes the chain id as specified in EIP-155.
Example
Request
curl <your-endpoint> \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_sign","params":["0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", {"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"primaryType":"Mail","domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"from":{"name":"Cow","wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},"to":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"},"contents":"Hello, Bob!"}}],"id":1}'
Return
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x772e1f106f5333f2fc12d486057bad24145d84ae53fc44932bb5c767379a6cc412c8624af160f473403d15125cdc7b3de1129f725a71074e7eb011cc242300511b"
}