diff --git a/src/Reclaim.ts b/src/Reclaim.ts index 72ba31d..53e423c 100644 --- a/src/Reclaim.ts +++ b/src/Reclaim.ts @@ -1,4 +1,4 @@ -import type { Proof, Context } from './utils/interfaces' +import type { Proof, Context, OnchainProof, ProviderClaimData } from './utils/interfaces' import { getIdentifierFromClaimInfo } from './witness' import { SignedClaim, @@ -8,6 +8,9 @@ import { TemplateData, InitSessionResponse, ClaimCreationType, + ClaimInfo, + CompleteClaimData, + OnchainSignedClaim, } from './utils/types' import { SessionStatus } from './utils/types' import { ethers } from 'ethers' @@ -103,23 +106,71 @@ export async function verifyProof(proofOrProofs: Proof | Proof[]): Promise([ - ['epoch', proof.claimData.epoch], - ['identifier', proof.claimData.identifier], - ['owner', proof.claimData.owner], - ['timestampS', proof.claimData.timestampS], - ]); - const signedClaim = { - claim: Object.fromEntries(claimBuilder), - signatures: proof.signatures, - }; +// Reverses on-chain proofs +export function transformFromOnchain(onchainProof: OnchainProof): Proof { + + const claimData: ProviderClaimData = { + provider: '', + parameters: '', + owner: '', + timestampS: 0, + context: '', + identifier: '', + epoch: 0 + } + + let proof: Proof = { + identifier: '', + claimData, + signatures: [], + witnesses: [], + extractedParameterValues: undefined + } + + proof.signatures = onchainProof.signedClaim.signatures + proof.identifier = onchainProof.signedClaim.claim.identifier + + proof.claimData = { + provider: onchainProof.claimInfo.provider, + parameters: onchainProof.claimInfo.parameters, + context: onchainProof.claimInfo.context, + owner: onchainProof.signedClaim.claim.owner, + timestampS: onchainProof.signedClaim.claim.timestampS, + epoch: onchainProof.signedClaim.claim.epoch, + identifier: onchainProof.signedClaim.claim.identifier, + } + + proof.witnesses = [ + { + "id": "0x244897572368eadf65bfbc5aec98d8e5443a9072", + "url": "wss://attestor.reclaimprotocol.org/ws" + } + ] + + return proof +} + +// Transforms proofs for on-chain verification +export function transformForOnchain(proof: Proof): OnchainProof { + + const claimInfo: ClaimInfo = { + context: proof.claimData.context, + provider: proof.claimData.provider, + parameters: proof.claimData.parameters + } + + const claim : CompleteClaimData = { + owner: proof.claimData.owner, + epoch: proof.claimData.epoch, + identifier: proof.claimData.identifier, + timestampS: proof.claimData.timestampS + } + + const signedClaim: OnchainSignedClaim = { + claim, + signatures: proof.signatures + } + return { claimInfo, signedClaim }; } diff --git a/src/utils/interfaces.ts b/src/utils/interfaces.ts index ac4711d..7df48a8 100644 --- a/src/utils/interfaces.ts +++ b/src/utils/interfaces.ts @@ -1,3 +1,5 @@ +import { ClaimInfo, OnchainSignedClaim, SignedClaim } from "./types"; + // Proof-related interfaces export interface Proof { identifier: string; @@ -14,6 +16,11 @@ export interface WitnessData { url: string; } +export interface OnchainProof { + claimInfo: ClaimInfo, + signedClaim: OnchainSignedClaim +} + export interface ProviderClaimData { provider: string; parameters: string; diff --git a/src/utils/types.ts b/src/utils/types.ts index 7886505..cfa5e06 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -8,13 +8,18 @@ export type ClaimInfo = Pick & AnyClaimInfo; +export type CompleteClaimData = Pick & AnyClaimInfo; export type SignedClaim = { claim: CompleteClaimData; signatures: Uint8Array[]; }; +export type OnchainSignedClaim = { + claim: CompleteClaimData; + signatures: string[]; +}; + // Request and session-related types export type CreateVerificationRequest = { providerIds: string[];