Skip to content

Commit 33f2a15

Browse files
Merge pull request #108 from torusresearch/feat/fnd-sig-type
add sigType option to fetch node details
2 parents a3c3bc6 + 5e0dea3 commit 33f2a15

File tree

8 files changed

+73
-14
lines changed

8 files changed

+73
-14
lines changed

packages/constants/src/constants.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,9 @@ export const KEY_TYPE = {
9191
SECP256K1: "secp256k1",
9292
ED25519: "ed25519",
9393
} as const;
94+
95+
export const SIG_TYPE = {
96+
ECDSA_SECP256K1: "ecdsa-secp256k1",
97+
ED25519: "ed25519",
98+
BIP340: "bip340",
99+
} as const;

packages/constants/src/interfaces.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { KEY_TYPE, TORUS_LEGACY_NETWORK, TORUS_SAPPHIRE_NETWORK } from "./constants";
1+
import { KEY_TYPE, SIG_TYPE, TORUS_LEGACY_NETWORK, TORUS_SAPPHIRE_NETWORK } from "./constants";
22

33
export interface JRPCResponse<T> {
44
id: number;
@@ -35,6 +35,8 @@ export type TORUS_NETWORK_TYPE = TORUS_LEGACY_NETWORK_TYPE | TORUS_SAPPHIRE_NETW
3535

3636
export type WEB3AUTH_KEY_TYPE = (typeof KEY_TYPE)[keyof typeof KEY_TYPE];
3737

38+
export type WEB3AUTH_SIG_TYPE = (typeof SIG_TYPE)[keyof typeof SIG_TYPE];
39+
3840
export type NODE = {
3941
address: string;
4042
node_index: string;
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { TORUS_NETWORK_TYPE, WEB3AUTH_KEY_TYPE } from "@toruslabs/constants";
1+
import { TORUS_NETWORK_TYPE, WEB3AUTH_KEY_TYPE, WEB3AUTH_SIG_TYPE } from "@toruslabs/constants";
22

33
export type NodeDetailManagerParams = {
44
network?: TORUS_NETWORK_TYPE;
55
keyType?: WEB3AUTH_KEY_TYPE;
6+
sigType?: WEB3AUTH_SIG_TYPE;
67
fndServerEndpoint?: string;
78
enableLogging?: boolean;
89
};

packages/fetch-node-details/src/nodeDetailManager.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import {
55
KEY_TYPE,
66
METADATA_MAP,
77
MULTI_CLUSTER_NETWORKS,
8+
SIG_TYPE,
89
TORUS_LEGACY_NETWORK,
910
TORUS_LEGACY_NETWORK_TYPE,
1011
TORUS_NETWORK_TYPE,
1112
TORUS_SAPPHIRE_NETWORK,
1213
WEB3AUTH_KEY_TYPE,
14+
WEB3AUTH_SIG_TYPE,
1315
} from "@toruslabs/constants";
1416
import { fetchLocalConfig } from "@toruslabs/fnd-base";
1517
import { get } from "@toruslabs/http-helpers";
@@ -26,6 +28,8 @@ class NodeDetailManager {
2628

2729
private _keyType: WEB3AUTH_KEY_TYPE;
2830

31+
private _sigType: WEB3AUTH_SIG_TYPE;
32+
2933
private _torusNodeEndpoints: string[] = [];
3034

3135
private _torusNodeRSSEndpoints: string[] = [];
@@ -45,6 +49,7 @@ class NodeDetailManager {
4549
constructor({
4650
network = TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET,
4751
keyType = KEY_TYPE.SECP256K1,
52+
sigType = SIG_TYPE.ECDSA_SECP256K1,
4853
fndServerEndpoint,
4954
enableLogging = false,
5055
}: NodeDetailManagerParams = {}) {
@@ -53,6 +58,7 @@ class NodeDetailManager {
5358
}
5459
this.network = network;
5560
this._keyType = keyType;
61+
this._sigType = sigType;
5662
this.updated = false;
5763
if (fndServerEndpoint) {
5864
this.fndServerEndpoint = fndServerEndpoint;
@@ -83,7 +89,7 @@ class NodeDetailManager {
8389

8490
try {
8591
const { nodeDetails } = await get<{ nodeDetails: INodeDetails }>(
86-
`${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}&keyType=${this._keyType}`
92+
`${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}&keyType=${this._keyType}&sigType=${this._sigType}`
8793
);
8894
this.setNodeDetails(nodeDetails);
8995

@@ -92,7 +98,7 @@ class NodeDetailManager {
9298
log.error("Failed to fetch node details from server, using local.", error);
9399
}
94100

95-
const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE, this._keyType);
101+
const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE, this._keyType, this._sigType);
96102
if (!nodeDetails) throw new Error("Failed to fetch node details");
97103
this.setNodeDetails(nodeDetails);
98104
return this._nodeDetails;

packages/fnd-base/src/endpoints.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
22
KEY_TYPE,
33
LEGACY_NETWORKS_ROUTE_MAP,
4+
SIG_TYPE,
45
TORUS_LEGACY_NETWORK_TYPE,
56
TORUS_SAPPHIRE_NETWORK,
67
TORUS_SAPPHIRE_NETWORK_TYPE,
78
WEB3AUTH_KEY_TYPE,
9+
WEB3AUTH_SIG_TYPE,
810
} from "@toruslabs/constants";
911

1012
export const SAPPHIRE_NETWORK_URLS: Record<TORUS_SAPPHIRE_NETWORK_TYPE, string[]> = {
@@ -56,14 +58,43 @@ export const getRSSEndpoints = (sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE, le
5658
export const getTSSEndpoints = (
5759
sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE,
5860
legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE,
59-
keyType = KEY_TYPE.SECP256K1 as WEB3AUTH_KEY_TYPE
61+
keyType = KEY_TYPE.SECP256K1 as WEB3AUTH_KEY_TYPE,
62+
sigType?: WEB3AUTH_SIG_TYPE
6063
) => {
6164
const endpoints = SAPPHIRE_NETWORK_URLS[sapphireNetwork];
6265
if (!endpoints || endpoints.length === 0) {
6366
throw new Error(`Unsupported network: ${sapphireNetwork}`);
6467
}
6568

66-
const tssPath = keyType === KEY_TYPE.ED25519 ? "tss-frost" : "tss";
69+
const tssPath = (() => {
70+
const dklsPath = "tss";
71+
const frostPath = "tss-frost";
72+
if (sigType) {
73+
if (sigType === SIG_TYPE.ECDSA_SECP256K1) {
74+
if (keyType !== KEY_TYPE.SECP256K1) {
75+
throw new Error("Invalid key type for ecdsa-secp256k1");
76+
}
77+
return dklsPath;
78+
} else if (sigType === SIG_TYPE.ED25519) {
79+
if (keyType !== KEY_TYPE.ED25519) {
80+
throw new Error("Invalid key type for ed25519");
81+
}
82+
return frostPath;
83+
} else if (sigType === SIG_TYPE.BIP340) {
84+
if (keyType !== KEY_TYPE.SECP256K1) {
85+
throw new Error("Invalid key type for bip340");
86+
}
87+
return frostPath;
88+
}
89+
throw new Error("Invalid sig type");
90+
} else if (keyType === KEY_TYPE.SECP256K1) {
91+
return dklsPath;
92+
} else if (keyType === KEY_TYPE.ED25519) {
93+
return frostPath;
94+
}
95+
throw new Error("Invalid key type");
96+
})();
97+
6798
const routeIdentifier = LEGACY_NETWORKS_ROUTE_MAP[legacyNetwork as TORUS_LEGACY_NETWORK_TYPE];
6899
return endpoints.map((e) => {
69100
if (routeIdentifier && routeIdentifier.networkIdentifier) {

packages/fnd-base/src/sapphireNetworkConfig.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { INodeDetails, TORUS_LEGACY_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK_TYPE, WEB3AUTH_KEY_TYPE } from "@toruslabs/constants";
1+
import { INodeDetails, TORUS_LEGACY_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK_TYPE, WEB3AUTH_KEY_TYPE, WEB3AUTH_SIG_TYPE } from "@toruslabs/constants";
22

33
import { getRSSEndpoints, getSSSEndpoints, getTSSEndpoints } from "./endpoints";
44
import { SAPPHIRE_NODE_PUB_KEYS } from "./pubKeys";
55

66
export const getSapphireNodeDetails = (
77
sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE,
88
legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE,
9-
keyType?: WEB3AUTH_KEY_TYPE
9+
keyType?: WEB3AUTH_KEY_TYPE,
10+
sigType?: WEB3AUTH_SIG_TYPE
1011
): INodeDetails => {
1112
return {
1213
currentEpoch: "1",
@@ -17,7 +18,7 @@ export const getSapphireNodeDetails = (
1718

1819
torusNodeRSSEndpoints: getRSSEndpoints(sapphireNetwork, legacyNetwork),
1920

20-
torusNodeTSSEndpoints: getTSSEndpoints(sapphireNetwork, legacyNetwork, keyType),
21+
torusNodeTSSEndpoints: getTSSEndpoints(sapphireNetwork, legacyNetwork, keyType, sigType),
2122
torusIndexes: [1, 2, 3, 4, 5],
2223

2324
torusNodePub: SAPPHIRE_NODE_PUB_KEYS[sapphireNetwork],

packages/fnd-base/src/utils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import {
77
TORUS_SAPPHIRE_NETWORK,
88
TORUS_SAPPHIRE_NETWORK_TYPE,
99
WEB3AUTH_KEY_TYPE,
10+
WEB3AUTH_SIG_TYPE,
1011
} from "@toruslabs/constants";
1112

1213
import { getSapphireNodeDetails } from "./sapphireNetworkConfig";
1314

14-
export function fetchLocalConfig(network: TORUS_NETWORK_TYPE, keyType: WEB3AUTH_KEY_TYPE): INodeDetails | undefined {
15+
export function fetchLocalConfig(network: TORUS_NETWORK_TYPE, keyType: WEB3AUTH_KEY_TYPE, sigType?: WEB3AUTH_SIG_TYPE): INodeDetails | undefined {
1516
if (Object.values(TORUS_SAPPHIRE_NETWORK).includes(network as TORUS_SAPPHIRE_NETWORK_TYPE)) {
16-
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE, undefined, keyType);
17+
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE, undefined, keyType, sigType);
1718
}
1819

1920
if (Object.values(TORUS_LEGACY_NETWORK).includes(network as TORUS_LEGACY_NETWORK_TYPE)) {

packages/fnd-server/src/router.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { KEY_TYPE, TORUS_LEGACY_NETWORK, TORUS_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK, WEB3AUTH_KEY_TYPE } from "@toruslabs/constants";
1+
import {
2+
KEY_TYPE,
3+
SIG_TYPE,
4+
TORUS_LEGACY_NETWORK,
5+
TORUS_NETWORK_TYPE,
6+
TORUS_SAPPHIRE_NETWORK,
7+
WEB3AUTH_KEY_TYPE,
8+
WEB3AUTH_SIG_TYPE,
9+
} from "@toruslabs/constants";
210
import { fetchLocalConfig } from "@toruslabs/fnd-base";
311
import { celebrate, Joi } from "celebrate";
412
import express, { Request, Response } from "express";
@@ -27,16 +35,19 @@ router.get(
2735
keyType: Joi.string()
2836
.optional()
2937
.allow(...Object.values(KEY_TYPE)),
38+
sigType: Joi.string()
39+
.optional()
40+
.allow(...Object.values(SIG_TYPE)),
3041
}),
3142
},
3243
{ allowUnknown: true }
3344
),
3445
async (req: Request, res: Response) => {
3546
try {
36-
const { network, keyType = "secp256k1" } = req.query as Record<string, string>;
47+
const { network, keyType = KEY_TYPE.SECP256K1, sigType = SIG_TYPE.ECDSA_SECP256K1 } = req.query as Record<string, string>;
3748
const finalNetwork = network.toLowerCase();
3849
// use static details for sapphire mainnet and testnet
39-
const nodeDetails = fetchLocalConfig(finalNetwork as TORUS_NETWORK_TYPE, keyType as WEB3AUTH_KEY_TYPE);
50+
const nodeDetails = fetchLocalConfig(finalNetwork as TORUS_NETWORK_TYPE, keyType as WEB3AUTH_KEY_TYPE, sigType as WEB3AUTH_SIG_TYPE);
4051

4152
return res.status(200).json({
4253
nodeDetails,

0 commit comments

Comments
 (0)