For the complete documentation index, see llms.txt. This page is also available as Markdown.

Sign Typed Data v3

Request

This method follows EIP-712 https://eips.ethereum.org/EIPS/eip-712

Ask the user to sign typed data

Learn more: https://docs.metamask.io/guide/signing-data.html#sign-typed-data-v3

curl --location --request POST 'localhost:9680/rpc' \
--header 'Content-Type: application/json' \
--data-raw '{
  "request": {
    "method": "eth_signTypedData_v3",
    "params": [
      "0x638105aa1b69406560f6428aeface3db9da83c64",
      "{\"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!\"}}"
    ]
  },
  "chain": {
    "chainId": "1"
  }
}
'
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class SignTypedDataV3 : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(SignData());
    }

    private IEnumerator SignData()
    {
        // notice triple back slash
        string jsonString = "{ \"request\": { \"method\": \"eth_signTypedData_v3\", \"params\": [ \"0x638105aa1b69406560f6428aeface3db9da83c64\", \"{\\\"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!\\\"}}\" ] }, \"chain\": { \"chainId\": \"1\" } }";
        byte[] jsonBytes = System.Text.Encoding.UTF8.GetBytes(jsonString);

        UnityWebRequest request = new UnityWebRequest("localhost:9680/rpc", "POST");
        request.uploadHandler = new UploadHandlerRaw(jsonBytes);
        request.downloadHandler = new DownloadHandlerBuffer();
        request.SetRequestHeader("Content-Type", "application/json");

        yield return request.SendWebRequest();
        Debug.Log(request.error);
        Debug.Log(request.downloadHandler.text);
    }
}

Last updated