VNL Works
VNL Works
VNL Works
TOOLS
TOOLS

SIWE Generator

EIP-4361

Sign-In with Ethereum (SIWE) メッセージの生成・署名・検証ツール。ゲームやdAppのウォレットログイン実装に必要な署名を安全に生成できます。

ステップ 1

チェーン & ウォレット

選択中のチェーン

chainId: 421614

ウォレット chainId: 421614

接続アドレス: 未接続

送信前にウォレット接続が必要です。

ステップ 2

メッセージパラメータ

EIP-4361準拠のSIWEメッセージを生成します。

実装例

サーバー & フロントエンド

サーバーサイド検証
// Node.js / TypeScript サーバーサイド検証例
import { verifyMessage, hashMessage } from 'viem';

async function verifySiweSignature(message: string, signature: string) {
  // 1. メッセージをパース
  const parsed = parseSiweMessage(message);
  
  // 2. 署名を検証
  const isValid = await verifyMessage({
    address: parsed.address,
    message: message,
    signature: signature,
  });
  
  // 3. 追加検証
  if (!isValid) throw new Error('Invalid signature');
  if (new Date(parsed.expirationTime) < new Date()) throw new Error('Expired');
  if (!validateNonce(parsed.nonce)) throw new Error('Invalid nonce');
  
  // 4. セッション発行
  return createSession(parsed.address, parsed.chainId);
}
フロントエンド実装
// React / wagmi フロントエンド例
import { useSignMessage } from 'wagmi';

function LoginButton() {
  const { signMessageAsync } = useSignMessage();
  
  const handleLogin = async () => {
    // 1. サーバーからnonce取得
    const { nonce } = await fetch('/api/auth/nonce').then(r => r.json());
    
    // 2. SIWEメッセージ生成
    const message = buildSiweMessage({
      domain: window.location.host,
      address: userAddress,
      statement: 'Sign in to MyApp',
      uri: window.location.origin,
      version: '1',
      chainId: chainId,
      nonce: nonce,
      issuedAt: new Date().toISOString(),
    });
    
    // 3. 署名
    const signature = await signMessageAsync({ message });
    
    // 4. サーバーに送信
    await fetch('/api/auth/verify', {
      method: 'POST',
      body: JSON.stringify({ message, signature }),
    });
  };
  
  return <button onClick={handleLogin}>Sign In with Ethereum</button>;
}
📚 セキュリティのベストプラクティス
  • Nonce: サーバーで生成し、使用済みはDBに保存してリプレイを防ぐ
  • 有効期限: 短めに設定(5-15分推奨)
  • Domain/URI: サーバー側で期待値と照合
  • ChainID: 対応チェーン以外は拒否
  • Statement: 利用規約同意などの法的文言を含める