Skip to Content
硬件接入

evmSignTypedData

以太坊:签名类型化数据

使用指定 BIP32 路径派生的私钥对 EIP-712  类型化数据消息进行签名。

用户需要在 OneKey 设备上确认所有签名详情。

  • 支持 EIP-712(v3 和 v4)
  • 使用 evmSignTypedData 来签名类型化结构数据
  • 不适用于 EIP-191 类型化数据签名
  • 使用 evmSignMessage 来签名 EIP-191(personal_sign)
const result = await HardwareSDK.evmSignTypedData(connectId, deviceId, params);

参数

可选通用参数

  • path - 必需 string | Array<number> 最小长度为 3更多信息
  • data - 必需 Object 类型为 EthereumSignTypedDataMessage。JSON Schema 定义可在 EIP-712 规范中找到。
  • metamaskV4Compat - 必需 boolean 设置为 true 以兼容 MetaMask 的 signTypedData_v4 
  • chainId - 可选 number ETH 中的 ChainId 是特定以太坊网络的唯一标识符,用于区分不同版本的区块链。参考 

盲签

你也可以使用不同的库自行构建哈希。

  • domainHash - 必需 string EIP-712 域的十六进制编码 32 字节哈希。
  • messageHash - 可选 string EIP-712 消息的十六进制编码 32 字节哈希。对于 primaryTypeEIP712Domain 的仅域哈希,此项是可选的。

什么情况下使用盲签

  • 使用 Mini 或 Classic 设备。
  • 数据中存在嵌套数组。
  • 固件版本低于 4.4.0,且数据大小大于 1KB。
  • 固件版本大于或等于 4.4.0,且数据大小大于 1.5KB。

示例

const eip712Data = { types: { EIP712Domain: [ { name: 'name', type: 'string', }, ], Message: [ { name: "Best Wallet", type: "string" }, { name: "Number", type: "uint64" } ] }, primaryType: 'Message', domain: { name: 'example.onekey.io', }, message: { "Best Wallet": "OneKey Wallet", // 注意 JavaScript 数字:MAX_SAFE_INTEGER 相当低 "Number": `${2n ** 55n}`, }, }; const {domainHash, messageHash} = transformTypedDataPlugin(eip712Data, true); HardwareSDK.evmSignTypedData(connectId, deviceId, { path: "m/44'/60'/0'", data: eip712Data, metamaskV4Compat: true, domainHash, messageHash, chainId: 1 });

返回结果

{ success: true, payload: { address: string, signature: string, // 带有 "0x" 前缀的十六进制字符串 } }

错误

{ success: false, payload: { error: string, // 错误信息 code: number // 错误码 } }
Last updated on