签名
了解如何签署消息用于身份验证或验证。
签署消息
签署任意消息用于身份验证或验证:
const message = '欢迎来到 MyApp!\n\n点击签名登录。\n\nNonce: abc123'
const response = await provider.signMessage({
message,
nonce: 'abc123', // 可选的 nonce,用于防重放
})
console.log({
signature: response.signature, // 十六进制编码的签名
fullMessage: response.fullMessage, // 完整的已签名消息
prefix: response.prefix, // 使用的消息前缀
})签署消息选项
const response = await provider.signMessage({
message: 'Hello Aptos',
nonce: 'unique-nonce',
address: true, // 在消息中包含地址
application: true, // 包含应用信息
chainId: true, // 包含链 ID
})验证消息(链下)
import nacl from 'tweetnacl'
const { signature, fullMessage } = await provider.signMessage({
message: 'Hello Aptos',
nonce: 'unique-nonce',
})
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('签名有效:', isValid)登录(AIP 标准)
用于标准化的登录流程:
const signInInput = {
// 登录参数
}
const result = await provider.signIn(signInInput)
console.log({
address: result.address,
publicKey: result.publicKey,
signature: result.signature,
})错误处理
try {
await provider.signMessage({ message: 'Hello', nonce: '123' })
} catch (error) {
switch (error.code) {
case 4001:
console.log('用户拒绝了请求')
break
case 4100:
console.log('未授权 - 钱包已锁定')
break
case 4200:
console.log('不支持的方法')
break
default:
console.error('错误:', error.message)
}
}Last updated on