unWallet ユーザーに対して電子署名をリクエストする
手順
1. unWallet 認証を終わらせる
unWallet ユーザーに対して電子署名をリクエストするためには、該当ユーザーがリクエスト元となるアプリケーションとの接続を認可している必要があります。この認可は unWallet 認証 の中で行われますので、まずはこちらを終わらせてください。
2. 電子署名チケットトークンを発行する
POST /issueSignatureTicket を利用して、電子署名チケットトークンを発行してください。なお、この処理はアプリケーションのバックエンドで行なってください。
3. 電子署名をリクエストする
クライアントサイド SDK の sign
を実行し、unWallet ユーザーに対して電子署名をリクエストしてください。なお、sign
の引数である ticketToken
には、前段で発行した電子署名チケットトークンを指定してください。それ以外の引数には、前段で電子署名チケットトークンを発行した際に指定した値と同じ値を指定してください。
リクエストが不正とみなされてしまう場合は、前段で登録したアプリケーションの 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