# Torus.js sapphire changes 1. Latest code with sapphire (v9.x.x) - https://github.com/torusresearch/torus.js 2. Old code without sapphire (v8.x.x) - https://github.com/torusresearch/torus.js/tree/242e45e4d834855a70f8d975821ec3790ae4ecd5 3. Versioning strategy updates - Torus.js sdk starting from v9.x doesn't support any legacy networks. - Legacy network support will be maintained by updating version 8.x.x if required - V9.x.x only supports sapphire mainnet, sapphire testnet and sapphire devnet 4. Code changes - Fetch node details package is updated to fetch sapphire node details (test cases and types) - ClientId mandatory field is added to constructor - metadataHost field is removed from constructor, metadata is returned from nodes so no need to pass external metadata - enableOneKey field is removed from constructor, onekey flow is default now so no need of this field. - `getUserTypeAndAddress` function is removed, only `getPublicAddress` is required in sapphire since oneKey flow is enabled by default - `setCustomKey` function is removed and a new `importKey` function is added. - All functions which were setting or getting data from metadata are removed. For ex: setMetadata, getMetadata, getOrSetNonce etc - Strategy for fetching shares is changed, explained below in details - Now we return more data along with shares for ex: node_indexes,session key session tokens and session signatures, all this new data is required for tss - getPublicAddress now takes a new field `extendedVerifierId` which is required to set tss pub key. You cannot fetch shares of a extendedVerifierId for all verifiers except torus-health verifier which is a exception for testing purposes, you can only assign a key to a extendedVerifierId. - Signer is removed, previously we used to sign every key assign request but that is not required anymore. 5. How import key works? - Import key basically takes a external private key as input and imports the key in to sapphire nodes. - This function first splits the key in to two parts, oauth key and nonce. - After splitting it generated 5 shares from oauth key and then send each share along with nonce to every node. - It also take a id token of the verifier and get the commitments from nodes before sending the shares to nodes. - Then it waits for threshold number of nodes to resolve before considering key import as successfull - refer to this function here: https://github.com/torusresearch/torus.js/blob/d2aa9894611ac58739ec09ab5b08b99795bc8825/src/torus.ts#L172 6. What changed in retrieve shares? - Retrieve share works exactly same as before except following change:- - Now it also expects a nonce from nodes along with shares before resolving - Nonce is not required for tss verifier ids - Now nodes also returns enc session token and session data, so this function also decrypts new data along with decrypting shares. 8. What changed in getPublicAddress? - Previously to fetch public key of user we used to do 2 api calls. - first to check if key exists if yes then return the key. - second if key doesn't exist we used to call a key assign api. - Now both of these api calls are combined in to one get or set api call - Also to do key assign we used to call node endpoints randomly one by one till we get success result from any of the node - Now we call all nodes parallely and wait for threshold of them to resolve before returning pub key.