diff --git a/schema.graphql b/schema.graphql index 0a7b6ebbaf4f4446aea3686a4d8fb210c1c5698c..50e8fc91f861dbc2ec15fdf089b9387b3b377d1b 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 d87f34bd64e71747a543aa83ec5a6ece69867ee2..3f91cfa1c33c1219254cc546a65e9c00e55c8511 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 d55e5f405c9f3c24b449ca339f7da56605aacee6..1120465d992e6674e21abb77ad0aca9ae30ab3c5 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 9cfd1574c0761ad648a0fb6b031e89893b117e18..1abb30a9a7773fa177386c1ab6780de04f111c8c 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 9855a086291fe4426346b19e0dd71a6bffafa178..8703db3e4d33ae6f191fce19d6b7ed28b3054a97 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 0000000000000000000000000000000000000000..9bec4caaa0173de55369181c0a1d53d8fc089453 --- /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 0000000000000000000000000000000000000000..1a22caa4046ca55d1f01c1bb8a2079455fbb8819 --- /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 0000000000000000000000000000000000000000..51a108bd780e16bf98e3be17001da5a189600c23 --- /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 0000000000000000000000000000000000000000..eb20bb518458f617b729999ef8923fb36317ed6f --- /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 0000000000000000000000000000000000000000..c5f0635381a7c4ba06f6cd20a7f229ac48a9b3e1 --- /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 1361d462965c80fa49fcdbe96f3e494756b251d5..b637d4b9ea878b60007542731fa7d836b743bf62 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 0000000000000000000000000000000000000000..57d70178ec9d0de728029ca12856406ab54a4aa6 --- /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 0000000000000000000000000000000000000000..fa2587bd90ef2aa0c710cd3e5f7ef8d561310303 --- /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 0000000000000000000000000000000000000000..5c1a4f147f22da33edcd7a77defc6e40623c5b51 --- /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 0000000000000000000000000000000000000000..c86ec9987ea2a50deeb45e47713f24f0b1efc1ce --- /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 f280244833532bb0d07fa6513a4c428b54421446..72c79c073fdc280aeeac9ea57ac772dfe6eb72be 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 9263ff1d31a8f8e187228b43caa0839aa5f9ef40..1065336c24ecb0315fab6e70b880e28e1da4e304 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 } }