@cheqd/sdk 1.4.0 → 1.5.0-develop.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.github/workflows/build.yml +3 -2
  2. package/.github/workflows/dispatch.yml +7 -1
  3. package/.github/workflows/test.yml +66 -0
  4. package/CHANGELOG.md +22 -0
  5. package/build/index.d.ts +1 -1
  6. package/build/index.d.ts.map +1 -1
  7. package/build/index.js +1 -3
  8. package/build/index.js.map +1 -1
  9. package/build/modules/did.d.ts +41 -28
  10. package/build/modules/did.d.ts.map +1 -1
  11. package/build/modules/did.js +78 -30
  12. package/build/modules/did.js.map +1 -1
  13. package/build/modules/resource.d.ts +4 -4
  14. package/build/modules/resource.d.ts.map +1 -1
  15. package/build/modules/resource.js +14 -33
  16. package/build/modules/resource.js.map +1 -1
  17. package/build/signer.d.ts +4 -4
  18. package/build/signer.d.ts.map +1 -1
  19. package/build/signer.js +27 -16
  20. package/build/signer.js.map +1 -1
  21. package/build/types.d.ts +239 -1
  22. package/build/types.d.ts.map +1 -1
  23. package/build/types.js +127 -2
  24. package/build/types.js.map +1 -1
  25. package/build/utils.d.ts +5 -17
  26. package/build/utils.d.ts.map +1 -1
  27. package/build/utils.js +52 -60
  28. package/build/utils.js.map +1 -1
  29. package/docker/Dockerfile +55 -0
  30. package/docker/entrypoint.sh +58 -0
  31. package/docker/localnet/build-latest.env +7 -0
  32. package/docker/localnet/container-env/observer-0.env +13 -0
  33. package/docker/localnet/container-env/seed-0.env +17 -0
  34. package/docker/localnet/container-env/validator-0.env +13 -0
  35. package/docker/localnet/container-env/validator-1.env +13 -0
  36. package/docker/localnet/container-env/validator-2.env +13 -0
  37. package/docker/localnet/container-env/validator-3.env +13 -0
  38. package/docker/localnet/docker-compose.yml +281 -0
  39. package/docker/localnet/gen-network-config.sh +259 -0
  40. package/docker/localnet/import-keys.sh +31 -0
  41. package/package.json +2 -2
  42. package/src/index.ts +1 -3
  43. package/src/modules/did.ts +118 -44
  44. package/src/modules/resource.ts +10 -33
  45. package/src/signer.ts +29 -16
  46. package/src/types.ts +160 -2
  47. package/src/utils.ts +67 -70
  48. package/tests/modules/did.test.ts +69 -9
  49. package/tests/modules/resource.test.ts +6 -4
  50. package/tests/signer.test.ts +25 -23
  51. package/tests/testutils.test.ts +43 -25
  52. package/tests/utils.test.ts +22 -2
