Skip to Content
dApp 接入
本页目录

签名

签名前先连接 provider,并确认所选网络。直接注入的 provider 与 Aptos Wallet Standard 适配器使用不同的参数类型,请勿混用示例。请替换省略的地址,并为只读请求初始化 SDK 客户端。

了解如何签署消息用于身份验证或验证。


签署消息

签署任意消息用于身份验证或验证:

const message = 'Welcome to MyApp!\n\nClick to sign in.\n\nNonce: abc123' const response = await provider.signMessage({ message, nonce: 12345, // Example only; obtain a single-use challenge from your server }) console.log({ signature: response.signature, // Hex-encoded signature fullMessage: response.fullMessage, // Full signed message prefix: response.prefix, // Message prefix used })

签署消息选项

const response = await provider.signMessage({ message: 'Hello Aptos', nonce: 12345, address: true, // Include address in message application: true, // Include app info chainId: true, // Include chain ID })

验证消息(链下)

import nacl from 'tweetnacl' const { signature, fullMessage } = await provider.signMessage({ message: 'Hello Aptos', nonce: 12345, }) const account = await provider.account() const pubKeyBytes = Buffer.from(account.publicKey.slice(2), 'hex') const signatureBytes = Buffer.from(signature.slice(2), 'hex') const messageBytes = Buffer.from(fullMessage) const isValid = nacl.sign.detached.verify(messageBytes, signatureBytes, pubKeyBytes) console.log('Signature valid:', isValid)

登录(AIP 标准)

用于标准化的登录流程:

const signInInput = { // Sign-in parameters } const result = await provider.signIn(signInInput) console.log({ address: result.account.address, publicKey: result.account.publicKey, signature: result.signature, })

错误处理

try { await provider.signMessage({ message: 'Hello', nonce: 12345 }) } catch (error) { switch (error.code) { case 4001: console.log('User rejected the request') break case 4100: console.log('The account or method is not authorized') break case 4200: console.log('Unsupported method') break default: console.error('Error:', error.message) } }

直接调用 signMessage 时,nonce 使用数值类型;signMessageCompatible 和 Wallet Standard 集成使用字符串 nonce。验证返回的 fullMessage、签名者和挑战值,并在使用后使挑战值失效。上方登录参数仅作示意,请按适配器版本构造完整的 AptosSignInInput。

最后更新于