Skip to Content
dApps
このページの内容

メッセージへの署名

OneKey に接続した Web アプリケーションは、メッセージへの署名もユーザーに要求できます。アプリケーションは任意のメッセージを作成でき、OneKey の署名プロンプトに表示されます。メッセージ署名にはネットワーク手数料がかからず、アドレスの所有権を確認する便利な方法です。

署名対象のメッセージをユーザーに送るには、Web アプリケーションで次を行います:

  1. メッセージのバイト列を Uint8Array として指定します。UTF-8 テキストの場合は TextEncoder を使用します。
  2. エンコードしたメッセージへの署名をユーザーの OneKey ウォレットに要求します。

signMessage

const provider = getProvider(); if (!provider) throw new Error('OneKey Solana provider is unavailable.'); const message = `To avoid digital dognappers, sign below to authenticate with CryptoCorgis`; const encodedMessage = new TextEncoder().encode(message); const signedMessage = await provider.signMessage(encodedMessage, "utf8");

request

const provider = getProvider(); if (!provider) throw new Error('OneKey Solana provider is unavailable.'); const message = `To avoid digital dognappers, sign below to authenticate with CryptoCorgis`; const encodedMessage = new TextEncoder().encode(message); const signedMessage = await provider.request({ method: "signMessage", params: { message: bs58.encode(encodedMessage), display: "utf8", }, });

この request の例には import bs58 from "bs58" が必要です。どちらの形式も、Uint8Array 型の signature と PublicKey 型の publicKey を含むオブジェクトで解決されます。表示オプションは表示方法だけを制御し、署名するバイト列は変えません。認証では正確なメッセージに対して署名を検証し、1 回限りのチャレンジを使用してください。

オフチェーンメッセージ署名

現在のプロバイダーソースはバージョン 1 に対応しており、意図した署名者の一覧が必要です。ヘルパーでリクエストをエンコードし、実際に署名されたバイト列をそのまま返してください。古いウォレットでは未対応の場合があるため、リクエストの拒否を処理してください。

const provider = getProvider(); if (!provider) throw new Error('OneKey Solana provider is unavailable.'); const { publicKey } = await provider.connect(); const result = await provider.solSignOffchainMessage( 'Sign in to example.com. Nonce: <SERVER_GENERATED_NONCE>', [publicKey], ); // Verify result.signature against result.signedOffchainMessage and result.publicKey.

古いバージョン 0 のリクエスト形式を再利用しないでください。アプリケーションが対応するウォレットのバージョンで、メソッドの利用可否とレスポンス形式を確認してください。

最終更新日