From d552475440127caa69f0a05b554052d7e9acfec2 Mon Sep 17 00:00:00 2001 From: qkin Date: Tue, 17 Mar 2026 13:40:43 +0800 Subject: [PATCH] feat(tron): add data type for sign message --- .../__test__/TronSignRequest.test.ts | 8 ++++++-- .../ur-registry-tron/src/TronSignRequest.ts | 19 +++++++++++++++++-- packages/ur-registry-tron/src/index.ts | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/ur-registry-tron/__test__/TronSignRequest.test.ts b/packages/ur-registry-tron/__test__/TronSignRequest.test.ts index 8eda49f3..f76d3d4b 100644 --- a/packages/ur-registry-tron/__test__/TronSignRequest.test.ts +++ b/packages/ur-registry-tron/__test__/TronSignRequest.test.ts @@ -4,6 +4,7 @@ import { TronSignRequest, CryptoKeypath, PathComponent, + DataType } from "../src"; import * as uuid from "uuid"; @@ -30,6 +31,7 @@ describe("tron-sign-request", () => { const tronSignRequest = new TronSignRequest({ requestId: Buffer.from(idBuffer), signData: tronData, + dataType: DataType.transaction, derivationPath: signKeyPath, address: "", origin: "tron wallet", @@ -39,7 +41,7 @@ describe("tron-sign-request", () => { const ur = tronSignRequest.toUREncoder(1000).nextPart(); expect(ur).toBe( - "ur:tron-sign-request/oxadtpdagdndcawmgtfrkigrpmndutdnbtkgfssbjnaohdtybkaoatmhcpayvyrhuegomtihswjsfzlassmsldrkdwhtpladayctbgptadbkehjykkjoihdmiojljliojzihhsjoinjkdmiajljndljojpjljyjliajljzdmghjpinioioihjpgujnhsjpjyfxjljtjyjphsiajybgjybkbzfpstneaahygtfdpmlgplaevaoljsgtplckaebkursnbgbzfpbtdtdwmkonwpnbjzcxlpzmytmunliecntkiysofrcpfyptahnsrkaeaeaeaeaeaeaeaeaeaeaeaendrfvwcxtalrsrrhhtttbnqzvldrmomwvaeolgotaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebsfwfzjortrpvtltrkdwmhadlamwwmuoaxaxtaaddyoeadlocsdwykcssrykaeykaeykaocybgbgbgbgahjejyjpjljtcxkthsjzjzihjymwlrhkst" + "ur:tron-sign-request/onadtpdagdndcawmgtfrkigrpmndutdnbtkgfssbjnaohdtybkaoatmhcpayvyrhuegomtihswjsfzlassmsldrkdwhtpladayctbgptadbkehjykkjoihdmiojljliojzihhsjoinjkdmiajljndljojpjljyjliajljzdmghjpinioioihjpgujnhsjpjyfxjljtjyjphsiajybgjybkbzfpstneaahygtfdpmlgplaevaoljsgtplckaebkursnbgbzfpbtdtdwmkonwpnbjzcxlpzmytmunliecntkiysofrcpfyptahnsrkaeaeaeaeaeaeaeaeaeaeaeaendrfvwcxtalrsrrhhtttbnqzvldrmomwvaeolgotaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebsfwfzjortrpvtltrkdwmhadlamwwmuoaxaxadaataaddyoeadlocsdwykcssrykaeykaeykaocybgbgbgbgamjejyjpjljtcxkthsjzjzihjyjtrnneiy" ); const tronSignRequestDecoded = TronSignRequest.fromCBOR( Buffer.from(cborHex, "hex") @@ -48,6 +50,7 @@ describe("tron-sign-request", () => { tronRequestId ); expect(tronSignRequest.getOrigin()).toBe("tron wallet"); + expect(tronSignRequestDecoded.getDataType()).toBe(1); expect(tronSignRequestDecoded.getSignData().toString("hex")).toEqual( "0a0207902208e1b9de559665c6714080c49789bb2c5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a1541c79f045e4d48ad8dae00e6a6714dae1e000adfcd1215410d292c98a5eca06c2085fff993996423cf66c93b2244a9059cbb0000000000000000000000009bbce520d984c3b95ad10cb4e32a9294e6338da300000000000000000000000000000000000000000000000000000000000f424070c0b6e087bb2c90018094ebdc03" ); @@ -68,6 +71,7 @@ describe("tron-sign-request", () => { const request = TronSignRequest.constructTronRequest( tronData, + DataType.transaction, derivationHdPath, xfp, requestID, @@ -76,7 +80,7 @@ describe("tron-sign-request", () => { ); const ur = request.toUREncoder(1000).nextPart(); expect(ur).toBe( - "ur:tron-sign-request/oxadtpdagdndcawmgtfrkigrpmndutdnbtkgfssbjnaohdtybkaoatmhcpayvyrhuegomtihswjsfzlassmsldrkdwhtpladayctbgptadbkehjykkjoihdmiojljliojzihhsjoinjkdmiajljndljojpjljyjliajljzdmghjpinioioihjpgujnhsjpjyfxjljtjyjphsiajybgjybkbzfpstneaahygtfdpmlgplaevaoljsgtplckaebkursnbgbzfpbtdtdwmkonwpnbjzcxlpzmytmunliecntkiysofrcpfyptahnsrkaeaeaeaeaeaeaeaeaeaeaeaendrfvwcxtalrsrrhhtttbnqzvldrmomwvaeolgotaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebsfwfzjortrpvtltrkdwmhadlamwwmuoaxaxtaaddyoeadlocsdwykcssrykaeykaeykaocybgbgbgbgahjejyjpjljtcxkthsjzjzihjymwlrhkst" + "ur:tron-sign-request/onadtpdagdndcawmgtfrkigrpmndutdnbtkgfssbjnaohdtybkaoatmhcpayvyrhuegomtihswjsfzlassmsldrkdwhtpladayctbgptadbkehjykkjoihdmiojljliojzihhsjoinjkdmiajljndljojpjljyjliajljzdmghjpinioioihjpgujnhsjpjyfxjljtjyjphsiajybgjybkbzfpstneaahygtfdpmlgplaevaoljsgtplckaebkursnbgbzfpbtdtdwmkonwpnbjzcxlpzmytmunliecntkiysofrcpfyptahnsrkaeaeaeaeaeaeaeaeaeaeaeaendrfvwcxtalrsrrhhtttbnqzvldrmomwvaeolgotaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebsfwfzjortrpvtltrkdwmhadlamwwmuoaxaxadaataaddyoeadlocsdwykcssrykaeykaeykaocybgbgbgbgamjejyjpjljtcxkthsjzjzihjyjtrnneiy" ); }); }); diff --git a/packages/ur-registry-tron/src/TronSignRequest.ts b/packages/ur-registry-tron/src/TronSignRequest.ts index 1fe4c863..8f528d08 100644 --- a/packages/ur-registry-tron/src/TronSignRequest.ts +++ b/packages/ur-registry-tron/src/TronSignRequest.ts @@ -14,14 +14,21 @@ const { decodeToDataItem, RegistryTypes } = extend; enum Keys { requestId = 1, signData, + dataType, derivationPath, address, origin, } +export enum DataType { + transaction = 1, + personalMessage = 2, +} + type SignRequestProps = { requestId?: Buffer; signData: Buffer; + dataType: DataType; derivationPath: CryptoKeypath; address?: Buffer; origin?: string; @@ -30,6 +37,7 @@ type SignRequestProps = { export class TronSignRequest extends RegistryItem { private requestId?: Buffer; private signData: Buffer; + private dataType: DataType; private derivationPath: CryptoKeypath; private address?: Buffer; private origin?: string; @@ -40,6 +48,7 @@ export class TronSignRequest extends RegistryItem { super(); this.requestId = args.requestId; this.signData = args.signData; + this.dataType = args.dataType; this.derivationPath = args.derivationPath; this.address = args.address; this.origin = args.origin; @@ -47,13 +56,15 @@ export class TronSignRequest extends RegistryItem { public getRequestId = () => this.requestId; public getSignData = () => this.signData; - public getDerivationPath= () => this.derivationPath.getPath(); + public getDataType = () => this.dataType; + public getDerivationPath = () => this.derivationPath.getPath(); public getAddress = () => this.address; public getOrigin = () => this.origin; public toDataItem = () => { const map: DataItemMap = {}; map[Keys.signData] = this.signData; + map[Keys.dataType] = this.dataType; const derivationPath = this.derivationPath.toDataItem(); derivationPath.setTag(this.derivationPath.getRegistryType().getTag()); @@ -87,6 +98,7 @@ export class TronSignRequest extends RegistryItem { return new TronSignRequest({ requestId, signData: map[Keys.signData], + dataType: map[Keys.dataType], derivationPath: CryptoKeypath.fromDataItem(map[Keys.derivationPath]), address: map[Keys.address], origin: map[Keys.origin], @@ -113,7 +125,8 @@ export class TronSignRequest extends RegistryItem { public static constructTronRequest( signData: Buffer, - derivationHDPath: string, + dataType: DataType, + derivationHDPath: string, xfp: string, uuidString?: string, address?: Buffer, @@ -122,9 +135,11 @@ export class TronSignRequest extends RegistryItem { return new TronSignRequest({ requestId: uuidString ? Buffer.from(uuidParse(uuidString) as Uint8Array) : undefined, signData, + dataType, derivationPath: TronSignRequest.parsePath(derivationHDPath, xfp), address, origin, }); } } + diff --git a/packages/ur-registry-tron/src/index.ts b/packages/ur-registry-tron/src/index.ts index 70a9bf76..6a01b7b7 100644 --- a/packages/ur-registry-tron/src/index.ts +++ b/packages/ur-registry-tron/src/index.ts @@ -8,5 +8,5 @@ patchTags( .map(rt => rt.getTag()) as number[] ); -export { TronSignRequest } from "./TronSignRequest"; +export { TronSignRequest, DataType } from "./TronSignRequest"; export { TronSignature } from "./TronSignature";