Lewati ke isi

Layanan Skema Dokumen UID

Modul UidDocumentSchema menyediakan utilitas untuk membuat, menyimpan, dan mengambil Skema Dokumen UID di blockchain IDCHAIN. Skema adalah definisi yang dapat digunakan kembali (mirip dengan Skema JSON) yang menstandardisasi struktur kredensial untuk penerbitan dan verifikasi.


Ringkasan

Layanan ini memungkinkan pengembang untuk:

  • Buat skema yang dapat digunakan kembali (misalnya, ID Nasional, sertifikat).
  • Simpan skema secara on-chain sehingga dapat direferensikan oleh banyak penerbit.
  • Ambil skema dari blockchain untuk validasi atau digunakan kembali.

Skema menentukan struktur subjek kredensial untuk memastikan konsistensi dan interoperabilitas di seluruh dApps.

Referensi API

Skema Toko

UidDocumentSchema.storeSchema(verifierAccount, verifierDid, uidDocument): Promise<IUidDocument>

Menyimpan Skema Dokumen UID baru di blockchain. Jika skema sudah ada, metode akan melewati pembuatan dan mengembalikan skema yang ada.

Parameter:

  • verifierAccount (UidKeyringPair): Akun blockchain yang diberi wewenang untuk mengirimkan transaksi skema.
  • verifierDid (Uid): URI DID dari verifikator (pemilik skema).
  • uidDocument (IUidDocument): Objek skema, biasanya dibuat dengan fromProperties atau fungsi pembantu (seperti generateSchema).

Pengembalian:

  • IUidDocument: Skema disimpan atau diambil dari rantai.

Ambil Dokumen Uid

UidDocumentSchema.fetchUidDocument(uidDocumentId): Promise<IUidDocumentDetails>

Mengambil Skema Dokumen UID dari blockchain berdasarkan ID-nya.

Parameter:

  • uidDocumentId (string): ID skema unik. Contoh formatnya: uid:dokumen:0x329a2a5861ea63c250763e5e4c4d4a18fe4470a31e541365c7fb831e5432b940

Pengembalian:

  • IUidDocumentDetails: Objek yang berisi:
  • uidDocument: Konten skema.
  • metadata: Metadata on-chain (versi, stempel waktu, dll.).

Hasilkan Skema

generateSchema(schemaName: string, fields: Record<string, { type: string }>, version: "V1" | string): IUidDocument

Fungsi utilitas (contoh) untuk dengan cepat menghasilkan Skema Dokumen UID. Ini bukan bagian dari modul inti namun merupakan pola yang direkomendasikan untuk proyek.

Parameter:

  • schemaName (string): Judul skema yang dapat dibaca manusia.
  • fields (object): Definisi field dengan anotasi tipe (string, angka, dll.).
  • version (string): Versi skema (biasanya "V1").

Pengembalian:

  • IUidDocument: Objek Skema Dokumen UID yang siap digunakan.

Contoh

import { fromProperties, IUidDocument } from "@idchain-sdk";

function generateKTPSchema(): IUidDocument {
  console.log("⚙️  Creating KTP Schema...");
  const uidDocument = fromProperties(
    "KTP Schema",
    {
      NIK: { type: "string" },
      Nama: { type: "string" },
      TTL: { type: "string" },
      status: { type: "string" },
    },
    "V1"
  );
  console.log("✅ Schema generated");
  return uidDocument;
}

// Penggunaan
const schema = generateKTPSchema();
await UidDocumentSchema.storeSchema(attesterAccount, attesterDid.uri, schema);

Contoh Penggunaan Lengkap

import {
  connect,
  disconnect,
  fromProperties,
  UidDocumentSchema,
  IUidDocument,
} from "@id-chain";

// Helper: Menghasilkan skema KTP yang terstandarisasi
function generateKTPSchema(): IUidDocument {
  console.log("⚙️  Creating KTP Schema...");
  const uidDocument = fromProperties(
    "KTP Schema",
    {
      NIK: { type: "string" },
      Nama: { type: "string" },
      TTL: { type: "string" },
      status: { type: "string" },
    },
    "V1"
  );
  console.log("✅ Schema generated");
  return uidDocument;
}

async function manageSchemas() {
  await connect(process.env.WSS_ADDRESS as string);

  // Langkah 1: Buat skema
  const schema = generateKTPSchema();

  // Langkah 2: Simpan skema on-chain (untuk DID attester)
  const storedSchema = await UidDocumentSchema.storeSchema(
    attesterAccount,
    attesterDid.uri,
    schema
  );
  console.log("Stored schema ID:", storedSchema.$id);

  // Langkah 3: Ambil skema dari blockchain
  const fetched = await UidDocumentSchema.fetchUidDocument(storedSchema.$id);
  console.log("Fetched UID Document Schema:", JSON.stringify(fetched, null, 2));

  await disconnect();
}

manageSchemas();

Penanganan Kesalahan

  • DID Hilang: Menampilkan "Could not resolve DID" jika verifierDid tidak dapat diselesaikan.
  • Skema Tidak Valid: Akan muncul selama penyimpanan jika validasi atau pengkodean gagal.
  • Kesalahan Jaringan: Kegagalan koneksi Blockchain akan menyebabkan operasi pengambilan dan penyimpanan ditolak.

Modul Terkait