package/src/utils.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { VerificationMethod } from "@cheqd/ts-proto/cheqd/v1/did"
2
1
  import {
3
2
  IKeyPair,
4
3
  IKeyValuePair,
@@ -9,14 +8,17 @@ import {
9
8
  TVerificationKey,
10
9
  TVerificationKeyPrefix,
11
10
  CheqdNetwork,
12
- IVerificationKeys
11
+ IVerificationKeys,
12
+ MsgCreateDidPayload,
13
+ VerificationMethodPayload,
14
+ MsgUpdateDidPayload
13
15
  } from "./types"
14
16
  import { fromString, toString } from 'uint8arrays'
15
17
  import { bases } from "multiformats/basics"
16
18
  import { base64ToBytes } from "did-jwt"
17
19
  import { generateKeyPair, generateKeyPairFromSeed, KeyPair } from '@stablelib/ed25519'
18
20
  import { v4 } from 'uuid'
19
- import { MsgCreateDidPayload, MsgUpdateDidPayload } from "@cheqd/ts-proto/cheqd/v1/tx"
21
+ import { createHash } from 'crypto'
20
22
 
21
23
  export type TImportableEd25519Key = {
22
24
  publicKeyHex: string
@@ -25,43 +27,53 @@ export type TImportableEd25519Key = {
25
27
  type: "Ed25519"
26
28
  }
27
29
 
28
- export type IdentifierPayload = Partial<MsgCreateDidPayload> | Partial<MsgUpdateDidPayload>
30
+ // multicodec ed25519-pub header as varint
31
+ const MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
29
32
 
30
- export function parseToKeyValuePair(object: { [key: string]: any }): IKeyValuePair[] {
31
- return Object.entries(object).map(([key, value]) => ({ key, value }))
32
- }
33
+ export type IdentifierPayload = Partial<MsgCreateDidPayload> | Partial<MsgUpdateDidPayload>
33
34
 
34
35
  export function isEqualKeyValuePair(kv1: IKeyValuePair[], kv2: IKeyValuePair[]): boolean {
35
36
  return kv1.every((item, index) => item.key === kv2[index].key && item.value === kv2[index].value)
36
37
  }
37
38
 
38
- export function createSignInputsFromImportableEd25519Key(key: TImportableEd25519Key, verificationMethod: VerificationMethod[]): ISignInputs {
39
+ export function createSignInputsFromImportableEd25519Key(key: TImportableEd25519Key, verificationMethod: VerificationMethodPayload[]): ISignInputs {
39
40
  if (verificationMethod?.length === 0) throw new Error('No verification methods provided')
40
41
 
41
42
  const publicKey = fromString(key.publicKeyHex, 'hex')
42
43
 
43
44
  for(const method of verificationMethod) {
44
45
  switch (method?.type) {
45
- case VerificationMethods.Base58:
46
- const publicKeyMultibase = bases['base58btc'].encode(publicKey)
46
+ case VerificationMethods.Ed255192020:
47
+ const publicKeyMultibase = _encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, publicKey)
47
48
  if (method.publicKeyMultibase === publicKeyMultibase) {
48
49
  return {
49
50
  verificationMethodId: method.id,
50
51
  privateKeyHex: key.privateKeyHex
51
52
  }
52
53
  }
54
+
55
+ case VerificationMethods.Ed255192018:
56
+ const publicKeyBase58 = bases['base58btc'].encode(publicKey).slice(1)
57
+ if (method.publicKeyBase58 === publicKeyBase58) {
58
+ return {
59
+ verificationMethodId: method.id,
60
+ privateKeyHex: key.privateKeyHex
61
+ }
62
+ }
53
63
 
54
64
  case VerificationMethods.JWK:
55
- const publicKeyJWK = parseToKeyValuePair({
65
+ const publicKeyJWK: any = {
56
66
  crv: 'Ed25519',
57
67
  kty: 'OKP',
58
68
  x: toString( publicKey, 'base64url' )
59
- })
60
- if (isEqualKeyValuePair(method.publicKeyJwk, publicKeyJWK)) {
69
+ }
70
+ if (JSON.stringify(method.publicKeyJWK) === JSON.stringify(publicKeyJWK)) {
61
71
  return {
62
72
  verificationMethodId: method.id,
63
73
  privateKeyHex: key.privateKeyHex
64
74
  }
75
+ } else {
76
+ throw new Error(`JWK not matching ${method.publicKeyJWK}, ${publicKeyJWK}`)
65
77
  }
66
78
  }
67
79
  }
@@ -89,62 +101,70 @@ export function createKeyPairHex(seed?: string): IKeyPair {
89
101
  }
90
102
  }
91
103
 
92
- export function createVerificationKeys(keyPair: IKeyPair, algo: MethodSpecificIdAlgo, key: TVerificationKey<TVerificationKeyPrefix, number>, length: number = 32, network: CheqdNetwork = CheqdNetwork.Testnet): IVerificationKeys {
104
+ export function createVerificationKeys(publicKey: string, algo: MethodSpecificIdAlgo, key: TVerificationKey<TVerificationKeyPrefix, number>, network: CheqdNetwork = CheqdNetwork.Testnet): IVerificationKeys {
93
105
  let methodSpecificId: TMethodSpecificId
94
106
  let didUrl: IVerificationKeys['didUrl']
107
+
108
+ publicKey = isBase64(publicKey) ? publicKey : toString(fromString(publicKey, 'hex'), 'base64')
95
109
  switch (algo) {
96
110
  case MethodSpecificIdAlgo.Base58:
97
- methodSpecificId = bases['base58btc'].encode(base64ToBytes(keyPair.publicKey))
98
- didUrl = `did:cheqd:${network}:${methodSpecificId.substring(0, length)}`
111
+ methodSpecificId = bases['base58btc'].encode(base64ToBytes(publicKey))
112
+ didUrl = `did:cheqd:${network}:${(bases['base58btc'].encode((fromString(sha256(publicKey))).slice(0,16))).slice(1)}`
99
113
  return {
100
114
  methodSpecificId,
101
115
  didUrl,
102
116
  keyId: `${didUrl}#${key}`,
103
- publicKey: keyPair.publicKey,
117
+ publicKey,
104
118
  }
105
119
  case MethodSpecificIdAlgo.Uuid:
106
- methodSpecificId = bases['base58btc'].encode(base64ToBytes(keyPair.publicKey))
120
+ methodSpecificId = bases['base58btc'].encode(base64ToBytes(publicKey))
107
121
  didUrl = `did:cheqd:${network}:${v4()}`
108
122
  return {
109
123
  methodSpecificId,
110
124
  didUrl,
111
125
  keyId: `${didUrl}#${key}`,
112
- publicKey: keyPair.publicKey,
126
+ publicKey,
113
127
  }
114
128
  }
115
129
  }
116
130
 
117
- export function createDidVerificationMethod(verificationMethodTypes: VerificationMethods[], verificationKeys: IVerificationKeys[]): VerificationMethod[] {
131
+ const isBase64 = (value: string) => /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);
132
+
133
+ export function createDidVerificationMethod(verificationMethodTypes: VerificationMethods[], verificationKeys: IVerificationKeys[]): VerificationMethodPayload[] {
118
134
  return verificationMethodTypes.map((type, _) => {
119
135
  switch (type) {
120
- case VerificationMethods.Base58:
136
+ case VerificationMethods.Ed255192020:
121
137
  return {
122
138
  id: verificationKeys[_].keyId,
123
- type: type,
139
+ type,
124
140
  controller: verificationKeys[_].didUrl,
125
- publicKeyMultibase: verificationKeys[_].methodSpecificId,
126
- publicKeyJwk: []
141
+ publicKeyMultibase: _encodeMbKey(MULTICODEC_ED25519_PUB_HEADER, base64ToBytes(verificationKeys[_].publicKey))
142
+ }
143
+
144
+ case VerificationMethods.Ed255192018:
145
+ return {
146
+ id: verificationKeys[_].keyId,
147
+ type,
148
+ controller: verificationKeys[_].didUrl,
149
+ publicKeyBase58: verificationKeys[_].methodSpecificId.slice(1)
127
150
  }
128
151
 
129
152
  case VerificationMethods.JWK:
130
153
  return {
131
154
  id: verificationKeys[_].keyId,
132
- type: type,
155
+ type,
133
156
  controller: verificationKeys[_].didUrl,
134
- publicKeyJwk: parseToKeyValuePair(
135
- {
136
- crv: 'Ed25519',
137
- kty: 'OKP',
138
- x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' )
139
- }
140
- ),
141
- publicKeyMultibase: ''
157
+ publicKeyJWK: {
158
+ crv: 'Ed25519',
159
+ kty: 'OKP',
160
+ x: toString( fromString( verificationKeys[_].publicKey, 'base64pad' ), 'base64url' )
161
+ }
142
162
  }
143
163
  }
144
164
  }) ?? []
145
165
  }
146
166
 
147
- export function createDidPayload(verificationMethods: VerificationMethod[], verificationKeys: IVerificationKeys[]): MsgCreateDidPayload {
167
+ export function createDidPayload(verificationMethods: VerificationMethodPayload[], verificationKeys: IVerificationKeys[]): MsgCreateDidPayload {
148
168
  if (!verificationMethods || verificationMethods.length === 0)
149
169
  throw new Error('No verification methods provided')
150
170
  if (!verificationKeys || verificationKeys.length === 0)
@@ -156,46 +176,23 @@ export function createDidPayload(verificationMethods: VerificationMethod[], veri
156
176
  id: did,
157
177
  controller: verificationKeys.map(key => key.didUrl),
158
178
  verificationMethod: verificationMethods,
159
- authentication: verificationKeys.map(key => key.keyId)
179
+ authentication: verificationKeys.map(key => key.keyId),
180
+ versionId: v4()
160
181
  }
161
182
  )
162
183
  }
163
184
 
164
- export function createDidPayloadWithSignInputs(seed?: string, keys?: IKeyPair[]) {
165
- if(seed && keys) throw new Error ('Only one of seed or keys should be passed as an argument')
166
-
167
- if(!keys) {
168
- keys = [seed ? createKeyPairBase64(seed) : createKeyPairBase64()]
169
- }
170
-
171
- const verificationMethodTypes = keys.map((key) => !key.algo || key.algo == MethodSpecificIdAlgo.Base58 ? VerificationMethods.Base58 : VerificationMethods.JWK)
172
- const verificationKeys = keys.map((key, i) => createVerificationKeys(key, key.algo || MethodSpecificIdAlgo.Base58, `key-${i}`))
173
- const verificationMethod = createDidVerificationMethod(verificationMethodTypes, verificationKeys)
174
-
175
- let payload : Partial<MsgCreateDidPayload> = {
176
- id: verificationKeys[0].didUrl,
177
- controller: verificationKeys.map(key => key.didUrl),
178
- verificationMethod: verificationMethod,
179
- authentication: verificationKeys.map(key => key.keyId),
180
- }
181
-
182
- const keyHexs = keys.map((key)=>convertKeyPairtoTImportableEd25519Key(key))
183
- const signInputs = keyHexs.map((key)=>createSignInputsFromImportableEd25519Key(key, verificationMethod))
184
-
185
- return { didPayload: MsgCreateDidPayload.fromPartial(payload), keys, signInputs }
186
- }
187
-
188
- export function convertKeyPairtoTImportableEd25519Key(keyPair: IKeyPair) : TImportableEd25519Key {
189
- return {
190
- type: 'Ed25519',
191
- privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex'),
192
- kid: 'kid',
193
- publicKeyHex: toString(fromString(keyPair.publicKey, 'base64'), 'hex')
194
- }
185
+ function sha256(message: string) {
186
+ return createHash('sha256').update(message).digest('hex')
195
187
  }
196
188
 
197
- export function createSignInputsFromKeyPair(didDocument: IdentifierPayload, keys: IKeyPair[]) {
198
- const keyHexs = keys.map((key)=>convertKeyPairtoTImportableEd25519Key(key))
199
- const signInputs = keyHexs.map((key)=>createSignInputsFromImportableEd25519Key(key, didDocument.verificationMethod!))
200
- return signInputs
189
+ // encode a multibase base58-btc multicodec key
190
+ function _encodeMbKey(header: any, key: Uint8Array) {
191
+ const mbKey = new Uint8Array(header.length + key.length);
192
+
193
+ mbKey.set(header);
194
+ mbKey.set(key, header.length);
195
+
196
+ return bases['base58btc'].encode(mbKey);
201
197
  }
198
+
@@ -1,11 +1,12 @@
1
- import { MsgUpdateDidPayload } from "@cheqd/ts-proto/cheqd/v1/tx"
1
+ import { MsgUpdateDidDocPayload } from "@cheqd/ts-proto/cheqd/did/v2"
2
2
  import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing"
3
3
  import { DeliverTxResponse } from "@cosmjs/stargate"
4
4
  import { fromString, toString } from 'uint8arrays'
5
+ import { v4 } from "uuid"
5
6
  import { DIDModule } from "../../src"
6
7
  import { createDefaultCheqdRegistry } from "../../src/registry"
7
8
  import { CheqdSigningStargateClient } from "../../src/signer"
8
- import { DidStdFee, ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from "../../src/types"
9
+ import { DidStdFee, ISignInputs, MethodSpecificIdAlgo, MsgCreateDidPayload, MsgDeactivateDidPayload, VerificationMethods } from "../../src/types"
9
10
  import { createDidPayload, createDidVerificationMethod, createKeyPairBase64, createVerificationKeys, exampleCheqdNetwork, faucet } from "../testutils.test"
10
11
 
11
12
  const defaultAsyncTxTimeout = 30000
@@ -28,7 +29,7 @@ describe('DIDModule', () => {
28
29
  const didModule = new DIDModule(signer)
29
30
  const keyPair = createKeyPairBase64()
30
31
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
31
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
32
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.JWK], [verificationKeys])
32
33
  const didPayload = createDidPayload(verificationMethods, [verificationKeys])
33
34
 
34
35
  const signInputs: ISignInputs[] = [
@@ -44,7 +45,7 @@ describe('DIDModule', () => {
44
45
  amount: '5000000'
45
46
  }
46
47
  ],
47
- gas: '100000',
48
+ gas: '200000',
48
49
  payer: (await wallet.getAccounts())[0].address
49
50
  }
50
51
  const didTx: DeliverTxResponse = await didModule.createDidTx(
@@ -67,8 +68,9 @@ describe('DIDModule', () => {
67
68
  const didModule = new DIDModule(signer)
68
69
  const keyPair = createKeyPairBase64()
69
70
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Uuid, 'key-1', 16)
70
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
71
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
71
72
  const didPayload = createDidPayload(verificationMethods, [verificationKeys])
73
+ didPayload.versionId = v4()
72
74
  const signInputs: ISignInputs[] = [
73
75
  {
74
76
  verificationMethodId: didPayload.verificationMethod[0].id,
@@ -82,7 +84,7 @@ describe('DIDModule', () => {
82
84
  amount: '5000000'
83
85
  }
84
86
  ],
85
- gas: '100000',
87
+ gas: '200000',
86
88
  payer: (await wallet.getAccounts())[0].address
87
89
  }
88
90
  const didTx: DeliverTxResponse = await didModule.createDidTx(
@@ -108,7 +110,7 @@ describe('DIDModule', () => {
108
110
 
109
111
  const keyPair = createKeyPairBase64()
110
112
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
111
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
113
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
112
114
  const didPayload = createDidPayload(verificationMethods, [verificationKeys])
113
115
  const signInputs: ISignInputs[] = [
114
116
  {
@@ -123,7 +125,7 @@ describe('DIDModule', () => {
123
125
  amount: '5000000'
124
126
  }
125
127
  ],
126
- gas: '100000',
128
+ gas: '200000',
127
129
  payer: (await wallet.getAccounts())[0].address
128
130
  }
129
131
  const didTx: DeliverTxResponse = await didModule.createDidTx(
@@ -139,7 +141,7 @@ describe('DIDModule', () => {
139
141
  expect(didTx.code).toBe(0)
140
142
 
141
143
  // Update the DID
142
- const updateDidPayload = MsgUpdateDidPayload.fromPartial({
144
+ const updateDidPayload = MsgCreateDidPayload.fromPartial({
143
145
  context: didPayload.context,
144
146
  id: didPayload.id,
145
147
  controller: didPayload.controller,
@@ -160,4 +162,62 @@ describe('DIDModule', () => {
160
162
  expect(updateDidTx.code).toBe(0)
161
163
  }, defaultAsyncTxTimeout)
162
164
  })
165
+
166
+ describe('deactivateDidTx', () => {
167
+ it('should deactivate a DID', async () => {
168
+ const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic, {prefix: faucet.prefix})
169
+ const registry = createDefaultCheqdRegistry(DIDModule.registryTypes)
170
+ const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet, { registry })
171
+ const didModule = new DIDModule(signer)
172
+
173
+ const keyPair = createKeyPairBase64()
174
+ const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
175
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
176
+ const didPayload = createDidPayload(verificationMethods, [verificationKeys])
177
+ const signInputs: ISignInputs[] = [
178
+ {
179
+ verificationMethodId: didPayload.verificationMethod[0].id,
180
+ privateKeyHex: toString(fromString(keyPair.privateKey, 'base64'), 'hex')
181
+ }
182
+ ]
183
+ const fee: DidStdFee = {
184
+ amount: [
185
+ {
186
+ denom: 'ncheq',
187
+ amount: '5000000'
188
+ }
189
+ ],
190
+ gas: '200000',
191
+ payer: (await wallet.getAccounts())[0].address
192
+ }
193
+ const didTx: DeliverTxResponse = await didModule.createDidTx(
194
+ signInputs,
195
+ didPayload,
196
+ (await wallet.getAccounts())[0].address,
197
+ fee
198
+ )
199
+
200
+ console.warn(`Using payload: ${JSON.stringify(didPayload)}`)
201
+ console.warn(`DID Tx: ${JSON.stringify(didTx)}`)
202
+
203
+ expect(didTx.code).toBe(0)
204
+
205
+ // Update the DID
206
+ const deactivateDidPayload: MsgDeactivateDidPayload = {
207
+ id: didPayload.id,
208
+ verificationMethod: didPayload.verificationMethod,
209
+ versionId: v4()
210
+ }
211
+
212
+ const deactivateDidTx: DeliverTxResponse = await didModule.deactivateDidTx(
213
+ signInputs,
214
+ deactivateDidPayload,
215
+ (await wallet.getAccounts())[0].address,
216
+ fee
217
+ )
218
+
219
+ console.warn(deactivateDidTx)
220
+ expect(deactivateDidTx.code).toBe(0)
221
+ }, defaultAsyncTxTimeout)
222
+ })
163
223
  })
@@ -6,7 +6,7 @@ import { createDefaultCheqdRegistry } from "../../src/registry"
6
6
  import { CheqdSigningStargateClient } from "../../src/signer"
7
7
  import { DidStdFee, ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from '../../src/types';
8
8
  import { createDidPayload, createDidVerificationMethod, createKeyPairBase64, createVerificationKeys, exampleCheqdNetwork, faucet } from "../testutils.test"
9
- import { MsgCreateResourcePayload } from '@cheqd/ts-proto/resource/v1/tx';
9
+ import { MsgCreateResourcePayload } from '@cheqd/ts-proto/cheqd/resource/v2';
10
10
  import { randomUUID } from "crypto"
11
11
 
12
12
  const defaultAsyncTxTimeout = 30000
@@ -34,7 +34,7 @@ describe('ResourceModule', () => {
34
34
 
35
35
  const keyPair = createKeyPairBase64()
36
36
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
37
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
37
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
38
38
  const didPayload = createDidPayload(verificationMethods, [verificationKeys])
39
39
 
40
40
  const signInputs: ISignInputs[] = [
@@ -48,10 +48,10 @@ describe('ResourceModule', () => {
48
48
  amount: [
49
49
  {
50
50
  denom: 'ncheq',
51
- amount: '50000000'
51
+ amount: '2500000000'
52
52
  }
53
53
  ],
54
- gas: '1000000',
54
+ gas: '200000',
55
55
  payer: (await wallet.getAccounts())[0].address
56
56
  }
57
57
 
@@ -74,6 +74,8 @@ describe('ResourceModule', () => {
74
74
  const resourcePayload: MsgCreateResourcePayload = {
75
75
  collectionId: didPayload.id.split(":").reverse()[0],
76
76
  id: randomUUID(),
77
+ version: "1.0",
78
+ alsoKnownAs: [],
77
79
  name: 'Test Resource',
78
80
  resourceType: 'test-resource-type',
79
81
  data: new TextEncoder().encode("{ \"message\": \"hello world\"}")
@@ -1,10 +1,9 @@
1
- import { VerificationMethod } from "@cheqd/ts-proto/cheqd/v1/did"
2
- import { MsgCreateDid, MsgCreateDidPayload, SignInfo } from "@cheqd/ts-proto/cheqd/v1/tx"
1
+ import { MsgCreateDidDoc, MsgCreateDidDocPayload, VerificationMethod } from "@cheqd/ts-proto/cheqd/did/v2"
3
2
  import { DirectSecp256k1HdWallet, Registry } from "@cosmjs/proto-signing"
4
- import { base64ToBytes, EdDSASigner } from "did-jwt"
5
- import { typeUrlMsgCreateDid } from '../src/modules/did'
3
+ import { EdDSASigner } from "did-jwt"
4
+ import { typeUrlMsgCreateDidDoc } from '../src/modules/did'
6
5
  import { CheqdSigningStargateClient } from "../src/signer"
7
- import { ISignInputs, MethodSpecificIdAlgo, VerificationMethods } from "../src/types"
6
+ import { ISignInputs, MethodSpecificIdAlgo, MsgCreateDidPayload, VerificationMethods } from "../src/types"
8
7
  import { fromString, toString } from 'uint8arrays'
9
8
  import { createDidPayload, createDidVerificationMethod, createKeyPairBase64, createVerificationKeys, exampleCheqdNetwork, faucet } from "./testutils.test"
10
9
  import { verify } from "@stablelib/ed25519"
@@ -42,9 +41,9 @@ describe('CheqdSigningStargateClient', () => {
42
41
  it('can be constructed with cheqd custom registry', async () => {
43
42
  const wallet = await DirectSecp256k1HdWallet.fromMnemonic(faucet.mnemonic)
44
43
  const registry = new Registry()
45
- registry.register(typeUrlMsgCreateDid, MsgCreateDid)
44
+ registry.register(typeUrlMsgCreateDidDoc, MsgCreateDidDoc)
46
45
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet, { registry })
47
- expect(signer.registry.lookupType(typeUrlMsgCreateDid)).toBe(MsgCreateDid)
46
+ expect(signer.registry.lookupType(typeUrlMsgCreateDidDoc)).toBe(MsgCreateDidDoc)
48
47
  })
49
48
  })
50
49
 
@@ -54,8 +53,8 @@ describe('CheqdSigningStargateClient', () => {
54
53
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
55
54
  const keyPair = createKeyPairBase64()
56
55
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
57
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
58
- const didPayload = createDidPayload(verificationMethods, [verificationKeys])
56
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
57
+ const didPayload = MsgCreateDidPayload.transformPayload(createDidPayload(verificationMethods, [verificationKeys]))
59
58
  const didSigner = await signer.getDidSigner(didPayload.verificationMethod[0].id, didPayload.verificationMethod)
60
59
 
61
60
  expect(didSigner).toBe(EdDSASigner)
@@ -73,7 +72,7 @@ describe('CheqdSigningStargateClient', () => {
73
72
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
74
73
  const keyPair = createKeyPairBase64()
75
74
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
76
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
75
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
77
76
  const didPayload = createDidPayload(verificationMethods, [verificationKeys])
78
77
  await expect(signer.getDidSigner(nonExistingKeyId, didPayload.verificationMethod)).rejects.toThrow()
79
78
  })
@@ -85,12 +84,12 @@ describe('CheqdSigningStargateClient', () => {
85
84
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
86
85
  const keyPair = createKeyPairBase64()
87
86
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
88
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
89
- const didPayload = createDidPayload(verificationMethods, [verificationKeys])
87
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
88
+ const didPayload = MsgCreateDidPayload.transformPayload(createDidPayload(verificationMethods, [verificationKeys]))
90
89
 
91
90
  const didSigners = await signer.checkDidSigners(didPayload.verificationMethod)
92
91
 
93
- expect(didSigners[VerificationMethods.Base58]).toBe(EdDSASigner)
92
+ expect(didSigners[VerificationMethods.Ed255192020]).toBe(EdDSASigner)
94
93
  })
95
94
 
96
95
  it('should instantiate multiple signers for a did with multiple verification methods', async () => {
@@ -98,15 +97,18 @@ describe('CheqdSigningStargateClient', () => {
98
97
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
99
98
  const keyPair1 = createKeyPairBase64()
100
99
  const keyPair2 = createKeyPairBase64()
100
+ const keyPair3 = createKeyPairBase64()
101
101
  const verificationKeys1 = createVerificationKeys(keyPair1, MethodSpecificIdAlgo.Base58, 'key-1', 16)
102
102
  const verificationKeys2 = createVerificationKeys(keyPair2, MethodSpecificIdAlgo.Base58, 'key-2', 16)
103
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58, VerificationMethods.JWK], [verificationKeys1, verificationKeys2])
104
- const didPayload = createDidPayload(verificationMethods, [verificationKeys1, verificationKeys2])
103
+ const verificationKeys3 = createVerificationKeys(keyPair3, MethodSpecificIdAlgo.Base58, 'key-3', 16)
104
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020, VerificationMethods.JWK, VerificationMethods.Ed255192018], [verificationKeys1, verificationKeys2, verificationKeys3])
105
+ const didPayload = MsgCreateDidPayload.transformPayload(createDidPayload(verificationMethods, [verificationKeys1, verificationKeys2, verificationKeys3]))
105
106
 
106
107
  const didSigners = await signer.checkDidSigners(didPayload.verificationMethod)
107
108
 
108
- expect(didSigners[VerificationMethods.Base58]).toBe(EdDSASigner)
109
+ expect(didSigners[VerificationMethods.Ed255192020]).toBe(EdDSASigner)
109
110
  expect(didSigners[VerificationMethods.JWK]).toBe(EdDSASigner)
111
+ expect(didSigners[VerificationMethods.Ed255192018]).toBe(EdDSASigner)
110
112
  })
111
113
 
112
114
  it('should throw for non-supported verification method', async () => {
@@ -114,9 +116,9 @@ describe('CheqdSigningStargateClient', () => {
114
116
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
115
117
  const verificationMethod: Partial<VerificationMethod> = {
116
118
  id: nonExistingKeyId,
117
- type: nonExistingVerificationMethod,
119
+ verificationMethodType: nonExistingVerificationMethod,
118
120
  controller: nonExistingDid,
119
- publicKeyMultibase: nonExistingPublicKeyMultibase
121
+ verificationMaterial: JSON.stringify({publicKeyMultibase: nonExistingPublicKeyMultibase})
120
122
  }
121
123
 
122
124
  await expect(signer.checkDidSigners([VerificationMethod.fromPartial(verificationMethod)])).rejects.toThrow()
@@ -129,8 +131,8 @@ describe('CheqdSigningStargateClient', () => {
129
131
  const signer = await CheqdSigningStargateClient.connectWithSigner(exampleCheqdNetwork.rpcUrl, wallet)
130
132
  const keyPair = createKeyPairBase64()
131
133
  const verificationKeys = createVerificationKeys(keyPair, MethodSpecificIdAlgo.Base58, 'key-1', 16)
132
- const verificationMethods = createDidVerificationMethod([VerificationMethods.Base58], [verificationKeys])
133
- const didPayload = createDidPayload(verificationMethods, [verificationKeys])
134
+ const verificationMethods = createDidVerificationMethod([VerificationMethods.Ed255192020], [verificationKeys])
135
+ const didPayload = MsgCreateDidPayload.transformPayload(MsgCreateDidPayload.fromPartial(createDidPayload(verificationMethods, [verificationKeys])))
134
136
  const signInputs: ISignInputs[] = [
135
137
  {
136
138
  verificationMethodId: didPayload.verificationMethod[0].id,
@@ -139,12 +141,12 @@ describe('CheqdSigningStargateClient', () => {
139
141
  ]
140
142
  const signInfos = await signer.signCreateDidTx(signInputs, didPayload)
141
143
  const publicKeyRaw = fromString(keyPair.publicKey, 'base64')
142
- const messageRaw = MsgCreateDidPayload.encode(didPayload).finish()
143
- const signatureRaw = base64ToBytes(signInfos[0].signature)
144
+ const messageRaw = MsgCreateDidDocPayload.encode(didPayload).finish()
145
+
144
146
  const verified = verify(
145
147
  publicKeyRaw,
146
148
  messageRaw,
147
- signatureRaw
149
+ signInfos[0].signature
148
150
  )
149
151
 
150
152
  expect(verified).toBe(true)