Lewati ke isi

Layanan APAKAH

Modul DidService menyediakan alat untuk membuat, menyelesaikan, memperbarui, dan menghapus Pengidentifikasi Terdesentralisasi (DID) pada blockchain IDCHAIN. Ini mendukung DID sederhana (untuk pengklaim) dan DID penuh (untuk pengesahan dengan kunci tambahan untuk kredensial dan delegasi).

Ringkasan

Layanan DID membantu pengembang:

  • Buat DID untuk Penggugat (hanya kunci autentikasi dasar).
  • Buat DID untuk Attester (autentikasi, enkripsi, pernyataan, kunci delegasi).
  • Lampirkan titik akhir layanan (misalnya, untuk kredensial penerbitan).
  • Selesaikan Dokumen DID.
  • Hapus DID bila tidak diperlukan lagi.

Semua operasi DID diautentikasi DID, artinya transaksi ditandatangani menggunakan kunci DID dan dikirimkan dengan akun resmi.

Referensi API

Buat Did Claimer

DidService.createDidClaimer(submitterAccount, { authentication }, signCallback): Promise<DidInfo>

Membuat Claimer DID (DID yang disederhanakan hanya dengan kunci autentikasi).

Parameter:

  • submitterAccount (UidKeyringPair): Akun yang diberi wewenang untuk mengirimkan transaksi DID.
  • authentication (NewDidVerificationKey): Objek dengan publicKey dan type (misalnya, "ed25519").
  • signCallback (GetStoreTxSignCallback): Callback asinkron digunakan untuk menandatangani payload pembuatan DID.

Pengembalian:

  • DidInfo: Objek yang berisi:
  • document: UidDocument (Dokumen DID yang dibuat).
  • metadata: Info tambahan terkait rantai (misalnya, status penonaktifan).

Contoh:

const claimerKeys = await AccountService.generateKeypairs(mnemonic);
const signCallback = async ({ data }) => ({
  keyType: "ed25519",
  signature: claimerKeys.authentication.sign(data),
});

const didInfo = await DidService.createDidClaimer(
  accountClaimer,
  {
    authentication: {
      publicKey: claimerKeys.authentication.publicKey,
      type: claimerKeys.authentication.type,
    },
  },
  signCallback
);

console.log("Claimer DID URI:", didInfo.document.uri);

Buat Did Attester

DidService.createDidAttester(submitterAccount, { otentikasi, keyAgreement, assertionMethod, abilityDelegation }, signCallback): Janji<UidDocument>

Membuat Full Attester DID dengan beberapa kunci untuk tujuan berbeda:

  • otentikasi – Otentikasi & penandatanganan.
  • Perjanjian Kunci – Enkripsi.
  • assertionMethod – Penerbitan kredensial.
  • capabilityDelegation – Delegasi dan otorisasi.

Parameter:

  • submitterAccount (UidKeyringPair): Akun yang mengirimkan transaksi.
  • Keys(object): Masing-masing berisi publicKey dan type.
  • signCallback (GetStoreTxSignCallback): Panggilan balik asinkron untuk penandatanganan.

Pengembalian:

  • UidDocument: Dokumen DID lengkap disimpan secara on-chain.

Contoh:

const keys = await AccountService.generateKeypairs(mnemonic);
const signCallback = async ({ data }) => ({
  keyType: "ed25519",
  signature: keys.authentication.sign(data),
});

const attesterDid = await DidService.createDidAttester(
  accountAttester,
  {
    authentication: {
      publicKey: keys.authentication.publicKey,
      type: keys.authentication.type,
    },
    keyAgreement: {
      publicKey: keys.keyAgreement.publicKey,
      type: keys.keyAgreement.type,
    },
    assertionMethod: {
      publicKey: keys.assertionMethod.publicKey,
      type: keys.assertionMethod.type,
    },
    capabilityDelegation: {
      publicKey: keys.capabilityDelegation.publicKey,
      type: keys.capabilityDelegation.type,
    },
  },
  signCallback
);

console.log("Attester DID URI:", attesterDid.uri);

Menyelesaikan DID

DidService.resolveDid(account: UidKeyringPair): Promise<UidDocument | null>

Menyelesaikan Dokumen DID untuk akun tertentu.

Parameter:

  • account (UidKeyringPair): Akun yang DID-nya akan diselesaikan.

Pengembalian:

  • UidDocument jika ditemukan, null jika DID tidak ada atau dinonaktifkan.

Contoh:

const resolved = await DidService.resolveDid(accountAttester);
if (resolved) {
  console.log("Resolved DID Document:", resolved);
}

Hapus DID

DidService.deleteDid(submitterAccount, fullDid): Promise<void>

Menghapus DID dari blockchain. Harus ditandatangani dengan kunci otentikasi DID dan diserahkan oleh akun resmi.

Parameter:

  • submitterAccount (UidKeyringPair): Akun diberi wewenang untuk melakukan penghapusan.
  • fullDid (Uid): DID URI yang akan dihapus.

Pengembalian:

  • void (memunculkan kesalahan jika gagal).

Contoh:

await DidService.deleteDid(accountClaimer, userDid.document.uri);
console.log("DID deleted successfully");

Contoh Penggunaan

import { AccountService, DidService } from "@idchain-sdk";

async function manageDids() {
  const { mnemonic, account } = await AccountService.generateAccount();
  const keys = await AccountService.generateKeypairs(mnemonic);

  // Buat DID Attester
  const attesterDid = await DidService.createDidAttester(
    account,
    {
      authentication: {
        publicKey: keys.authentication.publicKey,
        type: keys.authentication.type,
      },
      keyAgreement: {
        publicKey: keys.keyAgreement.publicKey,
        type: keys.keyAgreement.type,
      },
      assertionMethod: {
        publicKey: keys.assertionMethod.publicKey,
        type: keys.assertionMethod.type,
      },
      capabilityDelegation: {
        publicKey: keys.capabilityDelegation.publicKey,
        type: keys.capabilityDelegation.type,
      },
    },
    async ({ data }) => ({
      keyType: "ed25519",
      signature: keys.authentication.sign(data),
    })
  );

  console.log("Attester DID:", attesterDid.uri);

  // Lampirkan titik akhir layanan
  await DidService.setServiceDid(
    attesterDid.uri,
    account,
    "#vc-endpoint",
    "https://gateway.example"
  );

  // Selesaikan lalu hapus DID
  const resolved = await DidService.resolveDid(account);
  console.log("Resolved DID:", resolved?.uri);

  await DidService.deleteDid(account, attesterDid.uri);
  console.log("DID removed");
}

manageDids();

Penanganan Kesalahan

  • DID yang belum terselesaikan: deleteDid throw jika DID tidak dapat diselesaikan ("Could not resolve DID").
  • DID yang dinonaktifkan: resolveDid mengembalikan null jika DID dinonaktifkan atau hilang.
  • Kesalahan Penandatanganan: Jika signCallback gagal atau kunci tidak valid, pembuatan DID akan gagal.

Modul Terkait