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 字节十六进制哈希。当primaryType为EIP712Domain,即仅签名 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 // 错误码
}
}