Flutter 集成 eth_sig_util 实现鸿蒙端以太坊签名适配
在 OpenHarmony 生态中构建 Web3 应用,安全性是核心命脉。无论是开发非托管钱包、登录去中心化应用(dApp),还是处理 EIP-712 结构化数据确认,都离不开严谨的以太坊签名与加密协议。
eth_sig_util 是一个针对以太坊签名习惯优化的 Dart 工具库,支持 personal_sign、signTypedData 以及公钥恢复等核心算法。本文将指导如何在鸿蒙端集成该库,构建一套符合全球标准的加密验证体系。
原理分析
基础逻辑
eth_sig_util 的核心在于 基于 Secp256k1 椭圆曲线的消息哈希与签名构造。它通过三个维度驱动鸿蒙端的加密交互:
- 消息格式化:严格遵循以太坊特有的前缀处理规则(如
\x19Ethereum Signed Message:\n),确保签名结果能被 EVM 兼容链无缝识别。 - 结构化数据签名 (EIP-712):通过对分层数据进行递归哈希,实现可读性强的资产转账或授权确认逻辑。
- 公钥与地址恢复:支持从原始消息和签名中逆向推导签发者的以太坊地址,实现鸿蒙端'免私钥参与'的第三方身份核验。
为什么选择它?
| 功能维度 | 优势特性 | 对鸿蒙 Web3 开发的价值 |
|---|---|---|
| 全协议支持 | 完美覆盖 personal_sign, EIP-712 等主流标准 | 确保鸿蒙应用与 MetaMask 等全球主流 Web3 生态无缝挂接 |
| 纯 Dart 安全性 | 无额外复杂 Native 库依赖 | 降低鸿蒙端加密模块的攻击面,符合系统级安全审计要求 |
| 开发者友好 | 提供直观的 API 用于公钥恢复 | 帮助开发者在鸿蒙端快速实现基于钱包地址的去中心化登录(DID) |
| 跨链通用性 | 逻辑不局限于以太坊,支持所有 EVM 兼容链 | 助力鸿蒙应用适配 BSC, Polygon, Arbitrum 等海量二层网络 |
环境配置与基础实践
1. 依赖引入
在鸿蒙工程的 pubspec.yaml 中添加依赖。建议始终关注最新版本以获取安全补丁。
dependencies:
eth_sig_util: ^0.0.9+
2. 核心签名流程
实战中,我们通常需要一个'去中心化身份登录'的签名逻辑。这里要注意,Dart 字符串转字节流时推荐使用 codeUnits,这是处理 UTF-8 编码的标准方式。
import 'package:eth_sig_util/eth_sig_util.dart';
/// 生成鸿蒙端登录签名
String generateHarmonyLoginSignature(String privateKey, String message) {
// 调用 eth_sig_util 构造以太坊标准签名
// 该方法会自动处理前缀 "\x19Ethereum Signed Message:\n" 逻辑
final signature = EthSigUtil.signPersonalMessage(
privateKey: privateKey,
message: message.codeUnits, // 转化为字节流
);
print("鸿蒙 Web3 签名生成完毕:$signature");
return signature;
}
/// 验证签名并恢复地址
void verifyHarmonySignature(String signature, String message) {
// 逆向恢复地址,校验身份
final recoveredAddress = EthSigUtil.recoverPersonalSignature(
signature: signature,
message: message.codeUnits,
);
print("恢复到的签发者地址:$recoveredAddress");
}


