Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 1x 1x 1x 1x 55x 1x 1x 55x 55x 55x 1x 55x 55x 55x 55x | import { ELEM_ANCHORED_DID_METHOD, ELEM_DID_METHOD, JOLO_DID_METHOD, POLYGON_DID_METHOD, POLYGON_TESTNET_DID_METHOD, } from '../_defaultConfig' import { RegistryApiService } from '@affinidi/internal-api-clients' import { KeysService, LocalKeyVault, PolygonDidDocumentService } from '@affinidi/common' import { DidMethod } from '../dto/shared.dto' type AnchoringParams = { registry: RegistryApiService keysService: KeysService didMethod: DidMethod did: string nonce: number anchoredDidElem: boolean additionalJoloParams?: { didDocument: any seedHex: string } origin?: string } const computePreparedJoloParams = async ({ registry, keysService, nonce, additionalJoloParams }: AnchoringParams) => { if (!additionalJoloParams) { throw new Error('missing jolo params') } const { didDocument, seedHex } = additionalJoloParams const did = didDocument.id const signedDidDocument = await keysService.signDidDocument(didDocument) const { body: bodyDidDocument } = await registry.putDocumentInIpfs({ document: signedDidDocument }) const didDocumentAddress = bodyDidDocument.hash const { body: { digestHex }, } = await registry.createAnchorTransaction({ nonce, did, didDocumentAddress }) const transactionSignatureJson = digestHex ? await keysService.createTransactionSignature(digestHex, seedHex) : '' const transactionPublicKey = KeysService.getAnchorTransactionPublicKey(seedHex, JOLO_DID_METHOD) const ethereumPublicKeyHex = transactionPublicKey.toString('hex') return { did, didDocumentAddress, ethereumPublicKeyHex, transactionSignatureJson, nonce } } const computePreparedElemParams = async ({ did }: AnchoringParams) => { return { did, didDocumentAddress: '', ethereumPublicKeyHex: '', transactionSignatureJson: '' } } const computePreparedPolygonParams = async ({ did, keysService, didMethod, registry }: AnchoringParams) => { const didService = new PolygonDidDocumentService(new LocalKeyVault(keysService), { isTestnet: didMethod === 'polygon:testnet', }) const publicKeyBase58 = didService.getMyPubKeyBase58() const { body: { digestHex }, } = await registry.createAnchorTransaction({ did, publicKeyBase58 }) const transactionSignatureJson = await keysService.createTransactionSignature(digestHex) return { did, publicKeyBase58, transactionSignatureJson } } const computePreparedAnchoringParams = async (params: AnchoringParams) => { const { didMethod } = params switch (didMethod) { case JOLO_DID_METHOD: return computePreparedJoloParams(params) case ELEM_DID_METHOD: case ELEM_ANCHORED_DID_METHOD: return computePreparedElemParams(params) case POLYGON_DID_METHOD: case POLYGON_TESTNET_DID_METHOD: return computePreparedPolygonParams(params) default: throw new Error(`did method: "${didMethod}" is not supported`) } } export const anchorDid = async (params: AnchoringParams): Promise<{ did: string }> => { const { registry, anchoredDidElem, nonce } = params const preparedParams = await computePreparedAnchoringParams(params) const response = await registry.anchorDid({ ...preparedParams, nonce, anchoredDidElem, origin: params.origin, }) return { did: response.body.did } } |