本章聚焦合约钱包登录支持,解析 EIP-1271 签名校验机制,介绍 isValidSignature 接口、合约钱包识别方法及后端统一验签策略。通过前后端协同,提升登录系统对 SCW 的兼容性与安全性,实现完整 Web3 身份验证体验
📚 作者:Henry 🧱 系列:《Web2 到 Web3:登录与身份验证机制全面进化》 · 第 8 篇 👨💻 受众:Web2 & Web3 开发者 / 区块链学习者 👉 系列持续更新中,建议收藏专栏或关注作者
在 Web3 登录中,签名行为默认基于 EOA(Externally Owned Account):
signMessage()
、signTypedData()
recoverAddress()
恢复地址用于身份认证但:合约钱包(Smart Contract Wallet)没有私钥,无法签名
import { getBytecode } from 'viem';
const bytecode = await getBytecode(client, { address });
const isContract = !!bytecode && bytecode !== '0x';
使用 RPC 接口查询:
eth_getCode(address, 'latest')
返回非 0x
即为合约地址。
EIP-1271 定义了合约签名验证标准接口:
function isValidSignature(bytes32 hash, bytes memory signature)
public view returns (bytes4 magicValue);
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!