跳到主要内容

ETH Sign

EthSignature 用于解析设备返回的 Ethereum/EVM 签名结果。应用应根据 requestId 将响应与原始请求对应起来,再把签名填入交易或消息处理流程。

入参

字段值类型用途
signatureBuffer65 字节签名数据,格式为 r+s+v
requestIdBuffer对应的请求 ID,可选
originstring请求来源,可选

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