跳到主要内容

evmSignTypedData

以太坊:签名类型化数据

使用指定 BIP32 路径对应的账户签名 EIP-712 类型化数据。

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

  • 支持 EIP-712(v3 和 v4)
  • 请使用 evmSignTypedData 签名类型化结构数据
  • 不用于 EIP-191 类型化数据签名
  • 对于 EIP-191 personal_sign,请使用 evmSignMessage
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,ChainId 是 ETH 中用于特定以太坊网络的唯一标识符,帮助区分不同版本的区块链。参考

盲签

你也可以使用其他库自行生成所需哈希。

  • domainHash - 必需 string,EIP-712 domain 对应的 32 字节十六进制哈希。
  • messageHash - 可选 string,EIP-712 message 对应的 32 字节十六进制哈希。当 primaryTypeEIP712Domain,即仅签名 domain 哈希时,可不传此项。

何时使用盲签

  • 设备为 UKey Lite 24、UKey Lite 25 或 UKey Core 26。
  • 待签名数据中包含嵌套数组。
  • 固件版本低于 4.4.0,且数据大小超过 1KB。
  • 固件版本大于或等于 4.4.0,且数据大小超过 1.5KB。

示例

const eip712Data = {
types: {
EIP712Domain: [
{
name: "name",
type: "string",
},
],
Message: [
{
name: "Wallet Name",
type: "string",
},
{
name: "Amount",
type: "uint64",
},
],
},
primaryType: "Message",
domain: {
name: "example.ukey.io",
},
message: {
"Wallet Name": "UKey Wallet",
// 注意 JavaScript 数字的安全上限:MAX_SAFE_INTEGER 较低
Amount: `${2n ** 54n}`,
},
};

const { domainHash, messageHash } = transformTypedDataPlugin(eip712Data, true);

HardwareSDK.evmSignTypedData(connectId, deviceId, {
path: "m/44'/60'/0'/0/0",
data: eip712Data,
metamaskV4Compat: true,
domainHash,
messageHash,
chainId: 1,
});

返回结果

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

错误

{
success: false,
payload: {
error: string, // 错误消息
code: number // 错误码
}
}