Skip to main content

onchainid.issueKycClaim(IssueKycClaim)

Generate and sign a KYC claim for an ONCHAINID identity. This does not broadcast a transaction; it returns the encoded claim payload and the issuer’s signature that can be submitted or verified off-chain/on-chain by downstream contracts.

IssueKycClaim Type Parameters

ParameterTypeRequiredDescription
claimIssuerSignerSignerRequiredClaim Issuer signer authorized to issue KYC claims. Must be connected to a provider.
claimIssuerContractstringRequiredEVM address of the ClaimIssuer contract.
subjectIdentitystringRequiredONCHAINID identity contract address of the subject being KYCed.
namestringRequiredFirst name of the identity owner.
lastNamestringRequiredLast name of the identity owner.
dateOfBirthstringRequiredDate of birth in ISO format YYYY-MM-DD.
placeOfBirthstringRequiredPlace of birth.
uristringOptionalOptional URI pointing to KYC evidence/metadata.

Returns

FieldTypeDescription
claimIClaimEncoded claim payload: { identity, issuer, topic, scheme, data, uri }.
signaturestringSignature over the claim by claimIssuer.

Usage

TypeScript

import 'dotenv/config';
import { RWA, Chain, type SDKInit, type GetIdentity, type IssueKycClaim } from "@peaq-network/rwa";
import { JsonRpcProvider, Wallet } from "ethers";

async function main() {
    // 0. Create rwa_sdk instance and get provider
    const provider = new JsonRpcProvider(process.env.HTTPS_BASE_URL);
    const init: SDKInit = { chainId: Chain.AGUNG, provider: provider };
    const rwa_sdk = new RWA(init);

    // 1. Get Alice EOA
    const aliceEoa = process.env.ALICE_PUBLIC_ADDRESS

    // 2. Get Alice identity
    const getIdentity: GetIdentity = { subject: aliceEoa! };
    const alice = await rwa_sdk.onchainid.getIdentity(getIdentity);
    console.log("Alice Identity", alice);

    // 3. Get Claim Issuer Admin
    const claimIssuer = new Wallet(process.env.CLAIM_ISSUER_PRIVATE_KEY!, provider);

    // 4. Get Issuer Contract
    const issuerContract = process.env.CLAIM_ISSUER_CONTRACT_ADDRESS;

    // 5. Issue signed KYC claim
    const issueKycClaim: IssueKycClaim = {
        claimIssuerSigner: claimIssuer,
        claimIssuerContract: issuerContract!,
        subjectIdentity: alice.identity,
        name: "Alice",
        lastName: "Doe",
        dateOfBirth: "1990-01-01",
        placeOfBirth: "New York",
        uri: "https://example.com/kyc"
    }
    const { claim, signature } = await rwa_sdk.onchainid.issueKycClaim(issueKycClaim);
    console.log("Result", { claim, signature });
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});

JavaScript

import 'dotenv/config';
import { RWA, Chain } from "@peaq-network/rwa";
import { JsonRpcProvider, Wallet } from "ethers";

async function main() {
    // 0. Create rwa_sdk instance and get provider
    const provider = new JsonRpcProvider(process.env.HTTPS_BASE_URL);
    const rwa_sdk = new RWA({ chainId: Chain.AGUNG, provider: provider });

    // 1. Get Alice EOA
    const aliceEoa = process.env.ALICE_PUBLIC_ADDRESS

    // 2. Get Alice identity
    const alice = await rwa_sdk.onchainid.getIdentity({ subject: aliceEoa });
    console.log("Alice Identity", alice);

    // 3. Get Claim Issuer Admin
    const claimIssuer = new Wallet(process.env.CLAIM_ISSUER_PRIVATE_KEY, provider);

    // 4. Get Issuer Contract
    const issuerContract = process.env.CLAIM_ISSUER_CONTRACT_ADDRESS;


    // 5. Issue signed KYC claim
    const result = await rwa_sdk.onchainid.issueKycClaim({
        claimIssuerSigner: claimIssuer,
        claimIssuerContract: issuerContract,
        subjectIdentity: alice.identity,
        name: "Alice",
        lastName: "Doe",
        dateOfBirth: "1990-01-01",
        placeOfBirth: "New York",
        uri: "https://example.com/kyc"
    });
    console.log("Result", result);
}

main().catch((err) => {
  console.error(err);
  process.exit(1);
});

Example outputs

Alice Identity {
 status: 'found',
 identity: '0x1d0FDE95e971c5c78B6f9c745a8e2791Fe0c962C'
}
Result {
 claim: {
   identity: '0x1d0FDE95e971c5c78B6f9c745a8e2791Fe0c962C',
   issuer: '0x842d57632954943304441258E94f3f089235022c',
   topic: ClaimTopics.CT_KYC_APPROVED,
   scheme: 1,
   data: '0x252ec8044814d556905cc1587f4a375a2acfe3f84a17d7d104accd32ee25b3b6',
   uri: 'https://example.com/kyc'
 },
 signature: '0xffd77807790d0e764bcdd2bc7661c6a3e1e016758100f4afc5d6a5f3552455791ddcfd2bd5b705c27eaa66c45ca1c0bf7b53f5a3a533b6023b8bf3f2132a363a1b'
}
Note: topic and scheme are set according to the RWA KYC specification. Ensure your claimIssuer and issuerContract are recognized by your registry/verification flow for successful validation.