ETH Sign
EthSignature 用于解析设备返回的 Ethereum/EVM 签名结果。应用应根据 requestId 将响应与原始请求对应起来,再把签名填入交易或消息处理流程。
入参
| 字段 | 值类型 | 用途 |
|---|---|---|
signature | Buffer | 65 字节签名数据,格式为 r+s+v |
requestId | Buffer | 对应的请求 ID,可选 |
origin | string | 请求来源,可选 |
UR例子
UR:ETH-SIGNATURE/OTADTPDAGDSWNNYAHGTOKPFPIAPANNROLNSAVYDTHHAOHDFPCATKCPPFYLENGAGLMKMUCAYKFPFSDREOMENTPKBGEONDCHFDNBKOSSTPDWETSGBZDNCMCHKPNYDMKIDPTDRYJSDRTKCTIOFPQZHFLNSKVACLMNIYTKLGISFRWLKTZTREAEAXIYGWJTIHGRIHKKPLGDEEDS
解码例
import { URDecoder } from "@ngraveio/bc-ur";
import { EthSignature } from "@keystonehq/bc-ur-registry-eth";
const dec = new URDecoder();
// 扫到一帧就交给解码器继续处理
// feed each scanned frame into dec.receivePart(frame)
if (dec.isComplete()) {
const ur = dec.resultUR(); // 最终得到的 ur.type 应为 'eth-signature'
const signatureData = EthSignature.fromCBOR(ur.cbor);
const requestId = signatureData.getRequestId();
const signature = signatureData.getSignature();
// 接着把 r、s、v 这几个字段拆出来
const r = signature.slice(0, 32);
const s = signature.slice(32, 64);
const v = signature.slice(64, 65);
// 然后继续拼装交易,或收尾消息签名流程
}
签名格式
签名为 65 字节:
r(32 字节):ECDSA 签名值的第一部分s(32 字节):ECDSA 签名值的第二部分v(1 字节):恢复 ID