Skip to main content
Version: next

Class: DataSchema

The DataSchema class abstracts UniRep data into a JavaScript object. This class can be used to encode and decode attestation data, and build attestations that are ready to be submitted to the UniRep smart contract.

Example

import { Attestation, DataSchema, SchemaField } from '@unirep/core'

const schema: SchemaField[] = [
{name: 'posRep', type: 'uint64', updateBy: 'sum',},
{name: 'negRep', type: 'uint64', updateBy: 'sum',},
{name: 'graffiti', type: 'uint205', updateBy: 'replace',},
{name: 'postCount', type: 'uint49', updateBy: 'sum',},
{name: 'commentCount', type: 'uint49', updateBy: 'sum',},
{name: 'voteCount', type: 'uint49', updateBy: 'sum',},
]

const d = new DataSchema(schema)

Constructors

constructor

new DataSchema(schema, config?)

Parameters

NameTypeDefault value
schemaSchemaField[]undefined
configCircuitConfigCircuitConfig.default

Defined in

packages/core/src/DataSchema.ts:55

Properties

config

config: CircuitConfig

Defined in

packages/core/src/DataSchema.ts:53


schema

schema: any[]

Defined in

packages/core/src/DataSchema.ts:52

Methods

buildAttestation

buildAttestation(change): Attestation

Build an Attestation object to be used for a UniRep contract

Parameters

NameTypeDescription
changeObjectThe data change. If it is sum field, the data will be changed by addition. If it is replacement field, the data will be changed by replacement.
change.namestring-
change.valbigint-

Returns

Attestation

The attestation object will be submitted to the Unirep contract.

Example

Sum field

// 10 will be added to the 'posRep' field in the user data
const sumChange = { name: 'posRep', val: BigInt(10) }
const sumAttestation: Attestation = d.buildAttestation(sumChange)

Replacement field

// 20 will replace the current value in the 'graffiti' field in user data
const replacementChange = { name: 'graffiti', val: BigInt(20) }
const replacementAttestation: Attestation = d.buildAttestation(replacementChange)

Defined in

packages/core/src/DataSchema.ts:168


buildAttestations

buildAttestations(changes): Attestation[]

Build multiple Attestation objects to be used for a UniRep contract

Parameters

NameTypeDescription
changes{ name: string ; val: bigint }[]The array of data change.

Returns

Attestation[]

The array of attestations will be submitted to the Unirep contract.

Example

// Multiple attestations can be built using `buildAttestations()`
const changes = [
{ name: 'posRep', val: BigInt(10) },
{ name: 'negRep', val: BigInt(10) },
{ name: 'negRep', val: BigInt(20) },
{ name: 'graffiti', val: BigInt(30) },
]

//Returns two `Attestation` objects: 'posRep' and 'negRep' attestations are combined into one attestation
const attestations: Attestation[] = d.buildAttestations(changes)

Defined in

packages/core/src/DataSchema.ts:209


parseData

parseData(data): any

Parse encoded schema, producing a dictionary of user-defined field names and attestation values

Parameters

NameTypeDescription
databigint[]The raw data appended to the Unirep contract.

Returns

any

The names of the data and its values.

Example

// JS literal representing emitted data from a UniRep contract
const data = [
553402322211286548490n,
0n,
0n,
0n,
205688069665150755269371147819668813122841983204197482918576158n,
0n
]

const parsedData = d.parseData(data)
// Result:
// parsedData = {
// posRep: 10n,
// negRep: 30n,
// graffiti: 30n,
// postCount: 0n,
// commentCount: 0n,
// voteCount: 0n
// }

Defined in

packages/core/src/DataSchema.ts:276


parseSchema

parseSchema(schema): any[]

Verify a user-defined data schema

Parameters

NameTypeDescription
schemaSchemaField[]The array of SchemaField

Returns

any[]

{
...schema: SchemaField, // exploded `SchemaField` fields
dataIndex: number,
offset: number, // bit offset in attester change
bits: number // bits allocated
}

Defined in

packages/core/src/DataSchema.ts:73