From 68b74b70c092802feb2e6c29003c83c9d494a2a8 Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@trentesaux.fr> Date: Wed, 22 Nov 2023 14:41:01 +0100 Subject: [PATCH] update typegen and schema (but not processor) --- schema.graphql | 48 +++++-- src/model/generated/account.model.ts | 6 +- src/model/generated/cert.model.ts | 9 +- src/model/generated/identity.model.ts | 51 +++++++- src/model/generated/index.ts | 3 + src/model/generated/membership.model.ts | 24 ++++ src/model/generated/smithCert.model.ts | 23 ++++ src/model/generated/smithMembership.model.ts | 24 ++++ src/types/cert/storage.ts | 76 +++++++++++ src/types/identity/storage.ts | 131 +++++++++++++++++++ src/types/index.ts | 1 + src/types/membership/storage.ts | 116 ++++++++++++++++ src/types/smith-cert/storage.ts | 76 +++++++++++ src/types/smith-membership/storage.ts | 116 ++++++++++++++++ src/types/storage.ts | 5 + src/types/v700.ts | 80 ++++++++++- typegen.json | 10 +- 17 files changed, 771 insertions(+), 28 deletions(-) create mode 100644 src/model/generated/membership.model.ts create mode 100644 src/model/generated/smithCert.model.ts create mode 100644 src/model/generated/smithMembership.model.ts create mode 100644 src/types/cert/storage.ts create mode 100644 src/types/identity/storage.ts create mode 100644 src/types/membership/storage.ts create mode 100644 src/types/smith-cert/storage.ts create mode 100644 src/types/smith-membership/storage.ts create mode 100644 src/types/storage.ts diff --git a/schema.graphql b/schema.graphql index 0a7b6eb..50e8fc9 100644 --- a/schema.graphql +++ b/schema.graphql @@ -1,8 +1,8 @@ type Account @entity { - "Account address" + "Account address is SS58 format" id: ID! - transfersTo: [Transfer!] @derivedFrom(field: "to") - transfersFrom: [Transfer!] @derivedFrom(field: "from") + transfersIssued: [Transfer!] @derivedFrom(field: "to") + transfersReceived: [Transfer!] @derivedFrom(field: "from") identity: Identity @derivedFrom(field: "account") } @@ -15,20 +15,52 @@ type Transfer @entity { amount: BigInt! @index } +"Identity" type Identity @entity { + "Identity index" index: Int! @index @unique - account: Account @unique # TODO non nullable - name: String @index # TODO non nullable - certIsued: [Cert!] @derivedFrom(field: "issuer") - certIceived: [Cert!] @derivedFrom(field: "receiver") + "Current account" + account: Account! @unique + "Name" + name: String! @index + "Certifications issued" + certIssued: [Cert!] @derivedFrom(field: "issuer") + "Certifications received" + certReceived: [Cert!] @derivedFrom(field: "receiver") + "Smith certifications issued" + smithCertIssued: [SmithCert!] @derivedFrom(field: "issuer") + "Smith certifications received" + smithCertReceived: [SmithCert!] @derivedFrom(field: "receiver") + "Membership of the identity" + membership: Membership @derivedFrom(field: "identity") + "Smith Membership of the identity" + smithMembership: SmithMembership @derivedFrom(field: "identity") } +"Certification" type Cert @entity { - blockNumber: Int! @index issuer: Identity! receiver: Identity! } +"Smith certification" +type SmithCert @entity { + issuer: Identity! + receiver: Identity! +} + +"Membership" +type Membership @entity { + identity: Identity! @unique @index + expireOn: Int! @index +} + +"Smith membership" +type SmithMembership @entity { + identity: Identity! @unique @index + expireOn: Int! @index +} + # --- generic call record --- type Call @entity { diff --git a/src/model/generated/account.model.ts b/src/model/generated/account.model.ts index d87f34b..3f91cfa 100644 --- a/src/model/generated/account.model.ts +++ b/src/model/generated/account.model.ts @@ -9,15 +9,15 @@ export class Account { } /** - * Account address + * Account address is SS58 format */ @PrimaryColumn_() id!: string @OneToMany_(() => Transfer, e => e.to) - transfersTo!: Transfer[] + transfersIssued!: Transfer[] @OneToMany_(() => Transfer, e => e.from) - transfersFrom!: Transfer[] + transfersReceived!: Transfer[] } diff --git a/src/model/generated/cert.model.ts b/src/model/generated/cert.model.ts index d55e5f4..1120465 100644 --- a/src/model/generated/cert.model.ts +++ b/src/model/generated/cert.model.ts @@ -1,6 +1,9 @@ -import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, Index as Index_, ManyToOne as ManyToOne_} from "typeorm" +import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, ManyToOne as ManyToOne_, Index as Index_} from "typeorm" import {Identity} from "./identity.model" +/** + * Certification + */ @Entity_() export class Cert { constructor(props?: Partial<Cert>) { @@ -10,10 +13,6 @@ export class Cert { @PrimaryColumn_() id!: string - @Index_() - @Column_("int4", {nullable: false}) - blockNumber!: number - @Index_() @ManyToOne_(() => Identity, {nullable: true}) issuer!: Identity diff --git a/src/model/generated/identity.model.ts b/src/model/generated/identity.model.ts index 9cfd157..1abb30a 100644 --- a/src/model/generated/identity.model.ts +++ b/src/model/generated/identity.model.ts @@ -1,7 +1,13 @@ import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, Index as Index_, OneToOne as OneToOne_, JoinColumn as JoinColumn_, OneToMany as OneToMany_} from "typeorm" import {Account} from "./account.model" import {Cert} from "./cert.model" +import {SmithCert} from "./smithCert.model" +import {Membership} from "./membership.model" +import {SmithMembership} from "./smithMembership.model" +/** + * Identity + */ @Entity_() export class Identity { constructor(props?: Partial<Identity>) { @@ -11,22 +17,57 @@ export class Identity { @PrimaryColumn_() id!: string + /** + * Identity index + */ @Index_({unique: true}) @Column_("int4", {nullable: false}) index!: number + /** + * Current account + */ @Index_({unique: true}) @OneToOne_(() => Account, {nullable: true}) @JoinColumn_() - account!: Account | undefined | null + account!: Account + /** + * Name + */ @Index_() - @Column_("text", {nullable: true}) - name!: string | undefined | null + @Column_("text", {nullable: false}) + name!: string + /** + * Certifications issued + */ @OneToMany_(() => Cert, e => e.issuer) - certIsued!: Cert[] + certIssued!: Cert[] + /** + * Certifications received + */ @OneToMany_(() => Cert, e => e.receiver) - certIceived!: Cert[] + certReceived!: Cert[] + + /** + * Smith certifications issued + */ + @OneToMany_(() => SmithCert, e => e.issuer) + smithCertIssued!: SmithCert[] + + /** + * Smith certifications received + */ + @OneToMany_(() => SmithCert, e => e.receiver) + smithCertReceived!: SmithCert[] + + /** + * Membership of the identity + */ + + /** + * Smith Membership of the identity + */ } diff --git a/src/model/generated/index.ts b/src/model/generated/index.ts index 9855a08..8703db3 100644 --- a/src/model/generated/index.ts +++ b/src/model/generated/index.ts @@ -2,5 +2,8 @@ export * from "./account.model" export * from "./transfer.model" export * from "./identity.model" export * from "./cert.model" +export * from "./smithCert.model" +export * from "./membership.model" +export * from "./smithMembership.model" export * from "./call.model" export * from "./block.model" diff --git a/src/model/generated/membership.model.ts b/src/model/generated/membership.model.ts new file mode 100644 index 0000000..9bec4ca --- /dev/null +++ b/src/model/generated/membership.model.ts @@ -0,0 +1,24 @@ +import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, OneToOne as OneToOne_, Index as Index_, JoinColumn as JoinColumn_} from "typeorm" +import {Identity} from "./identity.model" + +/** + * Membership + */ +@Entity_() +export class Membership { + constructor(props?: Partial<Membership>) { + Object.assign(this, props) + } + + @PrimaryColumn_() + id!: string + + @Index_({unique: true}) + @OneToOne_(() => Identity, {nullable: true}) + @JoinColumn_() + identity!: Identity + + @Index_() + @Column_("int4", {nullable: false}) + expireOn!: number +} diff --git a/src/model/generated/smithCert.model.ts b/src/model/generated/smithCert.model.ts new file mode 100644 index 0000000..1a22caa --- /dev/null +++ b/src/model/generated/smithCert.model.ts @@ -0,0 +1,23 @@ +import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, ManyToOne as ManyToOne_, Index as Index_} from "typeorm" +import {Identity} from "./identity.model" + +/** + * Smith certification + */ +@Entity_() +export class SmithCert { + constructor(props?: Partial<SmithCert>) { + Object.assign(this, props) + } + + @PrimaryColumn_() + id!: string + + @Index_() + @ManyToOne_(() => Identity, {nullable: true}) + issuer!: Identity + + @Index_() + @ManyToOne_(() => Identity, {nullable: true}) + receiver!: Identity +} diff --git a/src/model/generated/smithMembership.model.ts b/src/model/generated/smithMembership.model.ts new file mode 100644 index 0000000..51a108b --- /dev/null +++ b/src/model/generated/smithMembership.model.ts @@ -0,0 +1,24 @@ +import {Entity as Entity_, Column as Column_, PrimaryColumn as PrimaryColumn_, OneToOne as OneToOne_, Index as Index_, JoinColumn as JoinColumn_} from "typeorm" +import {Identity} from "./identity.model" + +/** + * Smith membership + */ +@Entity_() +export class SmithMembership { + constructor(props?: Partial<SmithMembership>) { + Object.assign(this, props) + } + + @PrimaryColumn_() + id!: string + + @Index_({unique: true}) + @OneToOne_(() => Identity, {nullable: true}) + @JoinColumn_() + identity!: Identity + + @Index_() + @Column_("int4", {nullable: false}) + expireOn!: number +} diff --git a/src/types/cert/storage.ts b/src/types/cert/storage.ts new file mode 100644 index 0000000..eb20bb5 --- /dev/null +++ b/src/types/cert/storage.ts @@ -0,0 +1,76 @@ +import {sts, Block, Bytes, Option, Result, StorageType, RuntimeCtx} from '../support' +import * as v700 from '../v700' + +export const storageIdtyCertMeta = { + /** + * Certifications metada by issuer + */ + v700: new StorageType('Cert.StorageIdtyCertMeta', 'Default', [sts.number()], v700.IdtyCertMeta) as StorageIdtyCertMetaV700, +} + +/** + * Certifications metada by issuer + */ +export interface StorageIdtyCertMetaV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): v700.IdtyCertMeta + get(block: Block, key: number): Promise<(v700.IdtyCertMeta | undefined)> + getMany(block: Block, keys: number[]): Promise<(v700.IdtyCertMeta | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (v700.IdtyCertMeta | undefined)][]> +} + +export const certsByReceiver = { + /** + * Certifications by receiver + */ + v700: new StorageType('Cert.CertsByReceiver', 'Default', [sts.number()], sts.array(() => sts.tuple(() => [sts.number(), sts.number()]))) as CertsByReceiverV700, +} + +/** + * Certifications by receiver + */ +export interface CertsByReceiverV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): [number, number][] + get(block: Block, key: number): Promise<([number, number][] | undefined)> + getMany(block: Block, keys: number[]): Promise<([number, number][] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> +} + +export const storageCertsRemovableOn = { + /** + * Certifications removable on + */ + v700: new StorageType('Cert.StorageCertsRemovableOn', 'Optional', [sts.number()], sts.array(() => sts.tuple(() => [sts.number(), sts.number()]))) as StorageCertsRemovableOnV700, +} + +/** + * Certifications removable on + */ +export interface StorageCertsRemovableOnV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<([number, number][] | undefined)> + getMany(block: Block, keys: number[]): Promise<([number, number][] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> +} diff --git a/src/types/identity/storage.ts b/src/types/identity/storage.ts new file mode 100644 index 0000000..c5f0635 --- /dev/null +++ b/src/types/identity/storage.ts @@ -0,0 +1,131 @@ +import {sts, Block, Bytes, Option, Result, StorageType, RuntimeCtx} from '../support' +import * as v700 from '../v700' + +export const identities = { + /** + * maps identity index to identity value + */ + v700: new StorageType('Identity.Identities', 'Optional', [sts.number()], v700.IdtyValue) as IdentitiesV700, +} + +/** + * maps identity index to identity value + */ +export interface IdentitiesV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<(v700.IdtyValue | undefined)> + getMany(block: Block, keys: number[]): Promise<(v700.IdtyValue | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (v700.IdtyValue | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (v700.IdtyValue | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (v700.IdtyValue | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (v700.IdtyValue | undefined)][]> +} + +export const counterForIdentities = { + /** + * Counter for the related counted storage map + */ + v700: new StorageType('Identity.CounterForIdentities', 'Default', [], sts.number()) as CounterForIdentitiesV700, +} + +/** + * Counter for the related counted storage map + */ +export interface CounterForIdentitiesV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number + get(block: Block): Promise<(number | undefined)> +} + +export const identityIndexOf = { + /** + * maps account id to identity index + */ + v700: new StorageType('Identity.IdentityIndexOf', 'Optional', [v700.AccountId32], sts.number()) as IdentityIndexOfV700, +} + +/** + * maps account id to identity index + */ +export interface IdentityIndexOfV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: v700.AccountId32): Promise<(number | undefined)> + getMany(block: Block, keys: v700.AccountId32[]): Promise<(number | undefined)[]> + getKeys(block: Block): Promise<v700.AccountId32[]> + getKeys(block: Block, key: v700.AccountId32): Promise<v700.AccountId32[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<v700.AccountId32[]> + getKeysPaged(pageSize: number, block: Block, key: v700.AccountId32): AsyncIterable<v700.AccountId32[]> + getPairs(block: Block): Promise<[k: v700.AccountId32, v: (number | undefined)][]> + getPairs(block: Block, key: v700.AccountId32): Promise<[k: v700.AccountId32, v: (number | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: v700.AccountId32, v: (number | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: v700.AccountId32): AsyncIterable<[k: v700.AccountId32, v: (number | undefined)][]> +} + +export const identitiesNames = { + /** + * maps identity name to identity index (simply a set) + */ + v700: new StorageType('Identity.IdentitiesNames', 'Optional', [sts.string()], sts.number()) as IdentitiesNamesV700, +} + +/** + * maps identity name to identity index (simply a set) + */ +export interface IdentitiesNamesV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: string): Promise<(number | undefined)> + getMany(block: Block, keys: string[]): Promise<(number | undefined)[]> + getKeys(block: Block): Promise<string[]> + getKeys(block: Block, key: string): Promise<string[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<string[]> + getKeysPaged(pageSize: number, block: Block, key: string): AsyncIterable<string[]> + getPairs(block: Block): Promise<[k: string, v: (number | undefined)][]> + getPairs(block: Block, key: string): Promise<[k: string, v: (number | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: string, v: (number | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: string): AsyncIterable<[k: string, v: (number | undefined)][]> +} + +export const nextIdtyIndex = { + /** + * counter of the identity index to give to the next identity + */ + v700: new StorageType('Identity.NextIdtyIndex', 'Default', [], sts.number()) as NextIdtyIndexV700, +} + +/** + * counter of the identity index to give to the next identity + */ +export interface NextIdtyIndexV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number + get(block: Block): Promise<(number | undefined)> +} + +export const identitiesRemovableOn = { + /** + * maps block number to the list of identities set to be removed at this bloc + */ + v700: new StorageType('Identity.IdentitiesRemovableOn', 'Default', [sts.number()], sts.array(() => sts.tuple(() => [sts.number(), v700.IdtyStatus]))) as IdentitiesRemovableOnV700, +} + +/** + * maps block number to the list of identities set to be removed at this bloc + */ +export interface IdentitiesRemovableOnV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): [number, v700.IdtyStatus][] + get(block: Block, key: number): Promise<([number, v700.IdtyStatus][] | undefined)> + getMany(block: Block, keys: number[]): Promise<([number, v700.IdtyStatus][] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: ([number, v700.IdtyStatus][] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: ([number, v700.IdtyStatus][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: ([number, v700.IdtyStatus][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: ([number, v700.IdtyStatus][] | undefined)][]> +} diff --git a/src/types/index.ts b/src/types/index.ts index 1361d46..b637d4b 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -2,3 +2,4 @@ export * as v700 from './v700' export * as events from './events' export * as calls from './calls' export * as constants from './constants' +export * as storage from './storage' diff --git a/src/types/membership/storage.ts b/src/types/membership/storage.ts new file mode 100644 index 0000000..57d7017 --- /dev/null +++ b/src/types/membership/storage.ts @@ -0,0 +1,116 @@ +import {sts, Block, Bytes, Option, Result, StorageType, RuntimeCtx} from '../support' +import * as v700 from '../v700' + +export const membership = { + /** + * maps identity id to membership data + */ + v700: new StorageType('Membership.Membership', 'Optional', [sts.number()], v700.MembershipData) as MembershipV700, +} + +/** + * maps identity id to membership data + */ +export interface MembershipV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<(v700.MembershipData | undefined)> + getMany(block: Block, keys: number[]): Promise<(v700.MembershipData | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (v700.MembershipData | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (v700.MembershipData | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (v700.MembershipData | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (v700.MembershipData | undefined)][]> +} + +export const counterForMembership = { + /** + * Counter for the related counted storage map + */ + v700: new StorageType('Membership.CounterForMembership', 'Default', [], sts.number()) as CounterForMembershipV700, +} + +/** + * Counter for the related counted storage map + */ +export interface CounterForMembershipV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number + get(block: Block): Promise<(number | undefined)> +} + +export const membershipsExpireOn = { + /** + * maps block number to the list of identity id set to expire at this block + */ + v700: new StorageType('Membership.MembershipsExpireOn', 'Default', [sts.number()], sts.array(() => sts.number())) as MembershipsExpireOnV700, +} + +/** + * maps block number to the list of identity id set to expire at this block + */ +export interface MembershipsExpireOnV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number[] + get(block: Block, key: number): Promise<(number[] | undefined)> + getMany(block: Block, keys: number[]): Promise<(number[] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (number[] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (number[] | undefined)][]> +} + +export const pendingMembership = { + /** + * identities with pending membership request + */ + v700: new StorageType('Membership.PendingMembership', 'Optional', [sts.number()], sts.unit()) as PendingMembershipV700, +} + +/** + * identities with pending membership request + */ +export interface PendingMembershipV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<(null | undefined)> + getMany(block: Block, keys: number[]): Promise<(null | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (null | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (null | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (null | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (null | undefined)][]> +} + +export const pendingMembershipsExpireOn = { + /** + * maps block number to the list of memberships set to expire at this block + */ + v700: new StorageType('Membership.PendingMembershipsExpireOn', 'Default', [sts.number()], sts.array(() => sts.number())) as PendingMembershipsExpireOnV700, +} + +/** + * maps block number to the list of memberships set to expire at this block + */ +export interface PendingMembershipsExpireOnV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number[] + get(block: Block, key: number): Promise<(number[] | undefined)> + getMany(block: Block, keys: number[]): Promise<(number[] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (number[] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (number[] | undefined)][]> +} diff --git a/src/types/smith-cert/storage.ts b/src/types/smith-cert/storage.ts new file mode 100644 index 0000000..fa2587b --- /dev/null +++ b/src/types/smith-cert/storage.ts @@ -0,0 +1,76 @@ +import {sts, Block, Bytes, Option, Result, StorageType, RuntimeCtx} from '../support' +import * as v700 from '../v700' + +export const storageIdtyCertMeta = { + /** + * Certifications metada by issuer + */ + v700: new StorageType('SmithCert.StorageIdtyCertMeta', 'Default', [sts.number()], v700.IdtyCertMeta) as StorageIdtyCertMetaV700, +} + +/** + * Certifications metada by issuer + */ +export interface StorageIdtyCertMetaV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): v700.IdtyCertMeta + get(block: Block, key: number): Promise<(v700.IdtyCertMeta | undefined)> + getMany(block: Block, keys: number[]): Promise<(v700.IdtyCertMeta | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (v700.IdtyCertMeta | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (v700.IdtyCertMeta | undefined)][]> +} + +export const certsByReceiver = { + /** + * Certifications by receiver + */ + v700: new StorageType('SmithCert.CertsByReceiver', 'Default', [sts.number()], sts.array(() => sts.tuple(() => [sts.number(), sts.number()]))) as CertsByReceiverV700, +} + +/** + * Certifications by receiver + */ +export interface CertsByReceiverV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): [number, number][] + get(block: Block, key: number): Promise<([number, number][] | undefined)> + getMany(block: Block, keys: number[]): Promise<([number, number][] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> +} + +export const storageCertsRemovableOn = { + /** + * Certifications removable on + */ + v700: new StorageType('SmithCert.StorageCertsRemovableOn', 'Optional', [sts.number()], sts.array(() => sts.tuple(() => [sts.number(), sts.number()]))) as StorageCertsRemovableOnV700, +} + +/** + * Certifications removable on + */ +export interface StorageCertsRemovableOnV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<([number, number][] | undefined)> + getMany(block: Block, keys: number[]): Promise<([number, number][] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: ([number, number][] | undefined)][]> +} diff --git a/src/types/smith-membership/storage.ts b/src/types/smith-membership/storage.ts new file mode 100644 index 0000000..5c1a4f1 --- /dev/null +++ b/src/types/smith-membership/storage.ts @@ -0,0 +1,116 @@ +import {sts, Block, Bytes, Option, Result, StorageType, RuntimeCtx} from '../support' +import * as v700 from '../v700' + +export const membership = { + /** + * maps identity id to membership data + */ + v700: new StorageType('SmithMembership.Membership', 'Optional', [sts.number()], v700.MembershipData) as MembershipV700, +} + +/** + * maps identity id to membership data + */ +export interface MembershipV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<(v700.MembershipData | undefined)> + getMany(block: Block, keys: number[]): Promise<(v700.MembershipData | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (v700.MembershipData | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (v700.MembershipData | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (v700.MembershipData | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (v700.MembershipData | undefined)][]> +} + +export const counterForMembership = { + /** + * Counter for the related counted storage map + */ + v700: new StorageType('SmithMembership.CounterForMembership', 'Default', [], sts.number()) as CounterForMembershipV700, +} + +/** + * Counter for the related counted storage map + */ +export interface CounterForMembershipV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number + get(block: Block): Promise<(number | undefined)> +} + +export const membershipsExpireOn = { + /** + * maps block number to the list of identity id set to expire at this block + */ + v700: new StorageType('SmithMembership.MembershipsExpireOn', 'Default', [sts.number()], sts.array(() => sts.number())) as MembershipsExpireOnV700, +} + +/** + * maps block number to the list of identity id set to expire at this block + */ +export interface MembershipsExpireOnV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number[] + get(block: Block, key: number): Promise<(number[] | undefined)> + getMany(block: Block, keys: number[]): Promise<(number[] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (number[] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (number[] | undefined)][]> +} + +export const pendingMembership = { + /** + * identities with pending membership request + */ + v700: new StorageType('SmithMembership.PendingMembership', 'Optional', [sts.number()], sts.unit()) as PendingMembershipV700, +} + +/** + * identities with pending membership request + */ +export interface PendingMembershipV700 { + is(block: RuntimeCtx): boolean + get(block: Block, key: number): Promise<(null | undefined)> + getMany(block: Block, keys: number[]): Promise<(null | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (null | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (null | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (null | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (null | undefined)][]> +} + +export const pendingMembershipsExpireOn = { + /** + * maps block number to the list of memberships set to expire at this block + */ + v700: new StorageType('SmithMembership.PendingMembershipsExpireOn', 'Default', [sts.number()], sts.array(() => sts.number())) as PendingMembershipsExpireOnV700, +} + +/** + * maps block number to the list of memberships set to expire at this block + */ +export interface PendingMembershipsExpireOnV700 { + is(block: RuntimeCtx): boolean + getDefault(block: Block): number[] + get(block: Block, key: number): Promise<(number[] | undefined)> + getMany(block: Block, keys: number[]): Promise<(number[] | undefined)[]> + getKeys(block: Block): Promise<number[]> + getKeys(block: Block, key: number): Promise<number[]> + getKeysPaged(pageSize: number, block: Block): AsyncIterable<number[]> + getKeysPaged(pageSize: number, block: Block, key: number): AsyncIterable<number[]> + getPairs(block: Block): Promise<[k: number, v: (number[] | undefined)][]> + getPairs(block: Block, key: number): Promise<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block): AsyncIterable<[k: number, v: (number[] | undefined)][]> + getPairsPaged(pageSize: number, block: Block, key: number): AsyncIterable<[k: number, v: (number[] | undefined)][]> +} diff --git a/src/types/storage.ts b/src/types/storage.ts new file mode 100644 index 0000000..c86ec99 --- /dev/null +++ b/src/types/storage.ts @@ -0,0 +1,5 @@ +export * as identity from './identity/storage' +export * as membership from './membership/storage' +export * as cert from './cert/storage' +export * as smithMembership from './smith-membership/storage' +export * as smithCert from './smith-cert/storage' diff --git a/src/types/v700.ts b/src/types/v700.ts index f280244..72c79c0 100644 --- a/src/types/v700.ts +++ b/src/types/v700.ts @@ -116,6 +116,84 @@ export interface BlockWeights { perClass: Type_96 } +export interface IdtyCertMeta { + issuedCount: number + nextIssuableOn: number + receivedCount: number +} + +export const IdtyCertMeta: sts.Type<IdtyCertMeta> = sts.struct(() => { + return { + issuedCount: sts.number(), + nextIssuableOn: sts.number(), + receivedCount: sts.number(), + } +}) + +export interface MembershipData { + expireOn: number +} + +export const MembershipData: sts.Type<MembershipData> = sts.struct(() => { + return { + expireOn: sts.number(), + } +}) + +export type IdtyStatus = IdtyStatus_ConfirmedByOwner | IdtyStatus_Created | IdtyStatus_Validated + +export interface IdtyStatus_ConfirmedByOwner { + __kind: 'ConfirmedByOwner' +} + +export interface IdtyStatus_Created { + __kind: 'Created' +} + +export interface IdtyStatus_Validated { + __kind: 'Validated' +} + +export const IdtyStatus: sts.Type<IdtyStatus> = sts.closedEnum(() => { + return { + ConfirmedByOwner: sts.unit(), + Created: sts.unit(), + Validated: sts.unit(), + } +}) + +export type AccountId32 = Bytes + +export interface IdtyValue { + data: IdtyData + nextCreatableIdentityOn: number + oldOwnerKey?: ([AccountId32, number] | undefined) + ownerKey: AccountId32 + removableOn: number + status: IdtyStatus +} + +export interface IdtyData { + firstEligibleUd: number +} + +export const IdtyValue: sts.Type<IdtyValue> = sts.struct(() => { + return { + data: IdtyData, + nextCreatableIdentityOn: sts.number(), + oldOwnerKey: sts.option(() => sts.tuple(() => [AccountId32, sts.number()])), + ownerKey: AccountId32, + removableOn: sts.number(), + status: IdtyStatus, + } +}) + +export const IdtyData: sts.Type<IdtyData> = sts.struct(() => { + return { + firstEligibleUd: sts.number(), + } +}) + export const MultiSignature: sts.Type<MultiSignature> = sts.closedEnum(() => { return { Ecdsa: sts.bytes(), @@ -177,8 +255,6 @@ export interface MultiAddress_Raw { value: Bytes } -export type AccountId32 = Bytes - export const IdtyRemovalReason: sts.Type<IdtyRemovalReason> = sts.closedEnum(() => { return { Expired: sts.unit(), diff --git a/typegen.json b/typegen.json index 9263ff1..1065336 100644 --- a/typegen.json +++ b/typegen.json @@ -17,31 +17,31 @@ "Identity": { "events": true, "calls": true, - "storage": [], + "storage": true, "constants": true }, "Cert": { "events": true, "calls": true, - "storage": [], + "storage": true, "constants": true }, "Membership": { "events": true, "calls": true, - "storage": [], + "storage": true, "constants": true }, "SmithCert": { "events": true, "calls": true, - "storage": [], + "storage": true, "constants": true }, "SmithMembership": { "events": true, "calls": true, - "storage": [], + "storage": true, "constants": true } } -- GitLab