Skip to content

Commit

Permalink
feat: Migrate to v6 lit protocol [DEV-4223] (#459)
Browse files Browse the repository at this point in the history
* feat: Upgrade lit protocol to v6

* Use v6 in providers

* fix build [skip ci]

* Upgrade lit to 6.4.1

* Rename v3 enums

* Switch to concrete type

---------

Co-authored-by: Tasos Derisiotis <50984242+Eengineer1@users.noreply.github.com>
  • Loading branch information
DaevMithran and Eengineer1 committed Aug 21, 2024
1 parent c29ff4b commit 08194ab
Show file tree
Hide file tree
Showing 8 changed files with 1,945 additions and 709 deletions.
4 changes: 2 additions & 2 deletions agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ didCheqdMainnetProvider:
rpcUrl: 'https://rpc.cheqd.net'
dkgOptions:
chain: cheqdMainnet
network: cayenne
network: datil-dev

didCheqdTestnetProvider:
$require: '@cheqd/did-provider-cheqd#CheqdDIDProvider'
Expand All @@ -231,7 +231,7 @@ didCheqdTestnetProvider:
rpcUrl: 'https://rpc.cheqd.network'
dkgOptions:
chain: cheqdTestnet
network: cayenne
network: datil-dev

# DID Manager
didManager:
Expand Down
2,243 changes: 1,566 additions & 677 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@
]
},
"dependencies": {
"@lit-protocol/lit-node-client": "^6.4.1",
"@lit-protocol/lit-node-client-v3": "npm:@lit-protocol/lit-node-client@3.1.1",
"@cheqd/sdk": "^4.0.3",
"@cheqd/ts-proto": "^3.4.4",
"@cosmjs/amino": "^0.32.4",
Expand All @@ -102,7 +104,6 @@
"@cosmjs/stargate": "^0.32.4",
"@cosmjs/utils": "^0.32.4",
"@digitalbazaar/vc-status-list": "^8.0.0",
"@lit-protocol/lit-node-client": "^3.1.1",
"@lit-protocol/lit-node-client-v2": "npm:@lit-protocol/lit-node-client@2.2.63",
"@lit-protocol/encryption-v2": "npm:@lit-protocol/encryption@2.2.63",
"@veramo/core": "^6.0.0",
Expand All @@ -118,7 +119,8 @@
"uuid": "^10.0.0"
},
"devDependencies": {
"@lit-protocol/types": "^3.0.27",
"@lit-protocol/types": "^6.4.1",
"@lit-protocol/types-v3": "npm:@lit-protocol/types@3.1.1",
"@lit-protocol/types-v2": "npm:@lit-protocol/types@^2.2.63",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/commit-analyzer": "^13.0.0",
Expand Down
5 changes: 1 addition & 4 deletions src/agent/ICheqd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import {
createKeyPairBase64,
createKeyPairHex,
createVerificationKeys,
toMultibaseRaw,
} from '@cheqd/sdk';
import { Coin, DeliverTxResponse } from '@cosmjs/stargate';
import {
Expand All @@ -39,7 +38,6 @@ import {
IResolver,
W3CVerifiableCredential,
ICredentialVerifier,
DIDResolutionResult,
} from '@veramo/core';
import {
CheqdDIDProvider,
Expand All @@ -54,7 +52,6 @@ import {
DefaultStatusList2021Encoding,
DefaultStatusList2021ResourceType,
DefaultStatusList2021StatusPurposeType,
createMsgCreateDidDocPayloadToSign,
TPublicKeyEd25519,
} from '../did-manager/cheqd-did-provider.js';
import { fromString, toString } from 'uint8arrays';
Expand All @@ -69,7 +66,7 @@ import {
LitCompatibleCosmosChains,
LitNetwork,
LitProtocol,
} from '../dkg-threshold/lit-protocol/v3.js';
} from '../dkg-threshold/lit-protocol/v6.js';
import {
blobToHexString,
getEncodedList,
Expand Down
6 changes: 3 additions & 3 deletions src/did-manager/cheqd-did-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import {
LitCompatibleCosmosChains,
LitNetwork,
LitNetworks,
} from '../dkg-threshold/lit-protocol/v3.js';
} from '../dkg-threshold/lit-protocol/v6.js';
import { IContext } from '../agent/ICheqd.js';
import { getControllers } from '../utils/helpers.js';

Expand Down Expand Up @@ -466,9 +466,9 @@ export class CheqdDIDProvider extends AbstractIdentifierProvider {
chain: options.dkgOptions.chain
? options.dkgOptions.chain
: DefaultDkgSupportedChains[this.network],
network: options.dkgOptions.network ? options.dkgOptions.network : LitNetworks.cayenne,
network: options.dkgOptions.network ? options.dkgOptions.network : LitNetworks.datildev,
}
: { chain: DefaultDkgSupportedChains[this.network], network: LitNetworks.cayenne };
: { chain: DefaultDkgSupportedChains[this.network], network: LitNetworks.datildev };

if (!options?.cosmosPayerSeed || options.cosmosPayerSeed === '') {
this.cosmosPayerWallet = DirectSecp256k1HdWallet.generate();
Expand Down
2 changes: 1 addition & 1 deletion src/dkg-threshold/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './lit-protocol/v3.js';
export * from './lit-protocol/v6.js';
40 changes: 20 additions & 20 deletions src/dkg-threshold/lit-protocol/v3.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { OfflineAminoSigner, Secp256k1HdWallet, StdSignDoc } from '@cosmjs/amino';
import { toString } from 'uint8arrays/to-string';
import { sha256 } from '@cosmjs/crypto';
import { LitNodeClientNodeJs, LitNodeClient } from '@lit-protocol/lit-node-client';
import { DecryptResponse, EncryptResponse, UnifiedAccessControlConditions } from '@lit-protocol/types';
import { LitNodeClientNodeJs, LitNodeClient } from '@lit-protocol/lit-node-client-v3';
import { DecryptResponse, EncryptResponse, UnifiedAccessControlConditions } from '@lit-protocol/types-v3';
import { generateSymmetricKey, randomBytes } from '../../utils/helpers.js';
import { isBrowser, isNode } from '../../utils/env.js';
import { v4 } from 'uuid';
Expand Down Expand Up @@ -32,14 +32,14 @@ export type CosmosReturnValueTest = {
comparator: string;
value: string;
};
export type CosmosAccessControlCondition = {
export interface CosmosAccessControlCondition {
conditionType: 'cosmos';
path: string;
chain: LitCompatibleCosmosChain;
method?: string;
parameters?: string[];
returnValueTest: CosmosReturnValueTest;
};
}
export type SaveEncryptionKeyArgs = {
unifiedAccessControlConditions: CosmosAccessControlCondition[];
symmetricKey: CryptoKey;
Expand All @@ -59,21 +59,21 @@ export type DecryptToStringMethod = (
encryptedString: Blob,
symmetricKey: Uint8Array
) => Promise<DecryptToStringMethodResult>;
export type LitNetwork = (typeof LitNetworks)[keyof typeof LitNetworks];
export type LitCompatibleCosmosChain = (typeof LitCompatibleCosmosChains)[keyof typeof LitCompatibleCosmosChains];
export type LitNetwork = (typeof LitNetworksV3)[keyof typeof LitNetworksV3];
export type LitCompatibleCosmosChain = (typeof LitCompatibleCosmosChainsV3)[keyof typeof LitCompatibleCosmosChainsV3];
export type LitProtocolOptions = {
cosmosAuthWallet: Secp256k1HdWallet;
litNetwork?: LitNetwork;
chain?: LitCompatibleCosmosChain;
};
export type TxNonceFormat = (typeof TxNonceFormats)[keyof typeof TxNonceFormats];

export const LitNetworks = {
export const LitNetworksV3 = {
cayenne: 'cayenne',
localhost: 'localhost',
custom: 'custom',
} as const;
export const LitCompatibleCosmosChains = {
export const LitCompatibleCosmosChainsV3 = {
cosmos: 'cosmos',
cheqdMainnet: 'cheqdMainnet',
cheqdTestnet: 'cheqdTestnet',
Expand All @@ -82,15 +82,15 @@ export const TxNonceFormats = { entropy: 'entropy', uuid: 'uuid', timestamp: 'ti

export class LitProtocol {
client: LitNodeClientNodeJs | LitNodeClient;
litNetwork: LitNetwork = LitNetworks.cayenne;
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChains.cheqdTestnet;
litNetwork: LitNetwork = LitNetworksV3.cayenne;
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChainsV3.cheqdTestnet;
private readonly cosmosAuthWallet: Secp256k1HdWallet;

private constructor(options: LitProtocolOptions) {
// validate options
if (options.litNetwork && !Object.values(LitNetworks).includes(options.litNetwork))
if (options.litNetwork && !Object.values(LitNetworksV3).includes(options.litNetwork))
throw new Error(`[did-provider-cheqd]: lit-protocol: Invalid LitNetwork: ${options.litNetwork}`);
if (options.chain && !Object.values(LitCompatibleCosmosChains).includes(options.chain))
if (options.chain && !Object.values(LitCompatibleCosmosChainsV3).includes(options.chain))
throw new Error(`[did-provider-cheqd]: lit-protocol: Invalid LitCompatibleCosmosChain: ${options.chain}`);

// set options
Expand Down Expand Up @@ -231,10 +231,10 @@ export class LitProtocol {
});

// validate top-level options chain
if (!options?.chain) options.chain = LitCompatibleCosmosChains.cheqdTestnet;
if (!options?.chain) options.chain = LitCompatibleCosmosChainsV3.cheqdTestnet;

// validate top-level options litNetwork
if (!options?.litNetwork) options.litNetwork = LitNetworks.cayenne;
if (!options?.litNetwork) options.litNetwork = LitNetworksV3.cayenne;

const litProtocol = new LitProtocol(options as LitProtocolOptions);
await litProtocol.connect();
Expand All @@ -243,11 +243,11 @@ export class LitProtocol {

static async getCosmosWalletPrefix(chain?: LitCompatibleCosmosChain): Promise<string> {
switch (chain) {
case LitCompatibleCosmosChains.cosmos:
case LitCompatibleCosmosChainsV3.cosmos:
return 'cosmos';
case LitCompatibleCosmosChains.cheqdMainnet:
case LitCompatibleCosmosChainsV3.cheqdMainnet:
return 'cheqd';
case LitCompatibleCosmosChains.cheqdTestnet:
case LitCompatibleCosmosChainsV3.cheqdTestnet:
return 'cheqd';
default:
return 'cheqd';
Expand Down Expand Up @@ -308,7 +308,7 @@ export class LitProtocol {

static async generateCosmosAccessControlConditionBalance(
returnValueTest: CosmosReturnValueTest,
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChains.cheqdTestnet,
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChainsV3.cheqdTestnet,
address = ':userAddress'
): Promise<CosmosAccessControlCondition> {
return {
Expand All @@ -324,7 +324,7 @@ export class LitProtocol {
amount: string,
sender: string,
recipient = ':userAddress',
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChains.cheqdTestnet
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChainsV3.cheqdTestnet
): Promise<CosmosAccessControlCondition> {
return {
conditionType: 'cosmos',
Expand All @@ -339,7 +339,7 @@ export class LitProtocol {
amount: string,
recipient = ':userAddress',
blockHeight = 'latest',
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChains.cheqdTestnet
chain: LitCompatibleCosmosChain = LitCompatibleCosmosChainsV3.cheqdTestnet
): Promise<CosmosAccessControlCondition> {
return {
conditionType: 'cosmos',
Expand Down
Loading

0 comments on commit 08194ab

Please sign in to comment.