unWallet ユーザーに対して電子署名をリクエストする

手順

1. unWallet 認証を終わらせる

unWallet ユーザーに対して電子署名をリクエストするためには、該当ユーザーがリクエスト元となるアプリケーションとの接続を認可している必要があります。この認可は unWallet 認証 の中で行われますので、まずはこちらを終わらせてください。

2. 電子署名チケットを発行する

POST /issueSignatureTicket を利用して、電子署名チケットを発行してください。なお、この処理はアプリケーションのバックエンドで行なってください。

3. 電子署名をリクエストする

クライアントサイド SDK の sign を実行し、unWallet ユーザーに対して電子署名をリクエストしてください。なお、sign の引数である ticket には、前段で発行した電子署名チケットを指定してください。それ以外の引数には、前段で電子署名チケットを発行した際に指定した値と同じ値を指定してください。

sign の詳細な仕様については こちら を参照してください。

リクエストが不正とみなされてしまう場合は、前段で登録したアプリケーションの allowedCallerOrigins が正しく設定されているかを確認してください。

4. 電子署名の正当性を検証する

unWallet はコントラクトウォレットであるため、ERC-1271 に準拠した方法で電子署名の正当性を検証してください。

import { ethers } from "ethers";

(async () => {
  const contract = new ethers.Contract(
    "<USER_ADDRESS>",
    [
      {
        inputs: [
          {
            internalType: "bytes32",
            name: "hash",
            type: "bytes32",
          },
          {
            internalType: "bytes",
            name: "signature",
            type: "bytes",
          },
        ],
        name: "isValidSignature",
        outputs: [
          {
            internalType: "bytes4",
            name: "",
            type: "bytes4",
          },
        ],
        stateMutability: "view",
        type: "function",
      },
    ],
    new ethers.JsonRpcProvider("<YOUR_RPC_URL>")
  );

  try {
    await contract.isValidSignature("<DIGEST>", "<SIGNATURE>");
  } catch (e) {
    console.log("invalid");
    return;
  }

  console.log("valid");
})();

Last updated