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- 可选numberETH 中的 ChainId 是特定以太坊网络的唯一标识符,用于区分不同版本的区块链。参考
盲签
你也可以使用不同的库自行构建哈希。
domainHash- 必需stringEIP-712 域的十六进制编码 32 字节哈希。messageHash- 可选stringEIP-712 消息的十六进制编码 32 字节哈希。对于primaryType为EIP712Domain的仅域哈希,此项是可选的。
什么情况下使用盲签
- 使用 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