Skip to content

Bug: verifyMessage invalid signature length #230

@jjjachyty

Description

@jjjachyty

Describe the bug

i use ios basewallet(29.76.5) Base Model sign text and verifySignature

Steps

const handleSignMessage = async () => {
  console.log('🔵 [signMessage] 开始签署消息...')
  if (!walletClient.value || !account.value) return

  error.value = null
  signature.value = null
  verifyResult.value = null
  isSigning.value = true

  try {
    console.log('🔵 [signMessage] 消息内容:', message.value)
    console.log('🔵 [signMessage] 账户地址:', account.value)
    
    // 使用 viem 的 signMessage,它会自动处理消息格式
    console.log('🔵 [signMessage] 请求钱包签名...')
    const sig = await walletClient.value.signMessage({
      account: account.value,
      message: message.value
    })
    
    console.log('✅ [signMessage] 原始签名:', sig)
    console.log('🔵 [signMessage] 签名类型:', typeof sig)
    console.log('🔵 [signMessage] 签名长度:', sig.length, '字符')
    
     
      signature.value = sig
      console.log('✅ [signMessage] 签名成功,格式正确')
   
  } catch (err: any) {
    console.error('❌ [signMessage] 签名失败:', err)
    console.error('❌ [signMessage] 错误详情:', {
      name: err.name,
      message: err.message,
      code: err.code,
      cause: err.cause
    })
    error.value = err.shortMessage || err.message || '签名失败'
  } finally {
    isSigning.value = false
  }
}

const handleVerifyMessage = async () => {
  console.log('🔵 [verifySignature] 开始验证签名...')
  if (!account.value || !signature.value) return

  error.value = null
  isVerifying.value = true

  try {
    const isValid = await verifyMessage({
      address: account.value,
      message: message.value,
      signature: signature.value as `0x${string}`
    })
    console.log('✅ [verifySignature] 验证结果:', isValid)
    verifyResult.value = isValid
  } catch (err: any) {
    console.error('❌ [verifySignature] 验证失败:', err)
    error.value = err.message || '验证失败'
  } finally {
    isVerifying.value = false
  }
}

my address :0x17046ccf43e0d7f0d44e98be223f4ba25af0f59f
message test:
Hello, viem! 这是一条测试消息。

sign result:
0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000041f71592b5fd91490f5c86b56bb2246b59eb099a6efadef8a882297d5f3e3d0b1a42229f5c2cd603695081cc18a90b69cd895dce707ce9d4a61618a27490afc7801c00000000000000000000000000000000000000000000000000000000000000

how can i verify sign result was my address:0x17046ccf43e0d7f0d44e98be223f4ba25af0f59f sign it

Expected behavior

verifyMessage pass

Version

29.76.5

Additional info

No response

Desktop

No response

Smartphone

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions