Skip to Content

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) }

参数

参数类型描述
requestIdBuffer构造函数的可选字段,值为 UUID 字节;下方高级辅助方法接收 UUID 字符串
signDataBuffer待签名数据
dataTypeDataType签名数据类型
chainIdnumber链 ID(可选)
derivationPathCryptoKeypath派生路径
addressBuffer签名者地址的字节数据(可选)
originstring请求来源(可选)

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 display

Legacy 交易

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 解码响应。

最后更新于