このページの内容
メッセージへの署名
OneKey に接続した Web アプリケーションは、メッセージへの署名もユーザーに要求できます。アプリケーションは任意のメッセージを作成でき、OneKey の署名プロンプトに表示されます。メッセージ署名にはネットワーク手数料がかからず、アドレスの所有権を確認する便利な方法です。
署名対象のメッセージをユーザーに送るには、Web アプリケーションで次を行います:
- メッセージのバイト列を
Uint8Arrayとして指定します。UTF-8 テキストの場合はTextEncoderを使用します。 - エンコードしたメッセージへの署名をユーザーの 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 のリクエスト形式を再利用しないでください。アプリケーションが対応するウォレットのバージョンで、メソッドの利用可否とレスポンス形式を確認してください。
最終更新日