RariMe Connector
RariMe connector is used to install snap and exposes methods for calling snap on dApps and other applications.
Getting started
Installation
npm install @rarimo/rarime-connector
yarn add @rarimo/rarime-connector
Create a snap connector instance
import { ZkpSnap } from '@rarimo/rarime-connector';
export const zkpSnap = new ZkpSnap();
Establish connection
await zkpSnap.enable();
Check connection status
const isInstalled = await zkpSnap.isInstalled();
Additional helpers
import { isMetamaskInstalled } from '@rarimo/rarime-connector';
const init = async () => {
const isInstalled = await isMetamaskInstalled();
if (isInstalled) {
}
};
ZKP quick examples
Establish connection
import { ZkpSnap } from '@rarimo/rarime-connector';
const zkpSnap = new ZkpSnap();
await zkpSnap.enable();
Create/import identity
Create an identity
const { identityIdString, identityIdBigIntString } =
await zkpSnap.createIdentity();
console.log(identityIdString, identityIdBigIntString);
Or import identity
const { identityIdString, identityIdBigIntString } =
await zkpSnap.createIdentity({
privateKeyHex: '0x...',
});
console.log(identityIdString, identityIdBigIntString);
Show private key in metamask dialog
await zkpSnap.exportIdentity();
Get identity pubKey and it's bigInt representation
const { identityIdString, identityIdBigIntString } =
await zkpSnap.getIdentity();
console.log(identityIdString, identityIdBigIntString);
Check Verifiable Credentials existence or save new one to the private store
If you want to save Verifiable Credentials to private store, then first things first get your ClaimOffer, for example from issuer api.
claimOffer - is a challenge for generating AuthV2 proof
const claimOffer: SaveCredentialsRequestParams = await api.get(
`/example/issuer/api/${identityIdString}/[claim-type]`,
);
After that, you can save Verifiable Credential to the private store
const { type, issuer } = await zkpSnap.saveCredentials(claimOffer);
Or if you sure, that you have a saved Verifiable Credential in your private store, you can use query based request to ensure that it exists
const proofRequest: CreateProofRequestParams = {
circuitId: CircuitId.AtomicQueryMTPV2OnChain,
accountAddress: 'your_metamask_address' as string,
issuerDid: '...',
query: {
allowedIssuers: ['*'],
credentialSubject: {
yourProperty: {
$eq: 1,
},
},
type: ['VerifiableCredential', 'YourCredentialType'],
},
};
const { type, issuer } = await zkpSnap.checkCredentialExistence({
claimOffer,
proofRequest,
});
console.log(type, issuer);
Remove Verifiable Credentials from the private store
await zkpSnap.removeCredentials({
ids: ['id1', 'id2'],
});
Get All Verifiable Credentials
const vcs = await zkpSnap.getCredentials();
console.log(vcs);
important!
Note that calling removeCredentials and getCredentials methods in @rarimo/rarime snap are stricted to domain origins whitelist
Check if state contract on Rarimo chain is synced with the lightweight state contract on current connected chain in metamask
const isStateSynced = await zkpSnap.checkStateContractSync();
Find credentials by query, Generate Proof and return proof data within state update details if it necessary
const proofRequest: CreateProofRequestParams = {
circuitId: CircuitId.AtomicQueryMTPV2OnChain,
accountAddress: 'your_metamask_address' as string,
issuerDid: '...',
query: {
allowedIssuers: ['*'],
credentialSubject: {
yourProperty: {
$eq: 1,
},
},
type: ['VerifiableCredential', 'YourCredentialType'],
},
};
const { updateStateDetails, updateStateTx, zkpProof, statesMerkleData } =
await zkpSnap.createProof(proofRequest);