本页目录
EthSignRequest
EthSignRequest 类处理以太坊签名请求。
将待签名数据编码为设备可扫描的内容;该类不负责创建或广播交易。
DataType 枚举
enum DataType {
transaction = 1, // Legacy transaction (RLP encoded unsigned data)
typedData = 2, // EIP-712 typed data (JSON string as bytes)
personalMessage = 3, // Personal message signing
typedTransaction = 4 // Typed transaction (EIP-1559)
}参数
| 参数 | 类型 | 描述 |
|---|---|---|
requestId | Buffer | 构造函数的可选字段,值为 UUID 字节;下方高级辅助方法接收 UUID 字符串 |
signData | Buffer | 待签名数据 |
dataType | DataType | 签名数据类型 |
chainId | number | 链 ID(可选) |
derivationPath | CryptoKeypath | 派生路径 |
address | Buffer | 签名者地址的字节数据(可选) |
origin | string | 请求来源(可选) |
UR 示例
UR:ETH-SIGN-REQUEST/ONADTPDAGDSWNNYAHGTOKPFPIAPANNROLNSAVYDTHHAOHDECAOWFLYLDLFAAUELPATAEGWSOLALPBAVYGUYTHNLFGMAYMWSGBYZOIYHTRDCFBANBFPBNDSPRJPNSDLGLBYIMJELTCNLNWZJLSEAEAELARTAXAAAACSLDAHTAADDYOEADLECSDWYKCSFNYKAEYKAEWKADWKAOCYTIZSYLCNSSDKGOCA示例
示例使用 KeystoneEthereumSDK.generateSignRequest,它接收十六进制字符串和 UUID 字符串,参数名称与上方注册表构造函数不同。unsignedTxHex 和 unsignedLegacyHex 应由交易库生成,包含未签名的待签名字节,且不带 0x 前缀。EIP-1559 数据必须包含 02 类型字节。typedDataJson 必须包含完整的 EIP-712 对象。
使用设备导出的实际路径和主指纹。在验证响应前,保留请求 ID 和原始未签名交易。
EIP-1559 交易
import { KeystoneEthereumSDK } from '@keystonehq/keystone-sdk';
const eth = new KeystoneEthereumSDK();
const requestId = globalThis.crypto.randomUUID();
const ur = eth.generateSignRequest({
requestId, // uuid string
signData: unsignedTxHex, // hex without 0x
dataType: 4, // typedTransaction
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
chainId: 1,
origin: 'your-app',
});
// Encode UR into animated QR frames and displayLegacy 交易
const ur = eth.generateSignRequest({
requestId,
signData: unsignedLegacyHex,
dataType: 1, // transaction
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
chainId: 1,
origin: 'your-app',
});EIP-712 TypedData
const dataHex = Buffer.from(typedDataJson, 'utf8').toString('hex');
const ur = eth.generateSignRequest({
requestId,
signData: dataHex,
dataType: 2, // typedData
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
origin: 'your-app',
});Personal Message
const dataHex = Buffer.from(message, 'utf8').toString('hex');
const ur = eth.generateSignRequest({
requestId,
signData: dataHex,
dataType: 3, // personalMessage
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
origin: 'your-app',
});下一步
设备签名后,使用 EthSignature 解码响应。
最后更新于