@dorafactory/maci-sdk 0.0.20 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.mts +85 -5
- package/dist/browser.d.ts +85 -5
- package/dist/browser.js +380 -24
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +380 -24
- package/dist/browser.mjs.map +1 -1
- package/dist/index.d.mts +85 -5
- package/dist/index.d.ts +85 -5
- package/dist/index.js +380 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +380 -24
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/libs/contract/contract.ts +32 -21
- package/src/libs/contract/types.ts +4 -4
- package/src/libs/contract/utils.ts +26 -6
- package/src/libs/errors/types.ts +3 -0
- package/src/libs/indexer/indexer.ts +21 -0
- package/src/libs/maci/maci.ts +60 -0
- package/src/libs/query/operator.ts +338 -0
- package/src/types/index.ts +86 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/libs/errors/index.ts","../src/libs/http/http.ts","../src/libs/errors/types.ts","../src/libs/query/account.ts","../src/libs/const.ts","../src/libs/query/circuit.ts","../src/utils/index.ts","../src/libs/query/operator.ts","../src/libs/query/round.ts","../src/libs/query/transaction.ts","../src/libs/query/proof.ts","../src/libs/query/event.ts","../src/libs/indexer/indexer.ts","../src/libs/contract/config.ts","../src/libs/contract/ts/Maci.client.ts","../src/libs/contract/ts/AMaci.client.ts","../src/libs/contract/ts/Registry.client.ts","../src/libs/contract/ts/OracleMaci.client.ts","../src/types/index.ts","../src/libs/contract/vars.ts","../src/libs/contract/utils.ts","../src/libs/contract/contract.ts","../src/libs/oracle-certificate/oracle-certificate.ts","../src/libs/circom/index.ts","../src/libs/circom/circomlib.ts","../src/libs/maci/maci.ts","../src/maci.ts"],"sourcesContent":["export * from './libs';\nexport type * from './types';\nexport * from './types';\nexport * from './libs/const';\nexport { MaciClient } from './maci';\nexport { Http } from './libs/http';\nexport { Round } from './libs/query';\nexport { UserAccount } from './libs/query';\nexport { Circuit } from './libs/query';\nexport { Operator } from './libs/query';\nexport { Proof } from './libs/query';\nexport { Transaction } from './libs/query';\nexport * from './libs/circom';\nexport * from './utils';\nexport { Scalar, utils } from 'ffjavascript';\nexport { default as createBlakeHash } from 'blake-hash';\n","export class BaseError extends Error {\n constructor(message: string, public code: number, public type: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","import { BaseError, HttpError, GraphQLError, ParseError } from '../errors';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private restEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n restEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.restEndpoint = restEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string, options?: any): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>(\n query: string,\n after: string,\n limit: number | null = 10\n ): Promise<T> {\n try {\n const isFirstPage = after === 'first';\n const fetchFn = this.getFetch();\n\n const response = await fetchFn(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { limit, after: isFirstPage ? undefined : after },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchRest(path: string, options?: any): Promise<any> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(`${this.restEndpoint}${path}`, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n try {\n return await response.json();\n } catch (error) {\n throw new ParseError('Failed to parse JSON response');\n }\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n throw new HttpError(\n `Failed to fetch REST: ${(error as Error).message}`,\n 500\n );\n }\n }\n}\n","export const ERROR = {\n ERROR_ADDRESS_NOT_FOUND: 'ERROR_ADDRESS_NOT_FOUND',\n ERROR_CIRCUIT_NOT_FOUND: 'ERROR_CIRCUIT_NOT_FOUND',\n ERROR_OPERATOR_INVALID_ADDRESS: 'ERROR_OPERATOR_INVALID_ADDRESS',\n ERROR_OPERATOR_NOT_FOUND: 'ERROR_OPERATOR_NOT_FOUND',\n ERROR_OPERATORS_NOT_FOUND: 'ERROR_OPERATORS_NOT_FOUND',\n ERROR_PROOF_NOT_FOUND: 'ERROR_PROOF_NOT_FOUND',\n ERROR_ROUND_INVALID_ADDRESS: 'ERROR_ROUND_INVALID_ADDRESS',\n ERROR_ROUND_INVALID_STATUS: 'ERROR_ROUND_INVALID_STATUS',\n ERROR_ROUND_NOT_FOUND: 'ERROR_ROUND_NOT_FOUND',\n ERROR_ROUNDS_NOT_FOUND: 'ERROR_ROUNDS_NOT_FOUND',\n ERROR_TRANSACTION_NOT_FOUND: 'ERROR_TRANSACTION_NOT_FOUND',\n ERROR_TRANSACTIONS_NOT_FOUND: 'ERROR_TRANSACTIONS_NOT_FOUND',\n ERROR_SIGN_UP_EVENTS_NOT_FOUND: 'ERROR_SIGN_UP_EVENTS_NOT_FOUND',\n};\n","import { Http } from '../http';\nimport { BalanceResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class UserAccount {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async balanceOf(address: string): Promise<BalanceResponse> {\n try {\n const path = `/cosmos/bank/v1beta1/balances/${address}/by_denom?denom=peaka`;\n const data = await this.http.fetchRest(path);\n\n if (data['code'] === undefined) {\n const response: BalanceResponse = {\n code: 200,\n data: {\n balance: data['balance']['amount'],\n },\n };\n return response;\n } else {\n return {\n code: 404,\n error: {\n message: 'Address not found',\n type: ERROR.ERROR_ADDRESS_NOT_FOUND,\n },\n };\n }\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import type { CircuitType } from '../types';\n\nexport const circuits: Record<string, CircuitType> = {\n 'maci-1p1v': {\n maciType: 'MACI',\n circuitType: '1p1v',\n displayName: 'MACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'maci-qv': {\n maciType: 'MACI',\n circuitType: 'QV',\n displayName: 'MACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-1p1v': {\n maciType: 'aMACI',\n circuitType: '1p1v',\n displayName: 'aMACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-qv': {\n maciType: 'aMACI',\n circuitType: 'QV',\n displayName: 'aMACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n};\n\nexport const validator_operator_set = {\n doravaloper12yk434ut3un4wx0rult2aww89rsrel8nhmp387: {\n operator_address: '',\n account_address: 'dora12yk434ut3un4wx0rult2aww89rsrel8nydy83p',\n allocation: '22571615985356796592128',\n allocation_dora: 22571.615985356795,\n moniker: '𝐥𝐞𝐬𝐧𝐢𝐤 | 𝐔𝐓𝐒𝐀',\n program_voting_power: 0.06432895760166438,\n tokens: '200731587709257889972292',\n },\n doravaloper15frh0nn3v4yp3vv6sk4pn6jg9l8rt82f7uqfk5: {\n operator_address: '',\n account_address: 'dora15frh0nn3v4yp3vv6sk4pn6jg9l8rt82fd29lqt',\n allocation: '33745159209325474873344',\n allocation_dora: 33745.15920932547,\n moniker: 'NomadValidator',\n program_voting_power: 0.09617348254756773,\n tokens: '300099000000000000000000',\n },\n doravaloper1ddewp74vd2w8jhth2p0uazmc8ajgtcuf3ntqgn: {\n operator_address: '',\n account_address: 'dora1ddewp74vd2w8jhth2p0uazmc8ajgtcufz9wk7v',\n allocation: '40789397021635754590208',\n allocation_dora: 40789.397021635756,\n moniker: 'polkachu.com',\n program_voting_power: 0.11624951413777938,\n tokens: '362744095556470434789338',\n },\n doravaloper1gh8j89jtc2vx6d3y4ehllcdlvluwa49w6xmjsm: {\n operator_address: '',\n account_address: 'dora1gh8j89jtc2vx6d3y4ehllcdlvluwa49wfs7yxy',\n allocation: '33743029941764137943040',\n allocation_dora: 33743.029941764136,\n moniker: 'ITRocket',\n program_voting_power: 0.09616741414897524,\n tokens: '300080064215405665352721',\n },\n doravaloper1j8ru7p8zctup6grfwuga6ndrjj7v88wzn407x7: {\n operator_address: '',\n account_address: 'dora1j8ru7p8zctup6grfwuga6ndrjj7v88wzqr2gsp',\n allocation: '22646525272055477174272',\n allocation_dora: 22646.525272055478,\n moniker: 'StakeUs',\n program_voting_power: 0.06454244857772638,\n tokens: '201397763319500000000000',\n },\n doravaloper1l5zz0kkjt2n7nllsrymy96mc2v2gehda0zc85s: {\n operator_address: '',\n account_address: 'dora1l5zz0kkjt2n7nllsrymy96mc2v2gehdau5a3z0',\n allocation: '22622846742220005965824',\n allocation_dora: 22622.846742220005,\n moniker: 'BlackNodes',\n program_voting_power: 0.06447496492290769,\n tokens: '201187187838702364379121',\n },\n doravaloper1m9v3txhhtadjxpv09gwjhhs344qsxgfscwxjkg: {\n operator_address: '',\n account_address: 'dora1m9v3txhhtadjxpv09gwjhhs344qsxgfstcryqh',\n allocation: '22549006983854435598336',\n allocation_dora: 22549.006983854437,\n moniker: '👋 79anvi 🍀',\n program_voting_power: 0.06426452209558432,\n tokens: '200530523648490887200824',\n },\n doravaloper1tu8006g60t62zwgwf5knkaujv0uzhp2a6wh94h: {\n operator_address: '',\n account_address: 'dora1tu8006g60t62zwgwf5knkaujv0uzhp2afcjnrg',\n allocation: '39369183740744815345664',\n allocation_dora: 39369.18374074482,\n moniker: 'Citadel.one',\n program_voting_power: 0.11220191559671686,\n tokens: '350114000000000000000000',\n },\n doravaloper1x5z0tkafrgyeuqkrwfjr933vghjxchqnqlhcdw: {\n operator_address: '',\n account_address: 'dora1x5z0tkafrgyeuqkrwfjr933vghjxchqnnfjwm3',\n allocation: '22611521290904268701696',\n allocation_dora: 22611.521290904268,\n moniker: '1ce',\n program_voting_power: 0.064442687460896,\n tokens: '201086469492900000000000',\n },\n doravaloper1z6kfew2nhuh02szc2hdecw4fqey2d32auucvux: {\n operator_address: '',\n account_address: 'dora1z6kfew2nhuh02szc2hdecw4fqey2d32a02a62e',\n allocation: '45246951843662957379584',\n allocation_dora: 45246.95184366296,\n moniker: 'Nodes.Guru',\n program_voting_power: 0.12895351616135226,\n tokens: '402385566389000000000006',\n },\n doravaloper1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v: {\n operator_address: '',\n account_address: 'dora1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v',\n allocation: '44982761968475888943104',\n allocation_dora: 44982.76196847589,\n moniker: 'ZKV',\n program_voting_power: 0.12820057674882976,\n tokens: '400036100000000000000000',\n },\n};\n\nexport interface NetworkConfig {\n network: string;\n chainId: string;\n rpcEndpoint: string;\n restEndpoint: string;\n apiEndpoint: string;\n certificateApiEndpoint: string;\n registryAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n}\n\nexport function getDefaultParams(\n network: 'mainnet' | 'testnet' = 'mainnet'\n): NetworkConfig {\n switch (network) {\n case 'mainnet':\n return {\n network: 'mainnet',\n chainId: 'vota-ash',\n rpcEndpoint: 'https://vota-rpc.dorafactory.org',\n restEndpoint: 'https://vota-rest.dorafactory.org',\n apiEndpoint: 'https://vota-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 117, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n };\n case 'testnet':\n return {\n network: 'testnet',\n chainId: 'vota-testnet',\n rpcEndpoint: 'https://vota-testnet-rpc.dorafactory.org',\n restEndpoint: 'https://vota-testnet-rest.dorafactory.org',\n apiEndpoint: 'https://vota-testnet-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-testnet-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora13c8aecstyxrhax9znvvh5zey89edrmd2k5va57pxvpe3fxtfsfeqlhsjnd',\n maciCodeId: 107,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 115, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n };\n }\n}\n","import { Http } from '../../libs';\nimport {\n CircuitResponse,\n CircuitsCountGraphqlResponse,\n CircuitType,\n CircuitsResponse,\n} from '../../types';\nimport { circuits } from '../const';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Circuit {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n try {\n const circuitName = name;\n const circuitData: CircuitType = circuits[circuitName];\n\n if (circuitData === undefined) {\n return {\n code: 404,\n error: {\n message: `Circuit ${circuitName} not found`,\n type: ERROR.ERROR_CIRCUIT_NOT_FOUND,\n },\n };\n }\n\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuitData.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse =\n await this.http.fetchGraphql<CircuitsCountGraphqlResponse>(\n CIRCUIT_ROUNDS_COUNT_QUERY,\n ''\n );\n\n circuitData.roundCount =\n circuitRoundsCountResponse.data.rounds.totalCount;\n\n const response: CircuitResponse = {\n code: 200,\n data: {\n circuit: circuitData,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getCircuits(): Promise<CircuitsResponse> {\n try {\n const circuitsArray: CircuitType[] = Object.values(circuits).sort(\n (a, b) => a.displayName.localeCompare(b.displayName)\n );\n\n const circuitsWithRoundCount = await Promise.all(\n circuitsArray.map(async (circuit) => {\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuit.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse: CircuitsCountGraphqlResponse =\n await this.http.fetchGraphql(CIRCUIT_ROUNDS_COUNT_QUERY, '');\n return {\n ...circuit,\n roundCount: circuitRoundsCountResponse.data.rounds.totalCount,\n };\n })\n );\n\n const response: CircuitsResponse = {\n code: 200,\n data: {\n circuits: circuitsWithRoundCount,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { decode } from 'bech32';\n\nfunction verifyIsBech32(address: string): Error | undefined {\n try {\n decode(address);\n } catch (error) {\n return error instanceof Error ? error : new Error('Unknown error');\n }\n\n return undefined;\n}\n\nexport function isValidAddress(address: string): boolean {\n // An address is valid if it starts with `dora` and is Bech32 format.\n return address.startsWith('dora') && verifyIsBech32(address) === undefined;\n}\n\n/**\n * Converts a hexadecimal string to a decimal string.\n * @param hexString - The hexadecimal string to convert.\n * @returns The decimal string representation of the input.\n */\nexport function hexToDecimalString(hexString: string) {\n const decimalString = BigInt('0x' + hexString).toString(10);\n return decimalString;\n}\n\nfunction padWithZerosIfNeeded(inputString: string) {\n if (inputString.length === 64) {\n return inputString;\n } else if (inputString.length < 64) {\n const zerosToAdd = 64 - inputString.length;\n const zeroPadding = '0'.repeat(zerosToAdd);\n return zeroPadding + inputString;\n }\n throw new Error('Invalid input string length');\n}\n\n/**\n * Parses a public key string into its x and y coordinates.\n * @param publickKey - The public key string to parse (128 characters long).\n * @returns An object containing the x and y coordinates as decimal strings.\n */\nexport function decompressPublicKey(compressedPubkey: string) {\n const x = compressedPubkey.slice(0, 64);\n const y = compressedPubkey.slice(64);\n\n return {\n x: hexToDecimalString(x),\n y: hexToDecimalString(y),\n };\n}\n\nexport function compressPublicKey(decompressedPubkey: any[]) {\n const x = decompressedPubkey[0];\n const y = decompressedPubkey[1];\n const compressedPubkey =\n padWithZerosIfNeeded(x.toString(16)) + padWithZerosIfNeeded(y.toString(16));\n return compressedPubkey;\n}\n","import { ERROR } from '../errors/types';\nimport { Http } from '../../libs';\nimport {\n OperatorsGraphqlResponse,\n RoundsCountGraphqlResponse,\n OperatorResponse,\n OperatorsResponse,\n} from '../../types';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\n\nexport class Operator {\n public http: Http;\n public amaciRegistryContract: string;\n\n constructor(http: Http, amaciRegistryContract: string) {\n this.http = http;\n this.amaciRegistryContract = amaciRegistryContract;\n }\n\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query {\n operators(filter: { operatorAddress: { equalTo: \"${address}\" } }) {\n edges {\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges ||\n response.data.operators.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operator found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_NOT_FOUND,\n },\n };\n }\n\n const operatorResponse = response.data.operators.edges[0].node;\n\n if (\n operatorResponse.operatorAddress === '' ||\n operatorResponse.coordinatorPubkeyX === ''\n ) {\n operatorResponse.activeRoundsCount = 0;\n operatorResponse.completedRoundsCount = 0;\n } else {\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operatorResponse.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operatorResponse.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n }\n\n operatorResponse.logoUrl = '';\n operatorResponse.moniker = '';\n const identity = response.data.operators.edges[0].node.identity;\n\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operatorResponse.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operatorResponse.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n const operator: OperatorResponse = {\n code: 200,\n data: {\n operator: operatorResponse,\n },\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n try {\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operators(first: $limit, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No operators found',\n type: ERROR.ERROR_OPERATORS_NOT_FOUND,\n },\n };\n }\n const operatorsWithRounds = await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n if (\n operator.operatorAddress === '' ||\n operator.coordinatorPubkeyX === ''\n ) {\n operator.activeRoundsCount = 0;\n operator.completedRoundsCount = 0;\n return operator;\n }\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operator.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operator.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n\n return operator;\n })\n );\n\n response.data.operators.edges = operatorsWithRounds.map(\n (operator, index) => ({\n cursor: response.data.operators.edges[index].cursor,\n node: operator,\n })\n );\n\n await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n const identity = operator.identity;\n operator.logoUrl = '';\n operator.moniker = '';\n\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operator.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operator.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n return operator;\n })\n );\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n RoundsResponse,\n RoundResponse,\n RoundGraphqlResponse,\n RoundsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Round {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRoundById(address: string): Promise<RoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n identity\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n response.data.round.operatorLogoUrl = '';\n response.data.round.operatorMoniker = '';\n\n const identity = response.data.round.identity;\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n response.data.round.operatorLogoUrl =\n keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n response.data.round.operatorMoniker =\n keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n\n const results = JSON.parse(response.data.round.results);\n const votes = results.map((r: string) => ({\n v: Number(r.slice(0, -24)),\n v2: Number(r.slice(-24)),\n }));\n const totalVotes = votes.reduce(\n (s: { v: number; v2: number }, c: { v: number; v2: number }) => ({\n v: s.v + c.v,\n v2: s.v2 + c.v2,\n }),\n { v: 0, v2: 0 }\n );\n const resultsList = votes.map((v: { v: number; v2: number }) => ({\n v: totalVotes.v === 0 ? '0.0' : ((v.v / totalVotes.v) * 100).toFixed(3),\n v2:\n totalVotes.v2 === 0\n ? '0.0'\n : ((v.v2 / totalVotes.v2) * 100).toFixed(3),\n }));\n response.data.round.resultsList = resultsList;\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No rounds data found',\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByCircuitName(\n circuitName: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n circuitName:{\n equalTo: \"${circuitName}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for circuit name ${circuitName}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n let filterCondition = '';\n\n switch (status) {\n case 'Created':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" } },\n { and: [\n { votingStart: { notEqualTo: \"0\" } },\n { votingStart: { greaterThan: \"${currentTime.toString()}\" } }\n ] }\n ]\n `;\n break;\n case 'Ongoing':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" }},\n { votingStart: { lessThanOrEqualTo: \"${currentTime.toString()}\" }, votingEnd: { greaterThan: \"${currentTime.toString()}\" } }\n ]\n `;\n break;\n case 'Tallying':\n filterCondition = `\n and: [\n { status: { notEqualTo: \"Closed\" } },\n { votingEnd: { lessThan: \"${currentTime.toString()}\" } },\n { votingEnd: { notEqualTo: \"0\" } }\n ]\n `;\n break;\n case 'Closed':\n filterCondition = `status: { equalTo: \"Closed\" }`;\n break;\n default:\n return {\n code: 400,\n error: {\n message: `Invalid status: ${status}`,\n type: ERROR.ERROR_ROUND_INVALID_STATUS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter: { ${filterCondition} }, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for status ${status}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByOperator(\n operator: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n if (!isValidAddress(operator)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n operator:{\n equalTo: \"${operator}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for operator ${operator}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n TransactionsResponse,\n TransactionResponse,\n TransactionGraphqlResponse,\n TransactionsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Transaction {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getTransactionByHash(txHash: string): Promise<TransactionResponse> {\n try {\n const TRANSACTION_QUERY = `query {\n transaction(id: \"${txHash}\") {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }`;\n\n const response = await this.http.fetchGraphql<TransactionGraphqlResponse>(\n TRANSACTION_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.transaction) {\n return {\n code: 404,\n error: {\n message: `No transaction found for txHash ${txHash}`,\n type: ERROR.ERROR_TRANSACTION_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int!, $after: Cursor) {\n transactions(first: $limit, after: $after, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n }, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { ProofResponse, ProofGraphqlResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Proof {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const PROOF_QUERY = `query HomePage {\n proofData(first: 100, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n } ,orderBy: [TIMESTAMP_DESC]\n ){\n nodes {\n id\n blockHeight\n txHash\n contractAddress\n timestamp\n actionType\n commitment\n proof\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<ProofGraphqlResponse>(\n PROOF_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.proofData ||\n !response.data.proofData.nodes ||\n response.data.proofData.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No proof found for round address ${address}`,\n type: ERROR.ERROR_PROOF_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { SignUpEventsGraphqlResponse, SignUpEventsResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Event {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n try {\n const STATE_IDX_BY_PUB_KEY_QUERY = `\nquery signUpEvents($limit: Int, $after: Cursor) {\n\tsignUpEvents(\n first: $limit, after: $after,\n\t\tfilter: {\n\t\t\tcontractAddress: {\n\t\t\t\tequalTo: \"${contractAddress}\"\n\t\t\t}\n\t\t\tpubKey: {\n\t\t\t\tequalTo: \"${pubKey.map((n) => `\\\\\"${n}\\\\\"`).join(',')}\"\n\t\t\t}\n\t\t}) {\n\t\tnodes {\n\t\t\tid\n\t\t\tblockHeight\n\t\t\ttxHash\n\t\t\tcontractAddress\n\t\t\ttimestamp\n\t\t\tpubKey\n\t\t\tstateIdx\n\t\t\tbalance\n\t\t}\n\t}\n}\n `;\n\n const response =\n await this.http.fetchGraphql<SignUpEventsGraphqlResponse>(\n STATE_IDX_BY_PUB_KEY_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.signUpEvents ||\n !response.data.signUpEvents.nodes ||\n response.data.signUpEvents.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No signUpEvents found for pubKey ${pubKey\n .map((n) => `\"${n}\"`)\n .join(',')}`,\n type: ERROR.ERROR_SIGN_UP_EVENTS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: {\n signUpEvents: response.data.signUpEvents.nodes,\n },\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n BalanceResponse,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n SignUpEventsResponse,\n} from '../../types';\nimport { IndexerParams } from './types';\nimport { Http } from '../http';\nimport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n Event,\n} from '../query';\n\n/**\n * @class Indexer\n * @description This class is used to interact with Maci Indexer.\n */\nexport class Indexer {\n public restEndpoint: string;\n public apiEndpoint: string;\n public registryAddress: string;\n\n public http: Http;\n public round: Round;\n public account: UserAccount;\n public circuit: Circuit;\n public operator: Operator;\n public proof: Proof;\n public transaction: Transaction;\n public event: Event;\n\n /**\n * @constructor\n * @param {IndexerParams} params - The parameters for the Maci Indexer instance.\n */\n constructor({\n restEndpoint,\n apiEndpoint,\n registryAddress,\n http,\n }: IndexerParams) {\n this.http = http;\n\n this.restEndpoint = restEndpoint;\n this.apiEndpoint = apiEndpoint;\n this.registryAddress = registryAddress;\n\n this.round = new Round(this.http);\n this.account = new UserAccount(this.http);\n this.circuit = new Circuit(this.http);\n this.operator = new Operator(this.http, this.registryAddress);\n this.proof = new Proof(this.http);\n this.transaction = new Transaction(this.http);\n this.event = new Event(this.http);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.round.getRoundById(id);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.operator.getOperatorByAddress(address);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.proof.getProofByContractAddress(address);\n }\n\n /**\n * @method getStateIdxByPubKey\n * @description Get the state index of a specific public key.\n * @param {string} contractAddress - The contract address.\n * @param {bigint[]} pubKey - The public key.\n * @returns {Promise<SignUpEventsResponse>} The sign up events response.\n */\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n return await this.event.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport {\n SigningCosmWasmClient,\n SigningCosmWasmClientOptions,\n} from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { OracleMaciClient } from './ts/OracleMaci.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 64_000,\n gasPrice: GasPrice.fromString('100000000000peaka'),\n};\n\nexport async function createMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new MaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createAMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new AMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createRegistryClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new RegistryClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createOracleMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new OracleMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createContractClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const client = await SigningCosmWasmClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return client;\n}\n\nexport async function getSignerClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const signingStargateClient = await SigningStargateClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return signingStargateClient;\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n Addr,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './Maci.types';\nexport interface MaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: string }) => Promise<Boolean>;\n whiteBalanceOf: ({ sender }: { sender: string }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n}\nexport class MaciQueryClient implements MaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: string }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n whiteBalanceOf = async ({ sender }: { sender: string }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n sender,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n}\nexport interface MaciInterface extends MaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class MaciClient extends MaciQueryClient implements MaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n MaciParameters,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './AMaci.types';\nexport interface AMaciReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<Addr>;\n operator: () => Promise<Addr>;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getDMsgChainLength: () => Promise<Uint256>;\n getProcessedDMsgCount: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getVoiceCreditAmount: () => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n signuped: ({ pubkeyX }: { pubkeyX: Uint256 }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryPreDeactivateRoot: () => Promise<Uint256>;\n}\nexport class AMaciQueryClient implements AMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getDMsgChainLength = this.getDMsgChainLength.bind(this);\n this.getProcessedDMsgCount = this.getProcessedDMsgCount.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.getVoiceCreditAmount = this.getVoiceCreditAmount.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.signuped = this.signuped.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryPreDeactivateRoot = this.queryPreDeactivateRoot.bind(this);\n }\n admin = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getDMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_d_msg_chain_length: {},\n });\n };\n getProcessedDMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_d_msg_count: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n getVoiceCreditAmount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_amount: {},\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n signuped = async ({ pubkeyX }: { pubkeyX: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n signuped: {\n pubkey_x: pubkeyX,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryPreDeactivateRoot = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_root: {},\n });\n };\n}\nexport interface AMaciInterface extends AMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishDeactivateMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processDeactivateMessage: (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n preAddNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class AMaciClient extends AMaciQueryClient implements AMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishDeactivateMessage = this.publishDeactivateMessage.bind(this);\n this.processDeactivateMessage = this.processDeactivateMessage.bind(this);\n this.addNewKey = this.addNewKey.bind(this);\n this.preAddNewKey = this.preAddNewKey.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishDeactivateMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_deactivate_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processDeactivateMessage = async (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_deactivate_message: {\n groth16_proof: groth16Proof,\n new_deactivate_commitment: newDeactivateCommitment,\n new_deactivate_root: newDeactivateRoot,\n size,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n preAddNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n pre_add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ValidatorSet,\n QueryMsg,\n AdminResponse,\n String,\n Boolean,\n} from './Registry.types';\nexport interface RegistryReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<AdminResponse>;\n operator: () => Promise<Addr>;\n isMaciOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n isValidator: ({ address }: { address: Addr }) => Promise<Boolean>;\n getValidators: () => Promise<ValidatorSet>;\n getValidatorOperator: ({ address }: { address: Addr }) => Promise<Addr>;\n getMaciOperatorPubkey: ({ address }: { address: Addr }) => Promise<PubKey>;\n getMaciOperatorIdentity: ({ address }: { address: Addr }) => Promise<String>;\n}\nexport class RegistryQueryClient implements RegistryReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.isMaciOperator = this.isMaciOperator.bind(this);\n this.isValidator = this.isValidator.bind(this);\n this.getValidators = this.getValidators.bind(this);\n this.getValidatorOperator = this.getValidatorOperator.bind(this);\n this.getMaciOperatorPubkey = this.getMaciOperatorPubkey.bind(this);\n this.getMaciOperatorIdentity = this.getMaciOperatorIdentity.bind(this);\n }\n admin = async (): Promise<AdminResponse> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n isMaciOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_maci_operator: {\n address,\n },\n });\n };\n isValidator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_validator: {\n address,\n },\n });\n };\n getValidators = async (): Promise<ValidatorSet> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validators: {},\n });\n };\n getValidatorOperator = async ({\n address,\n }: {\n address: Addr;\n }): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validator_operator: {\n address,\n },\n });\n };\n getMaciOperatorPubkey = async ({\n address,\n }: {\n address: Addr;\n }): Promise<PubKey> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_pubkey: {\n address,\n },\n });\n };\n getMaciOperatorIdentity = async ({\n address,\n }: {\n address: Addr;\n }): Promise<String> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_identity: {\n address,\n },\n });\n };\n}\nexport interface RegistryInterface extends RegistryReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setMaciOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorPubkey: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorIdentity: (\n {\n identity,\n }: {\n identity: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createRound: (\n {\n certificationSystem,\n circuitType,\n maxOption,\n maxVoter,\n operator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxOption: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n votingTime: VotingTime;\n whitelist?: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setValidators: (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeValidator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciCodeId: (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeOperator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class RegistryClient\n extends RegistryQueryClient\n implements RegistryInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setMaciOperator = this.setMaciOperator.bind(this);\n this.setMaciOperatorPubkey = this.setMaciOperatorPubkey.bind(this);\n this.setMaciOperatorIdentity = this.setMaciOperatorIdentity.bind(this);\n this.createRound = this.createRound.bind(this);\n this.setValidators = this.setValidators.bind(this);\n this.removeValidator = this.removeValidator.bind(this);\n this.updateAmaciCodeId = this.updateAmaciCodeId.bind(this);\n this.changeOperator = this.changeOperator.bind(this);\n }\n setMaciOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorPubkey = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_pubkey: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorIdentity = async (\n {\n identity,\n }: {\n identity: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_identity: {\n identity,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createRound = async (\n {\n certificationSystem,\n circuitType,\n maxOption,\n maxVoter,\n operator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxOption: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n votingTime: VotingTime;\n whitelist?: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_option: maxOption,\n max_voter: maxVoter,\n operator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setValidators = async (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_validators: {\n addresses,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeValidator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_validator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciCodeId = async (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_code_id: {\n amaci_code_id: amaciCodeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeOperator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_operator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Addr,\n Timestamp,\n Uint64,\n VotingPowerMode,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n VotingPowerArgs,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n GrantConfig,\n Boolean,\n Binary,\n OracleWhitelistConfig,\n ArrayOfString,\n WhitelistConfig,\n} from './OracleMaci.types';\nexport interface OracleMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Uint256>;\n whiteInfo: ({ sender }: { sender: string }) => Promise<WhitelistConfig>;\n grantInfo: ({ grantee }: { grantee: string }) => Promise<GrantConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class OracleMaciQueryClient implements OracleMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.grantInfo = this.grantInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteInfo = async ({\n sender,\n }: {\n sender: string;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n sender,\n },\n });\n };\n grantInfo = async ({\n grantee,\n }: {\n grantee: string;\n }): Promise<GrantConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n grant_info: {\n grantee,\n },\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {},\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n}\nexport interface OracleMaciInterface extends OracleMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class OracleMaciClient\n extends OracleMaciQueryClient\n implements OracleMaciInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n amount,\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n base_amount: baseAmount,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\n\nexport enum MaciCircuitType {\n IP1V = '0',\n QV = '1',\n}\n\nexport enum MaciCertSystemType {\n GROTH16 = 'groth16',\n PLONK = 'plonk',\n}\n\nexport enum MaciRoundType {\n MACI = '0',\n AMACI = '1',\n ORACLE_MACI = '2',\n}\n\nexport type CertificateEcosystem = 'cosmoshub' | 'doravota';\n\nexport type ClientParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n};\n\nexport type ContractParams = {\n rpcEndpoint: string;\n registryAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n whitelistBackendPubkey: string;\n feegrantOperator: string;\n};\n\nexport type TransactionType = {\n id: string;\n blockHeight: string;\n txHash: string;\n timestamp: string;\n type: string;\n status: string;\n circuitName: string;\n fee: string;\n gasUsed: string;\n gasWanted: string;\n caller: string;\n contractAddress: string;\n};\n\nexport type RoundType = {\n id: string;\n blockHeight: string;\n txHash: string;\n caller: string;\n admin: string;\n operator: string;\n contractAddress: string;\n circuitName: string;\n timestamp: string;\n votingStart: string;\n votingEnd: string;\n status: string;\n period: string;\n actionType: string;\n roundTitle: string;\n roundDescription: string;\n roundLink: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n voteOptionMap: string;\n results: string;\n allResult: string;\n gasStationEnable: boolean;\n totalGrant: string;\n baseGrant: string;\n totalBond: string;\n circuitType: string;\n circuitPower: string;\n certificationSystem: string;\n codeId: string;\n maciType: string;\n voiceCreditAmount: string;\n preDeactivateRoot: string;\n identity: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type ProofType = {\n nodes: {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n actionType: string;\n commitment: string;\n proof: string;\n }[];\n};\n\nexport type OperatorType = {\n id: string;\n validatorAddress: string;\n operatorAddress: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n identity: string;\n logoUrl: string;\n moniker: string;\n activeRoundsCount: number;\n completedRoundsCount: number;\n};\n\nexport type CircuitType = {\n maciType: string;\n circuitType: string;\n displayName: string;\n repoUrl: string;\n zipUrl: string;\n roundCount?: number;\n};\n\nexport type SignUpEventType = {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n pubKey: string;\n stateIdx: number;\n balance: string;\n};\n\nexport type CircuitsCountGraphqlResponse = {\n data: {\n rounds: {\n totalCount: number;\n };\n };\n};\n\nexport type ErrorResponse = {\n code: number;\n error: {\n message: string;\n type: string;\n };\n};\n\nexport type SuccessResponse<T> = {\n code: 200;\n data: T;\n};\n\nexport type CircuitResponse =\n | SuccessResponse<{\n circuit: CircuitType;\n }>\n | ErrorResponse;\n\nexport type CircuitsResponse =\n | SuccessResponse<{\n circuits: CircuitType[];\n }>\n | ErrorResponse;\n\nexport type BalanceResponse =\n | SuccessResponse<{\n balance: string;\n }>\n | ErrorResponse;\n\nexport type OperatorResponse =\n | SuccessResponse<{\n operator: OperatorType;\n }>\n | ErrorResponse;\n\nexport type OperatorsResponse =\n | SuccessResponse<{\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsGraphqlResponse = {\n data: {\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type RoundsCountGraphqlResponse = {\n data: {\n activeRoundsCount: {\n totalCount: number;\n };\n completedRoundsCount: {\n totalCount: number;\n };\n };\n};\n\nexport type TransactionGraphqlResponse = {\n data: {\n transaction: TransactionType;\n };\n};\n\nexport type TransactionResponse =\n | SuccessResponse<{\n transaction: TransactionType;\n }>\n | ErrorResponse;\n\nexport type TransactionsGraphqlResponse = {\n data: {\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionsResponse =\n | SuccessResponse<{\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundResponse =\n | SuccessResponse<{\n round: RoundType;\n }>\n | ErrorResponse;\n\nexport type RoundsResponse =\n | SuccessResponse<{\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundGraphqlResponse = {\n data: {\n round: RoundType;\n };\n};\n\nexport type RoundsGraphqlResponse = {\n data: {\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type ProofResponse =\n | SuccessResponse<{\n proofData: ProofType;\n }>\n | ErrorResponse;\n\nexport type ProofGraphqlResponse = {\n data: {\n proofData: ProofType;\n };\n};\n\nexport type SignUpEventsResponse =\n | SuccessResponse<{\n signUpEvents: SignUpEventType[];\n }>\n | ErrorResponse;\n\nexport type SignUpEventsGraphqlResponse = {\n data: {\n signUpEvents: {\n nodes: SignUpEventType[];\n };\n };\n};\n","import { GasPrice } from '@cosmjs/stargate';\n\ntype Groth16VkeyType = {\n vk_alpha1: string;\n vk_beta_2: string;\n vk_gamma_2: string;\n vk_delta_2: string;\n vk_ic0: string;\n vk_ic1: string;\n};\n\ntype CircuitInfoType = {\n [key: string]: {\n parameter: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n groth16: {\n process_vkey?: Groth16VkeyType;\n tally_vkey?: Groth16VkeyType;\n process_1p1v_vkey?: Groth16VkeyType;\n tally_1p1v_vkey?: Groth16VkeyType;\n process_qv_vkey?: Groth16VkeyType;\n tally_qv_vkey?: Groth16VkeyType;\n };\n plonk?: {\n process_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n tally_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n };\n };\n};\n\nexport const CIRCUIT_INFO: CircuitInfoType = {\n '2-1-1-5': {\n parameter: {\n state_tree_depth: '2',\n int_state_tree_depth: '1',\n vote_option_tree_depth: '1',\n message_batch_size: '5',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2178a9c3805dd82071b2b28bb4c0ffc8178cad913c8c990b98b4863284dc3a5d175c0be554fc060c27c551e5e32effef015b918a0f5a2dc1b92909b8272719301c521d5f6542db5ea4775a42d32159c356a696599c1a3df011ec00559ae1c2b60d860f7e6513a7d20feaeaca401863e35a0f691dd7d30ce06d07946840de1ec8',\n vk_ic0:\n '19126a54a9b6d0d415f892c246485cb2889487cf9c4a8cd88dab5e1140e1d0630d1d76ef4652df8887c9dc557aa57f25e221db7e5b2e4cf618a362bece107f5c',\n vk_ic1:\n '0632e625fefc7172e8aec1070c4d32b90b6c482f6f3806773a4c55a03877c2d716cfd935eb3e3883f580c93f56adbf3a253ce3c208c52fb784f9d8fec139c617',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2e9fad39728c543c5213599111e1a44b01720c999a6785e8136c3e3b3bf8e07e248e1933d477969ca6e27cb7a74bca18cac7e3bbdf9371be5c54fe151f6376a30955609ec69b89329322a2f435b706ca248d1312c7513853a50ef37ed0f7826c25a5c57bf07789d89e538bc24017cf2722811f21480b0bb8030ed0028ecb7cd8',\n vk_ic0:\n '1bc1a1a3444256469c07cd6f4d1cfd9f7c9ddce596a306e0af077ca9e9c0fe9602db2a9aecef76a9dc4c19bf88c0099b04fc75410cc9004f0966440825e3790a',\n vk_ic1:\n '05b8b475f2bfedba4fa04ab1972006da9764c2c3e6fb65d6dd0aac938fd298112a560e13770b06a3f709a49fddf016331ea205fa125026993f6666eff69f4def',\n },\n },\n plonk: {\n process_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '29b0f4a90bea69583a8fca1e74d23adf739d605af605a0e0971fac548df976fb2e10a42dfca2325684c1bca5fabbf9d7022fc8b997ea478f1052dd8808d99e44',\n '119002055b6c2f98314ef408e4a917a6678f114ca991185749289f171f61efc32b3a931c700271b82d22c2073af9b7fffcb7bfa644ea09102d9ef8482410a991',\n '10c5f32870d26f8e26d2eaae2705557b18210b2355677172e1bef5fe684120891f8317185390ddbb22ecb922d37e03c3cc524c84f65c8045f2324b0f164cfbdb',\n '115a5f9af5d438d3261cfa31b7050b931b7d22647f628a43af41a41dcd44cb8d2e99368eb15cdc6d1f16faf9db0db4825613d6893c776aef456705bdc76eb728',\n '1a61cc5f0fbe92fbc8c9bd58928ce467f63e4771e4d517966afbaf220ea069a91cec3231c370be07fee8d9ec01660d054c549b034715855ffa652ad5b67ced86',\n '19e0d095a343115f6e7ad7ae1f51e375cd648fb35451cb2d5a8cf3bafbb25d0525efdc2cc5b5600ee0ae954dca3bf67c8277d470161fe23b4be7a5bcdf641e68',\n ],\n next_step_selector_commitments: [\n '246ce82e01ed312e81492f132da2ee16bc13cc0024fbcc668de30173ad59067f0f072a892451cc495f5d9b8b99c8dc29be1d42d3004aed45fd5b2cd32a420016',\n ],\n permutation_commitments: [\n '19c4143f41738480adc5ae49922d31b8a5afaa1d25ced5c20b869c0e1ccad91920c267c53d33907318cd194ba2ea08a85f250779765ba4121f7a0edfe1afe22b',\n '114bda14aa702a0815e3f91318a08a2798244420fd6675c8fc3cc2b0232298890d2eb3c1f27a83f4a3be777524d6cc65aa435e0a472fae8d1158e0a6ded685d0',\n '289f0b046968d2c095d05350e43996756fc85d2deb0e267a069615f0889a249413bdbe6f09edb4db956b8f3fc4488c4681cd52469dc0d419dab99a65b88309f7',\n '16dd74a2089960aac0d68309d5e81c6b45c29fafe4d42c922c06eb633ed48d551d347d1f43ee9b137772eefc43a6dcdf5ac35ee1615bc8f7c243bce071c410a9',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 524287,\n num_inputs: 1,\n selector_commitments: [\n '18c2bb75c8ed53a5d15a56cc91c56f14c832419994ce7187c7c98b5e622cac0808b773f05e09822d8d267646198a78359ea2aa6fbaeb01317142f99fd11da6c0',\n '181499098243a5968f5490b7759aa15f0f769f24f3f4219b69f96913cf4fb23c1cd7b3f109196d7577390fd2e6d3930a71b0559aff756f3ca43eef66ce7333f4',\n '07ba2bdd452503fb16b56ea2940e95a98118c9dd120ae192680fe2b80bdb26f10ac6cdc7cb12b581a8c64d45b5af3d253c4282405eed3fd4d091ae05aac45cb6',\n '1caf01f1775eeafa78a11202e926ee92be997ce040f9c6fbce161348a40aeda70d9f15738cccf538083784e566ceef651d000223ae810c980e2d5d98b91b4665',\n '2c377c69cae1d591af413da2fd986ef3dca595d0c5817ee4932b92169d37c52d1218ce63dde705ebd1dc66d9b62daca287e4fdf6800b69204e5b78bfe84365a1',\n '175dd4ff280e39f0e080c181f853845e40c4b91709a93e4398d24befc9cf556903675361817e031e86bd896ff1dd7bc1cc31ca920a101499db0c58d77f0730ec',\n ],\n next_step_selector_commitments: [\n '12d76999d26137d433f7119ab34f3fc63cfedb9172052cfb34acfc3cdc570f511aba802ebe92b87f913496314b938cf526078280a68826c90b686b90420c7742',\n ],\n permutation_commitments: [\n '167b05c0132399e7126e8d16efb224b1c6729942048fc7e730fd1451116e0a6e05acaf2a6d2c88cc25610474b651c8cdcb7e8e14e59ddfad819123e888c4b1b6',\n '25aed62de4b701dc645e076543e2553c306010f2776c74edae55ea5253d9540403d042c4cb699cc04b2bb63d3c3edc0c85b049a84dc2fd44369f957d81363563',\n '0e77fb0b0e84da1d955da3d66dbb8fa3988f22e999a34bc4ac537a0f9187ac40156f8d7cb6d005fd85a0178d794f941b4e84832fd389a37c2a78112dac09b758',\n '051d3d906d457eaa9eff77a296dfa1760fd9ea379eec60487be38de91545ca2c1fcf457d6ac31afee10951245b0cc1e2c7674596f65955d189d48b6938fb3594',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '4-2-2-25': {\n parameter: {\n state_tree_depth: '4',\n int_state_tree_depth: '2',\n vote_option_tree_depth: '2',\n message_batch_size: '25',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '0d0fe390b9dd4d1d0f486787b6ea96765cbeaa8f00310fecc3429673c5866c081a27998596ba296f66f3f7b5e2450d1ce1bcc535c133b2e8b577ba07dc1ccb4c1895f7afb9b3168a6d628c9173157cd56ca51948cc66c129a25f80e3b665e4b12c9c50f0cc0d070978ed2fb8ce15956d67c5dc6c07c7f45f1facfb5522d7b656',\n vk_ic0:\n '0ff2b22774da5c0ba94db4d759827b8c962aaf44db2649eb10407de02a40463a26497581d6d0979ad7f9057f26e048109158b0872700e2ad8447ffc9b4bf146b',\n vk_ic1:\n '0a47be101a59d20641e1369c0b2b9fb839cd35ecbfbeac3866df43723b70c78d17e96303c417743d93b7726805b736f364d305036b50e4ad1b885fc41284daf5',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '08e44e0876bd574d8a3411e374884eb61da7292ca52903fa96553c37311b66ce0f2f529e59b1d37e55794a575d0f87548ca0d03331c19689bc203a68c1c4bae20e9fd25a7bffaa9b7409e694a48bc0d57f42df164d4a01bd5deecffedd2d3a3125eff290efb93eaf9c578cc7ee9d00406137607b9602de02424ff413ac948690',\n vk_ic0:\n '295c8e84b4b6b8de44b24f80eb5cae1df65e4877c4af8da2dbadfbfc3586dc790661b9e636f2c2a83028d11cbb7c753675481b65a5dfe32fff7a558231b3c9ef',\n vk_ic1:\n '299cfb28054cde0470bd7ff280349089350226d1ca154dcf6544b2680bf3bea925026e6644668273d6066ef6766c2f561c3607c523fbbd1379c5002376ef69c3',\n },\n },\n plonk: {\n process_vkey: {\n n: 2097151,\n num_inputs: 1,\n selector_commitments: [\n '126cbf10e0b68a56d45614be16c5bb48bd1374478e17b9fe1a78b726ea70f9b21f3cd20fd178d89e5923c422ef050ccc7134fbd76c9efdbb90f677ee41e01edb',\n '12813166f206c95eddd998a40d8d2e54e29dd393f543e3583a7999b18d674832024cdd935540bd3b96207ec0609c6718ad8b14e2ef315594454c57d606494485',\n '05da9eea3ee7151355067ced11a8e8ff57a56c758493afc9cbb6cfbacfc42e7b08993dfa25c85f20aeb7f64e87fe56ac8066cf6b8479dc96294e302ef5d55372',\n '2e446e540bacde7daea23c93a67bc6b1424b7c16b33fd2cee251b0d093cd78300030b8e340f01f320639d60b77724e58fc8a2d778b7b2a5df2c953ce34debeea',\n '1cf8c75b18071ede19d196b46a8776efc29ac514458a698d9f2e50b7bc692f6e06f7ff96897240eca31058fe330e8cbcd911324b79a3a34d03340a3cfed85fd5',\n '17101fb5c293438a695075b221219679e278e4bd147239c9fc69081b19cacefe218eb895f1456ca81e29731967588aee4b0758ea51aa28e5fefc81fed4a11513',\n ],\n next_step_selector_commitments: [\n '0cebff4fe8cd70325f986088a1e17ae129a025481137bd80aef9c1f1c2e52f1e265a4ccae1ed89cb2fba527165f007898e70f988311ee4e4e87e41376cfeed03',\n ],\n permutation_commitments: [\n '025b5db167721133693f0b6d9d7cfadce68ad15365ef1605dda4a6c809edeea61927b27ca11713fc683c88f6330e9621837b05e5db74d5994d1cf04bc3d529b3',\n '1fac93999f33b145613901846e6403d7f4237d582b51ccc4fb5c70038284c6e21cc804cc3cf7170b96da74fcbb30c81cd8c3405a629327c657025db7332f169a',\n '0b6d7d383de73dbfc16f2c0f3af763135ff05a12ec937548008cfee944c195f902336a68a50f62f595953e44401e872fb41abb66a733684b079ffe550d09c233',\n '225a1f5e92d105d3be026ae68904826f89b786faad75a846ef966ed714568bba28d1388786fde71dea206cdef16faa7a589e90863e6245d271e3f154c75c5531',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '1588fb667b3f0e4d0970b8208e4b6b4c729c4926b936f8d877017cf42d07ca15069643791d98abcd6b7d0b0546e7560ab9011e069f2ee48ede581fc72d8b5e04',\n '09c5480b103c44a81850ffd9a61ec21f7db41bc89996d8df075c3e029290eb5b083cb2b184d95c0761e585547be33250c8939929b87fdc39775ccea17d51b481',\n '278e239bcac0a945a17572a6d61ba59f705746e6893a10a44841933a8c8310e712e4ee913af9b77c8fdcdc365316aa9f1b8dc081eb99ad80265768ec9f484beb',\n '12532585ea307c5559b18a4d01db59b544a88088f61a5b5ed0431393e6f675af1309bf0dcaa7a552849e5f28d0300c8c61b18393fb638aed3b7d70e27bb91c35',\n '172e7ecb8e485aaee801fd78b8fd7c0b862baef65e39e6832cffa2170b6f981928d86ab5887e8c3210e34e03cada468bd501f60ec3a8fa35b4c7067d6fb8c6ae',\n '0c27211d046735fc681228b8366be2c8cf9a256cbd03dcd4af65152e94f95a6f1af151a5311b195b0f4acffeec4952cc52edbb7045aab61bbd3be9cd322ab99e',\n ],\n next_step_selector_commitments: [\n '25ee15301d562e6c630946b3fbe36b9fbd8dfbd44ddf70cc825fb1fa1ebd966229081f6b9297da671c69064e10b8f5dd0f69b69d1bf79122c6197f119087ebe1',\n ],\n permutation_commitments: [\n '194849a6ec5cb37e09d20801d387abbab04e453f630c5fbbf5c4819c5569480c0c8bf0ce2b4955cc4c891840da1d9e99feb81e8d43251dffbe4d6167639b9f9b',\n '17717d2638632d406b3c8aa69550c8aeed1b79def3ab55e9d0c4bdf21cc339ad07d3bd3a331145fc96f34c85469a34a8c93b53b7aa36bb5a94c31e3b4d47713e',\n '277b0c99b63c79bb9ed2f677c3987cf00acb293933dfced82b5afcb8bf0c34570d3187ce5c7e892582ddda4322cf7c50d41105fe98503fb60e41f4a08da5916d',\n '0489f6dec0f27a8c21d147ebb9781b68b4b73db065a6017924c543f6d9fadbe922d24c0946bd8b19df7659810296d063b557cdf7aba510b11e08fbf2e9d37931',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '6-3-3-125': {\n parameter: {\n state_tree_depth: '6',\n int_state_tree_depth: '3',\n vote_option_tree_depth: '3',\n message_batch_size: '125',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '057f25675851ef5a79a6d8706a43a6cd8e494cfb12c241ede46991d9174cf30605b081ff44f3ede774dab68ea9324c12308c13cb09cbb129adf94401b9134f5b16137d952fd32ab2d4243ebff4cb15d17206948ef17909ea8606886a8109bdad082f7d27e1cbf98925f055b39d1c89f9bcc4f6d92fdb920934ff5e37ba4d9b49',\n vk_ic0:\n '27c937c032a18a320566e934448a0ffceea7050492a509c45a3bcb7e8ff8905d20789ada31729a833a4f595ff9f49f88adb66f2ab987de15a15deccb0e785bf4',\n vk_ic1:\n '0ed2cefc103a2234dbc6bbd8634812d65332218b7589f4079b2c08eb5a4f5f63113a7f3cb53797a7f5819d7de7e3f0b2197d1c34790685a4a59af4314810420b',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2065e91c00fcc5cbc3d974cf52e24de972bdb1b4d8ded629dec20b5c904c3fa327ffe02402094795ff4d02588c8268fcad738f69eb4c732a0c98b485035e1f4913ede11b074ff143a929673e581a547717c58ce01af87d9d8b28f65f506093a61013e367b93e6782129362065840a0af9b77d7d9659a84577176e64a918d8d4c',\n vk_ic0:\n '11db4a022aab89a265f06ff62aa18c74b21e913a8b23e7fce9cb46f76d1c4d9f2a7475b1eeb7be0a0dc457e6d52536ba351b621b63a7d77da75d4e773048537e',\n vk_ic1:\n '0f298d235d0822ad281386abdf511853529af4c864b0cd54140facebfc1356a3059cd6d0d4b27b39e5683548fe12025e2a6b2e2724c2ca87d2008ef932ed3801',\n },\n },\n plonk: {\n process_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '216533ab27390f98812429524326ac08736d636d2891fb81446796cc1771a3230642f49db115acc15a186a1013f91a08efcd05640eb137d700276e80fd05bc90',\n '11747f6f378e26dbdacff464ce7eb6a8869750d0fa7e508e263ac77b582c1e9b24ba3d208650b0c28943915c563cc94cc3f98cdb5fd8adc4f4d3e2a60eda3302',\n '09239eb768d8d47b91c7e08e2ec6a374571964ed16be293cdc35e112393c4fd1182a0794be7f1441418664e9f718b67ed392a7da3e2868375bcf629131bb2680',\n '2020f7db24940bbf38d097ea5d7ef7253e38b154d7eb0ff1782ea18ce215dd7b0e8475197b071b118adc6418b7b7fb42fea19b6272d1bb460cc47deacb299ec7',\n '298923db1618185064bbab5df30ee03a3c9cbc7ce8f096d76cbd2a5ab3df86cd05bbedb938e6e0ff35cce23609458aff8081cdf3163655672074d1b18b0007bd',\n '0effaabe8c6e8a076aedd36d10f2926f9871f552d93e22bfbe69e3c828a546fa2d0cd163b49a6de219ac2c048a8459ae448047748ba078b9d5d07b290c946b08',\n ],\n next_step_selector_commitments: [\n '13e3d7299e30e6142699469d620df721eca35bbb807a8f4298f165260fdc24f823e7bd9bcb6506a094a5ebef44434c62e4bcb5d3dd7e092c49d5cb80b8ae0757',\n ],\n permutation_commitments: [\n '03d94ab8fdc681523a8eec10f1ce5552937c268d1d970f9e75ee8657cd4c12a81e03476f83ef5c14db2f4d931b833a3b65b8d5689b37cc7f183914c90d3d065d',\n '1b9c6ef20e68355c535bda6ff04a8a61d7552a594bb8e88d69a6f8840ddab04d2884824cc356d0d90cc278c247fc531de62efca4b19ed1be6f071144474d2037',\n '1ff82de8312481e1591d2d1c2698fa3944b3f0afa0dd702be8a1a944a5a8997323ffbd0ab39a2e13608a8e76803c33ffda7317bb7101e335ce5552ed62dcd09d',\n '2cb2bbdd51d22b79957b0401ecb6fe089f05426ba092b1205fa92f39b36cc5fc0c36c3934e47b7d407d4cda0c78c2b3fb23162cb0d295e8a8cce1a274956c34a',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '258d101f9499e81c0d0da8986c659ef33da19d4955a142e56b4854d1327c902c1996baecd81432717a9cbf92ccf651e4217a788c1a2ed855f749480f8ce8203c',\n '1892a17c9c01389e3149b0663069a1ad4fd3c8e2db5ce99795b781c47b55acf9001cf5f0b4c1d088fa2058ca19cd2f1e9559ebe059897bb0aadcb540ce5f468a',\n '09912d6eaa4a22802451135d9a221ebf97c2ce8ad5bbb2942d5a860482e8e4202573995072c4b014cd0e9d09a1fd53ee7d602070b404288a7fd0d97b57d8f07d',\n '0c62ef7ad01b05b2c01fca6188de269d63d725348a07a99bbc50f24c1518aa871fdc61bbf42399433a0917c919dcfe9e851b206e1c37dec0908f69ad89bb1f8e',\n '07d181c1026ef4a6732bff3dffbc5ae0e3746e4860f478c6c2e8e258df2ed7671efe073fb31cf5a61c0eedceccb5e968220b9ff7e2b055b11d7c456a57fe7ac9',\n '1bbd7ad96893df675c811e5a2be184e2e3bc9af0ce30a7b26e53a916a10a777a01ffa70dbe585201ac09778429c04c71229392608095d220c7d82631a0caedd6',\n ],\n next_step_selector_commitments: [\n '2ae6c5c98d4c384e8e645d85a4ca362de4c4e75efe3c79d5bcbd126a9e305b831618df99300c7327f1eac6a498c8feac6013d4ba09b7ea046340f99b0598a832',\n ],\n permutation_commitments: [\n '2458c5fb474ab3e7ae9c6b82cc432a111954d8be5e7e9b4fc58c14e1aed77f3207426dbe08272aa69ba8b73809f27f9ff083641b5c3c896c386a74bbed3083dd',\n '0879ac4885674b1af0ab67c7b505bce6234f32a0335bdfd229023fea5f303ece0973ba8abc9ade8edcfb68c7d4b8b98272c7bf33eff841fec78d21c0c2e82aa6',\n '07b74f37fcbcb2d9962a529fbc254d54925aeb1be1a49517affeb3571ef3e31e3033f7900ff5bb5759cbb98b64ca7f42967278c328d00e60c042aa65f2178ded',\n '203c948fdc386e7bfbdc37363ab489e9ce3264f4ccd23c33dd8f2337fb9007a621cabf740aa26e522dcb7af6c0de9f93cbc69595b29b02e75c2f3507e97664ec',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '9-4-3-625': {\n parameter: {\n state_tree_depth: '9',\n int_state_tree_depth: '4',\n message_batch_size: '625',\n vote_option_tree_depth: '3',\n },\n groth16: {\n process_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1195be678487bbc8c0ae726c0985a5caf6f75e3f8327926926c4f89e498ad733043e46e10b506d194b27275f402bc3fb208a2f5be69662e7c9898d1c0ece4f04',\n vk_ic1:\n '10c34362189a7ee44b1c5e57755d7e0d672dba552e614d5cd9a53081bee2333425879fa4e4a9e3fff287824cce35f94725ca0edb60a4ffcbf50becb2fd96cb0b',\n },\n tally_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n process_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1832600210a459fe61d971081d4baa1a1add23f87c8a8dc4042cd5cf6c6fdf8e3018489aec30d9deb26629e05965a3a7e038be58ce10c854cb7e1071f2708aad',\n vk_ic1:\n '0274a24117a799333754d646e35f37292e7ca9984fb8781211504b158d69d2c422aa99651ca207c77084988b16ef363664b9cf36071f7131dcc10b98ea27d7f6',\n },\n tally_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n },\n },\n};\n\nexport const MACI_TYPE = {\n 'maci-1p1v': '0',\n 'maci-qv': '1',\n};\n\nexport const AMACI_TYPE = {\n 'amaci-1p1v': '0',\n 'amaci-qv': '1',\n};\n\nexport const PROOF_SYSTEM = {\n groth16: '0',\n plonk: '1',\n};\n\nexport const QTR_LIB = {\n zeros: [\n '0',\n '14655542659562014735865511769057053982292279840403315552050801315682099828156',\n '19261153649140605024552417994922546473530072875902678653210025980873274131905',\n '21526503558325068664033192388586640128492121680588893182274749683522508994597',\n '20017764101928005973906869479218555869286328459998999367935018992260318153770',\n '16998355316577652097112514691750893516081130026395813155204269482715045879598',\n '2612442706402737973181840577010736087708621987282725873936541279764292204086',\n '17716535433480122581515618850811568065658392066947958324371350481921422579201',\n '17437916409890180001398333108882255895598851862997171508841759030332444017770',\n ],\n};\n","import {\n MaciCertSystemType,\n MaciCircuitType,\n MaciRoundType,\n} from '../../types';\nimport { CIRCUIT_INFO } from './vars';\n\ntype MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport function getCircuitType(circuitType: MaciCircuitType) {\n let maciVoteType = null;\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n return maciVoteType;\n}\n\nexport function getContractParams(\n type: MaciRoundType,\n circuitType: MaciCircuitType,\n proofSystem: MaciCertSystemType,\n maxVoter: string,\n maxOption: string\n) {\n let parameters: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n let groth16ProcessVkey = null;\n let groth16TallyVkey = null;\n let plonkProcessVkey = null;\n let plonkTallyVkey = null;\n let maciVoteType = null;\n let maciCertSystem = null;\n\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n\n switch (proofSystem) {\n case MaciCertSystemType.GROTH16:\n maciCertSystem = '0';\n break;\n case MaciCertSystemType.PLONK:\n maciCertSystem = '1';\n break;\n default:\n throw new Error(\n `Invalid proof system ${proofSystem}, only support GROTH16 and PLONK`\n );\n }\n\n if (Number(maxVoter) <= 25 && Number(maxOption) <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n parameters = CIRCUIT_INFO['2-1-1-5'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.tally_vkey;\n }\n } else if (Number(maxVoter) <= 625 && Number(maxOption) <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n parameters = CIRCUIT_INFO['4-2-2-25'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.tally_vkey;\n }\n } else if (Number(maxVoter) <= 15625 && Number(maxOption) <= 125) {\n // state_tree_depth: 6\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['6-3-3-125'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.tally_vkey;\n }\n } else if (Number(maxVoter) <= 1953125 && Number(maxOption) <= 125) {\n // state_tree_depth: 9\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['9-4-3-625'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n throw new Error('PLONK is not supported for MACI-9');\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n switch (type) {\n case MaciRoundType.MACI:\n return {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n };\n case MaciRoundType.AMACI:\n return {\n // parameters,\n // groth16ProcessVkey,\n // groth16TallyVkey,\n // plonkProcessVkey,\n // plonkTallyVkey,\n };\n case MaciRoundType.ORACLE_MACI:\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n return {\n parameters: CIRCUIT_INFO['9-4-3-625'].parameter,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey: null,\n plonkTallyVkey: null,\n maciVoteType,\n maciCertSystem: '0',\n };\n }\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { DirectSecp256k1HdWallet, OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport {\n SigningCosmWasmClient,\n SigningCosmWasmClientOptions,\n} from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n} from './config';\nimport { Whitelist } from './ts/Registry.types';\nimport { getDefaultParams } from '../const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n} from './types';\nimport { getCircuitType, getContractParams } from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { decompressPublicKey } from '../../utils';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public rpcEndpoint: string;\n public registryAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n rpcEndpoint,\n registryAddress,\n maciCodeId,\n oracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.feegrantOperator = feegrantOperator;\n this.whitelistBackendPubkey = whitelistBackendPubkey;\n }\n\n async createAMaciRound({\n signer,\n startVoting,\n endVoting,\n operator,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n voiceCreditAmount,\n circuitType,\n preDeactivateRoot,\n }: CreateAMaciRoundParams) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n preDeactivateRoot = preDeactivateRoot || '0';\n const res = await client.createRound({\n operator,\n preDeactivateRoot,\n voiceCreditAmount,\n whitelist,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n votingTime: {\n start_time,\n end_time,\n },\n maxVoter,\n maxOption,\n certificationSystem: '0',\n circuitType,\n });\n let contractAddress = '';\n res.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return contractAddress;\n }\n\n async createMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n circuitType,\n certSystemType,\n }: CreateMaciRoundParams) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const { x: operatorPubkeyX, y: operatorPubkeyY } =\n decompressPublicKey(operatorPubkey);\n const {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n } = getContractParams(\n MaciRoundType.MACI,\n circuitType,\n certSystemType,\n maxVoter,\n maxOption\n );\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description, link },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX,\n y: operatorPubkeyY,\n },\n groth16_process_vkey: groth16ProcessVkey,\n groth16_tally_vkey: groth16TallyVkey,\n plonk_process_vkey: plonkProcessVkey,\n plonk_tally_vkey: plonkTallyVkey,\n max_vote_options: maxOption,\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n 'auto'\n );\n\n return instantiateResponse;\n }\n\n async createOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n }: CreateOracleMaciRoundParams) {\n const start_time = (startVoting.getTime() * 1_000_000).toString();\n const end_time = (endVoting.getTime() * 1_000_000).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const { x: operatorPubkeyX, y: operatorPubkeyY } =\n decompressPublicKey(operatorPubkey);\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n '0',\n '0'\n );\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX,\n y: operatorPubkeyY,\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: this.whitelistBackendPubkey,\n whitelist_ecosystem: whitelistEcosystem,\n whitelist_snapshot_height: whitelistSnapshotHeight,\n whitelist_voting_power_args: whitelistVotingPowerArgs,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n feegrant_operator: this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n 'auto'\n );\n\n return instantiateResponse;\n }\n\n async queryRoundInfo({\n signer,\n roundAddress,\n }: {\n signer: OfflineSigner;\n roundAddress: string;\n }) {\n const client = await createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: roundAddress,\n });\n const roundInfo = await client.getRoundInfo();\n return roundInfo;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n const client = await createOracleMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n return client;\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createAMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async contractClient({ signer }: { signer: OfflineSigner }) {\n return createContractClientByWallet(this.rpcEndpoint, signer);\n }\n}\n","import { Http } from '../http';\nimport {\n OracleCertificateParams,\n SignatureRequest,\n SignatureResponse,\n FeegrantAllowanceResponse,\n} from './types';\n\nexport class OracleCertificate {\n private certificateApiEndpoint: string;\n private http: Http;\n\n constructor({ certificateApiEndpoint, http }: OracleCertificateParams) {\n this.certificateApiEndpoint = certificateApiEndpoint;\n this.http = http;\n }\n\n async sign(data: SignatureRequest): Promise<SignatureResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/${data.ecosystem}/sign`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n address: data.address,\n height: data.height,\n contractAddress: data.contractAddress,\n }),\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n\n async feegrantAllowance(\n granter: string,\n grantee: string\n ): Promise<FeegrantAllowanceResponse> {\n const response = await this.http.fetchRest(\n `/cosmos/feegrant/v1beta1/allowance/${granter}/${grantee}`\n );\n\n return {\n granter,\n grantee,\n spend_limit: response.allowance.allowance.allowance.spend_limit,\n };\n }\n}\n","import {\n OfflineSigner,\n OfflineDirectSigner,\n isOfflineDirectSigner,\n} from '@cosmjs/proto-signing';\nimport { StdSignDoc } from '@cosmjs/amino';\nimport { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';\nimport { getDefaultParams } from '../const';\nimport { PublicKey, genKeypair, stringizing } from './circomlib';\nimport { SignResult, CircomParams } from './types';\nexport * from './circomlib';\n\nexport class Circom {\n private network: string;\n private chainId: string;\n\n constructor({ network }: CircomParams) {\n this.network = network;\n this.chainId = getDefaultParams(network).chainId;\n }\n\n async signMessage(\n signer: OfflineSigner,\n address: string,\n message: string\n ): Promise<SignResult> {\n if (typeof window !== 'undefined' && (window as any).keplr) {\n const sig = await (window as any).keplr.signArbitrary(\n this.chainId,\n address,\n message\n );\n\n return {\n signature: sig.signature,\n pubkey: sig.pub_key.value,\n };\n }\n\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n\n if (!account) {\n throw new Error(`Address ${address} not found in wallet`);\n }\n\n if (isOfflineDirectSigner(signer)) {\n // Direct\n const signDoc: SignDoc = {\n bodyBytes: new TextEncoder().encode(message),\n authInfoBytes: new Uint8Array(),\n chainId: this.chainId,\n accountNumber: BigInt(0),\n };\n\n const { signature } = await signer.signDirect(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n } else {\n // Amino\n const signDoc: StdSignDoc = {\n chain_id: this.chainId,\n account_number: '0',\n sequence: '0',\n fee: {\n gas: '0',\n amount: [],\n },\n msgs: [],\n memo: message,\n };\n\n const { signature } = await signer.signAmino(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n }\n }\n\n async genKeypairFromSign(signer: OfflineSigner, address: string) {\n const sig = await this.signMessage(\n signer,\n address,\n 'Generate_MACI_Private_Key'\n );\n\n const sign = BigInt(\n '0x' + Buffer.from(sig.signature, 'base64').toString('hex')\n );\n\n return genKeypair(sign);\n }\n}\n","import { randomBytes } from 'crypto';\nimport {\n babyJub,\n eddsa,\n poseidon,\n poseidonEncrypt,\n Tree,\n} from '@dorafactory/circomlib';\nimport { Scalar, utils } from 'ffjavascript';\nimport createBlakeHash from 'blake-hash';\nimport { solidityPackedSha256 } from 'ethers';\n\ntype MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport type PrivateKey = bigint;\nexport type PublicKey = [bigint, bigint];\n\nexport interface Account {\n privKey: PrivateKey;\n pubKey: PublicKey;\n formatedPrivKey: PrivateKey;\n}\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\nconst bigInt2Buffer = (i: bigint) => {\n let hex = i.toString(16);\n if (hex.length % 2 === 1) {\n hex = '0' + hex;\n }\n return Buffer.from(hex, 'hex');\n};\n\nconst genRandomKey = () => {\n // Prevent modulo bias\n // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n const min =\n 6350874878119819312338956282401532410528162663560392320966563075034087161851n;\n\n let rand;\n while (true) {\n rand = BigInt('0x' + randomBytes(32).toString('hex'));\n\n if (rand >= min) {\n break;\n }\n }\n\n const privKey = rand % SNARK_FIELD_SIZE;\n return privKey;\n};\n\nconst genPubKey = (privKey: bigint) => {\n return eddsa.prv2pub(bigInt2Buffer(privKey));\n};\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport const genKeypair = (pkey?: PrivateKey): Account => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genRandomKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n return { privKey, pubKey, formatedPrivKey };\n};\n\nconst formatPrivKeyForBabyJub = (privKey: PrivateKey) => {\n const sBuff = eddsa.pruneBuffer(\n createBlakeHash('blake512')\n .update(bigInt2Buffer(privKey))\n .digest()\n .slice(0, 32)\n );\n const s = utils.leBuff2int(sBuff);\n return Scalar.shr(s, 3);\n};\n\nexport const genEcdhSharedKey = (\n privKey: PrivateKey,\n pubKey: PublicKey\n): PublicKey => {\n const sharedKey = babyJub.mulPointEscalar(\n pubKey,\n formatPrivKeyForBabyJub(privKey)\n );\n if (sharedKey[0] === 0n) {\n return [0n, 1n];\n } else {\n return sharedKey;\n }\n};\n\nexport const genMessageFactory =\n (\n stateIdx: number,\n signPriKey: PrivateKey,\n signPubKey: PublicKey,\n coordPubKey: PublicKey\n ) =>\n (\n encPriKey: PrivateKey,\n nonce: number,\n voIdx: number,\n newVotes: number,\n isLastCmd: boolean,\n salt?: bigint\n ): bigint[] => {\n if (!salt) {\n // uint56\n salt = BigInt('0x' + randomBytes(7).toString('hex'));\n }\n\n const packaged =\n BigInt(nonce) +\n (BigInt(stateIdx) << 32n) +\n (BigInt(voIdx) << 64n) +\n (BigInt(newVotes) << 96n) +\n (BigInt(salt) << 192n);\n\n let newPubKey = [...signPubKey];\n if (isLastCmd) {\n newPubKey = [0n, 0n];\n }\n\n const hash = poseidon([packaged, ...newPubKey]);\n const signature = eddsa.signPoseidon(bigInt2Buffer(signPriKey), hash);\n\n const command = [packaged, ...newPubKey, ...signature.R8, signature.S];\n\n const message = poseidonEncrypt(\n command,\n genEcdhSharedKey(encPriKey, coordPubKey),\n 0n\n );\n\n return message;\n };\n\n// Batch generate encrypted commands.\n// output format just like (with commands 1 ~ N):\n// [\n// [msg_N, msg_N-1, ... msg_3, msg_2, msg_1],\n// [pubkey_N, pubkey_N-1, ... pubkey_3, pubkey_2, pubkey_1]\n// ]\n// and change the public key at command_N\nexport const batchGenMessage = (\n stateIdx: number,\n account: Account,\n coordPubKey: PublicKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n account.privKey,\n account.pubKey,\n coordPubKey\n );\n\n const payload = [];\n for (let i = plan.length - 1; i >= 0; i--) {\n const p = plan[i];\n const encAccount = genKeypair();\n const msg = genMessage(\n encAccount.privKey,\n i + 1,\n p[0],\n p[1],\n i === plan.length - 1\n );\n\n payload.push({\n msg,\n encPubkeys: encAccount.pubKey,\n });\n }\n\n return payload;\n};\n\nexport const privateKeyFromTxt = (txt: string) => {\n if (typeof txt !== 'string') {\n return;\n }\n const key = txt.split('\\n')[1] || '';\n if (key.length !== 512) {\n return;\n }\n const keys = key.match(/[0-9a-f]{128}/g);\n if (!keys || keys.length !== 4) {\n return;\n }\n const priKey = poseidon(keys.map((k) => BigInt('0x' + k)));\n return genKeypair(priKey % SNARK_FIELD_SIZE);\n};\n\nconst rerandomize = (\n pubKey: bigint[],\n ciphertext: { c1: bigint[]; c2: bigint[] },\n randomVal = genRandomKey()\n) => {\n const d1 = babyJub.addPoint(\n babyJub.mulPointEscalar(babyJub.Base8, randomVal),\n ciphertext.c1\n );\n\n const d2 = babyJub.addPoint(\n babyJub.mulPointEscalar(pubKey, randomVal),\n ciphertext.c2\n );\n\n return {\n d1,\n d2,\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyProof = async (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates,\n }: {\n coordPubKey: PublicKey;\n oldKey: Account;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomKey();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1 = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2 = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([oldKey.formatedPrivKey, 1444992409218394441042n]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1],\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: oldKey.formatedPrivKey,\n };\n\n return input;\n};\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Account,\n batchGenMessage,\n Circom,\n PublicKey,\n stringizing,\n} from '../circom';\nimport { Contract } from '../contract';\nimport { Indexer } from '../indexer';\nimport { OracleCertificate } from '../oracle-certificate';\nimport {\n MsgExecuteContractEncodeObject,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\nimport { GasPrice, calculateFee, StdFee } from '@cosmjs/stargate';\nimport { MsgExecuteContract } from 'cosmjs-types/cosmwasm/wasm/v1/tx.js';\nimport { CertificateEcosystem, ErrorResponse } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\n\nexport function isErrorResponse(response: unknown): response is ErrorResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as ErrorResponse).error === 'object' &&\n 'message' in (response as ErrorResponse).error\n );\n}\n\nexport class MACI {\n public circom: Circom;\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n constructor({\n circom,\n contract,\n indexer,\n oracleCertificate,\n }: {\n circom: Circom;\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n }) {\n this.circom = circom;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const stateIdx = await client.getStateIdxInc({ address });\n return stateIdx;\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n }: {\n signer: OfflineSigner;\n stateIdx: number;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const voiceCredit = await client.getVoiceCreditBalance({\n index: stateIdx.toString(),\n });\n return voiceCredit;\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey: bigint[];\n }) {\n const response = await this.indexer.getSignUpEventByPubKey(\n contractAddress,\n pubKey\n );\n\n if (isErrorResponse(response)) {\n return -1;\n }\n return response.data.signUpEvents[0].stateIdx;\n }\n\n async feegrantAllowance({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }) {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response;\n } catch (error) {\n return {\n granter: contractAddress,\n grantee: address,\n spend_limit: [],\n };\n }\n }\n\n // only for maci and oracle maci, amaci will set the voice credit when deploy the contract\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n mode = 'maci',\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n certificate?: string;\n mode?: 'maci' | 'amaci';\n }): Promise<string> {\n if (mode === 'amaci') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundById(contractAddress);\n\n if (!isErrorResponse(round)) {\n return round.data.round.voiceCreditAmount;\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n return '0';\n }\n }\n\n if (certificate) {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n amount: address,\n certificate,\n sender: address,\n });\n\n return balance;\n } else {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n sender: address,\n });\n\n return balance;\n }\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n const isWhitelisted = await client.isWhiteList({\n sender: address,\n });\n\n return isWhitelisted;\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const snapshotHeight = await client.queryOracleWhitelistConfig();\n return snapshotHeight;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.indexer.getRoundById(contractAddress);\n\n if (isErrorResponse(roundInfo)) {\n throw new Error(\n `Failed to get round info: ${roundInfo.error.type} ${roundInfo.error.message}`\n );\n }\n\n return roundInfo.data.round;\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.circuitType; // 0: 1p1v, 1: qv\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n const circuitType = await this.getRoundCircuitType({ contractAddress });\n\n return circuitType === '1';\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.gasStationEnable;\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n const startTime = new Date(votingStart / 10 ** 6);\n const endTime = new Date(votingEnd / 10 ** 6);\n\n // Inherit logic from Maci Explorer\n if (Number(votingStart) === 0) {\n return 'Created';\n }\n\n if (Number(votingEnd) === 0) {\n if (startTime < currentTime) {\n return 'Ongoing';\n }\n } else {\n if (startTime < currentTime && currentTime < endTime) {\n return 'Ongoing';\n }\n if (currentTime > endTime) {\n if (status !== 'Closed') {\n return 'Tallying';\n }\n }\n }\n\n return status;\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n return roundBalance.data.balance;\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n const oracleWhitelistConfig = await this.getOracleWhitelistConfig({\n signer,\n contractAddress,\n });\n\n const signResponse = await this.oracleCertificate.sign({\n ecosystem,\n address,\n contractAddress,\n height: oracleWhitelistConfig.snapshot_height,\n });\n\n return signResponse;\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciAccount,\n oracleCertificate,\n gasStation = false,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n maciAccount?: Account;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n }) {\n try {\n if (maciAccount === undefined) {\n maciAccount = await this.circom.genKeypairFromSign(signer, address);\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (oracleCertificate) {\n return await this.signupOracle({\n client,\n address,\n pubKey: maciAccount.pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n });\n } else {\n return await this.signupSimple({\n client,\n address,\n pubKey: maciAccount.pubKey,\n contractAddress,\n gasStation,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n private async processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n }: {\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n contractAddress: string;\n voiceCreditBalance: string;\n }) {\n // Check for duplicate options\n const idxSet = new Set();\n for (const option of selectedOptions) {\n if (idxSet.has(option.idx)) {\n throw new Error(\n `Duplicate option index (${option.idx}) is not allowed`\n );\n }\n idxSet.add(option.idx);\n }\n\n // Filter and sort options\n const options = selectedOptions\n .filter((o) => !!o.vc)\n .sort((a, b) => a.idx - b.idx);\n\n // Calculate used voice credits\n const isQv = await this.queryRoundIsQv({ contractAddress });\n const usedVc = options.reduce((s, o) => s + (isQv ? o.vc * o.vc : o.vc), 0);\n\n if (Number(voiceCreditBalance) < usedVc) {\n throw new Error('Insufficient voice credit balance');\n }\n\n return options;\n }\n\n async vote({\n signer,\n address,\n stateIdx,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciAccount,\n gasStation = false,\n }: {\n signer: OfflineSigner;\n address: string;\n stateIdx: number;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PublicKey;\n maciAccount?: Account;\n gasStation?: boolean;\n }) {\n if (stateIdx === -1) {\n throw new Error('State index is not set, Please signup first');\n }\n\n try {\n const voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n\n if (maciAccount === undefined) {\n maciAccount = await this.circom.genKeypairFromSign(signer, address);\n }\n\n const plan = options.map((o) => {\n return [o.idx, o.vc] as [number, number];\n });\n\n const payload = batchGenMessage(\n stateIdx,\n maciAccount,\n operatorCoordPubKey,\n plan\n );\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PublicKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n }) {\n const msgs: MsgExecuteContractEncodeObject[] = payload.map(\n ({ msg, encPubkeys }) => ({\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n publish_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n })\n )\n ),\n }),\n })\n );\n\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(20000000 * msgs.length, gasPrice);\n\n if (gasStation) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PublicKey;\n contractAddress: string;\n gasStation?: boolean;\n }) {\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(60000000, gasPrice);\n\n if (gasStation === true) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n },\n grantFee\n );\n }\n\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n },\n fee\n );\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PublicKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n }) {\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(60000000, gasPrice);\n\n if (gasStation === true) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n },\n grantFee\n );\n }\n\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n },\n fee\n );\n }\n}\n","import {\n BalanceResponse,\n ClientParams,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n} from './types';\nimport {\n Http,\n Indexer,\n Contract,\n OracleCertificate,\n Circom,\n MACI,\n} from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public circom: Circom;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n maciCodeId,\n oracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n }: ClientParams) {\n const defaultParams = getDefaultParams(network);\n\n this.rpcEndpoint = rpcEndpoint || defaultParams.rpcEndpoint;\n this.restEndpoint = restEndpoint || defaultParams.restEndpoint;\n this.apiEndpoint = apiEndpoint || defaultParams.apiEndpoint;\n this.certificateApiEndpoint =\n certificateApiEndpoint || defaultParams.certificateApiEndpoint;\n this.registryAddress = registryAddress || defaultParams.registryAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n\n this.http = new Http(\n this.apiEndpoint,\n this.restEndpoint,\n customFetch,\n defaultOptions\n );\n this.indexer = new Indexer({\n restEndpoint: this.restEndpoint,\n apiEndpoint: this.apiEndpoint,\n registryAddress: this.registryAddress,\n http: this.http,\n });\n this.contract = new Contract({\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.circom = new Circom({ network });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n circom: this.circom,\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n });\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.registryClient({ signer, contractAddress });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.maciClient({ signer, contractAddress });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound(params);\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound(params);\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound(params);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.indexer.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.indexer.round.getRoundById(id);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.indexer.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.indexer.operator.getOperatorByAddress(address);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.indexer.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.indexer.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.indexer.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.indexer.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.indexer.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.indexer.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.indexer.proof.getProofByContractAddress(address);\n }\n}\n"],"mappings":"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","names":["MaciClient","MaciCircuitType","MaciCertSystemType","MaciRoundType","createBlakeHash","import_stargate","MaciClient","import_ffjavascript","import_blake_hash"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/libs/errors/index.ts","../src/libs/http/http.ts","../src/libs/errors/types.ts","../src/libs/query/account.ts","../src/libs/const.ts","../src/libs/query/circuit.ts","../src/utils/index.ts","../src/libs/query/operator.ts","../src/libs/query/round.ts","../src/libs/query/transaction.ts","../src/libs/query/proof.ts","../src/libs/query/event.ts","../src/libs/indexer/indexer.ts","../src/libs/contract/config.ts","../src/libs/contract/ts/Maci.client.ts","../src/libs/contract/ts/AMaci.client.ts","../src/libs/contract/ts/Registry.client.ts","../src/libs/contract/ts/OracleMaci.client.ts","../src/types/index.ts","../src/libs/contract/vars.ts","../src/libs/contract/utils.ts","../src/libs/contract/contract.ts","../src/libs/oracle-certificate/oracle-certificate.ts","../src/libs/circom/index.ts","../src/libs/circom/circomlib.ts","../src/libs/maci/maci.ts","../src/maci.ts"],"sourcesContent":["export * from './libs';\nexport type * from './types';\nexport * from './types';\nexport * from './libs/const';\nexport { MaciClient } from './maci';\nexport { Http } from './libs/http';\nexport { Round } from './libs/query';\nexport { UserAccount } from './libs/query';\nexport { Circuit } from './libs/query';\nexport { Operator } from './libs/query';\nexport { Proof } from './libs/query';\nexport { Transaction } from './libs/query';\nexport * from './libs/circom';\nexport * from './utils';\nexport { Scalar, utils } from 'ffjavascript';\nexport { default as createBlakeHash } from 'blake-hash';\n","export class BaseError extends Error {\n constructor(message: string, public code: number, public type: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","import { BaseError, HttpError, GraphQLError, ParseError } from '../errors';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private restEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n restEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.restEndpoint = restEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string, options?: any): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>(\n query: string,\n after: string,\n limit: number | null = 10\n ): Promise<T> {\n try {\n const isFirstPage = after === 'first';\n const fetchFn = this.getFetch();\n\n const response = await fetchFn(this.apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: { limit, after: isFirstPage ? undefined : after },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data;\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async fetchRest(path: string, options?: any): Promise<any> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(`${this.restEndpoint}${path}`, {\n ...this.defaultOptions,\n ...options,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n try {\n return await response.json();\n } catch (error) {\n throw new ParseError('Failed to parse JSON response');\n }\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n throw new HttpError(\n `Failed to fetch REST: ${(error as Error).message}`,\n 500\n );\n }\n }\n}\n","export const ERROR = {\n ERROR_ADDRESS_NOT_FOUND: 'ERROR_ADDRESS_NOT_FOUND',\n ERROR_CIRCUIT_NOT_FOUND: 'ERROR_CIRCUIT_NOT_FOUND',\n ERROR_OPERATOR_INVALID_ADDRESS: 'ERROR_OPERATOR_INVALID_ADDRESS',\n ERROR_OPERATOR_NOT_FOUND: 'ERROR_OPERATOR_NOT_FOUND',\n ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND:\n 'ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND',\n ERROR_QUERY_MISS_RATE_FAILED: 'ERROR_QUERY_MISS_RATE_FAILED',\n ERROR_OPERATORS_NOT_FOUND: 'ERROR_OPERATORS_NOT_FOUND',\n ERROR_PROOF_NOT_FOUND: 'ERROR_PROOF_NOT_FOUND',\n ERROR_ROUND_INVALID_ADDRESS: 'ERROR_ROUND_INVALID_ADDRESS',\n ERROR_ROUND_INVALID_STATUS: 'ERROR_ROUND_INVALID_STATUS',\n ERROR_ROUND_NOT_FOUND: 'ERROR_ROUND_NOT_FOUND',\n ERROR_ROUNDS_NOT_FOUND: 'ERROR_ROUNDS_NOT_FOUND',\n ERROR_TRANSACTION_NOT_FOUND: 'ERROR_TRANSACTION_NOT_FOUND',\n ERROR_TRANSACTIONS_NOT_FOUND: 'ERROR_TRANSACTIONS_NOT_FOUND',\n ERROR_SIGN_UP_EVENTS_NOT_FOUND: 'ERROR_SIGN_UP_EVENTS_NOT_FOUND',\n};\n","import { Http } from '../http';\nimport { BalanceResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class UserAccount {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async balanceOf(address: string): Promise<BalanceResponse> {\n try {\n const path = `/cosmos/bank/v1beta1/balances/${address}/by_denom?denom=peaka`;\n const data = await this.http.fetchRest(path);\n\n if (data['code'] === undefined) {\n const response: BalanceResponse = {\n code: 200,\n data: {\n balance: data['balance']['amount'],\n },\n };\n return response;\n } else {\n return {\n code: 404,\n error: {\n message: 'Address not found',\n type: ERROR.ERROR_ADDRESS_NOT_FOUND,\n },\n };\n }\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import type { CircuitType } from '../types';\n\nexport const circuits: Record<string, CircuitType> = {\n 'maci-1p1v': {\n maciType: 'MACI',\n circuitType: '1p1v',\n displayName: 'MACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'maci-qv': {\n maciType: 'MACI',\n circuitType: 'QV',\n displayName: 'MACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/maci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-1p1v': {\n maciType: 'aMACI',\n circuitType: '1p1v',\n displayName: 'aMACI-1p1v',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n 'amaci-qv': {\n maciType: 'aMACI',\n circuitType: 'QV',\n displayName: 'aMACI-QV',\n repoUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/tree/main/circuits/amaci',\n zipUrl:\n 'https://github.com/DoraFactory/Vota-Circuits/archive/refs/heads/main.zip',\n },\n};\n\nexport const validator_operator_set = {\n doravaloper12yk434ut3un4wx0rult2aww89rsrel8nhmp387: {\n operator_address: '',\n account_address: 'dora12yk434ut3un4wx0rult2aww89rsrel8nydy83p',\n allocation: '22571615985356796592128',\n allocation_dora: 22571.615985356795,\n moniker: '𝐥𝐞𝐬𝐧𝐢𝐤 | 𝐔𝐓𝐒𝐀',\n program_voting_power: 0.06432895760166438,\n tokens: '200731587709257889972292',\n },\n doravaloper15frh0nn3v4yp3vv6sk4pn6jg9l8rt82f7uqfk5: {\n operator_address: '',\n account_address: 'dora15frh0nn3v4yp3vv6sk4pn6jg9l8rt82fd29lqt',\n allocation: '33745159209325474873344',\n allocation_dora: 33745.15920932547,\n moniker: 'NomadValidator',\n program_voting_power: 0.09617348254756773,\n tokens: '300099000000000000000000',\n },\n doravaloper1ddewp74vd2w8jhth2p0uazmc8ajgtcuf3ntqgn: {\n operator_address: '',\n account_address: 'dora1ddewp74vd2w8jhth2p0uazmc8ajgtcufz9wk7v',\n allocation: '40789397021635754590208',\n allocation_dora: 40789.397021635756,\n moniker: 'polkachu.com',\n program_voting_power: 0.11624951413777938,\n tokens: '362744095556470434789338',\n },\n doravaloper1gh8j89jtc2vx6d3y4ehllcdlvluwa49w6xmjsm: {\n operator_address: '',\n account_address: 'dora1gh8j89jtc2vx6d3y4ehllcdlvluwa49wfs7yxy',\n allocation: '33743029941764137943040',\n allocation_dora: 33743.029941764136,\n moniker: 'ITRocket',\n program_voting_power: 0.09616741414897524,\n tokens: '300080064215405665352721',\n },\n doravaloper1j8ru7p8zctup6grfwuga6ndrjj7v88wzn407x7: {\n operator_address: '',\n account_address: 'dora1j8ru7p8zctup6grfwuga6ndrjj7v88wzqr2gsp',\n allocation: '22646525272055477174272',\n allocation_dora: 22646.525272055478,\n moniker: 'StakeUs',\n program_voting_power: 0.06454244857772638,\n tokens: '201397763319500000000000',\n },\n doravaloper1l5zz0kkjt2n7nllsrymy96mc2v2gehda0zc85s: {\n operator_address: '',\n account_address: 'dora1l5zz0kkjt2n7nllsrymy96mc2v2gehdau5a3z0',\n allocation: '22622846742220005965824',\n allocation_dora: 22622.846742220005,\n moniker: 'BlackNodes',\n program_voting_power: 0.06447496492290769,\n tokens: '201187187838702364379121',\n },\n doravaloper1m9v3txhhtadjxpv09gwjhhs344qsxgfscwxjkg: {\n operator_address: '',\n account_address: 'dora1m9v3txhhtadjxpv09gwjhhs344qsxgfstcryqh',\n allocation: '22549006983854435598336',\n allocation_dora: 22549.006983854437,\n moniker: '👋 79anvi 🍀',\n program_voting_power: 0.06426452209558432,\n tokens: '200530523648490887200824',\n },\n doravaloper1tu8006g60t62zwgwf5knkaujv0uzhp2a6wh94h: {\n operator_address: '',\n account_address: 'dora1tu8006g60t62zwgwf5knkaujv0uzhp2afcjnrg',\n allocation: '39369183740744815345664',\n allocation_dora: 39369.18374074482,\n moniker: 'Citadel.one',\n program_voting_power: 0.11220191559671686,\n tokens: '350114000000000000000000',\n },\n doravaloper1x5z0tkafrgyeuqkrwfjr933vghjxchqnqlhcdw: {\n operator_address: '',\n account_address: 'dora1x5z0tkafrgyeuqkrwfjr933vghjxchqnnfjwm3',\n allocation: '22611521290904268701696',\n allocation_dora: 22611.521290904268,\n moniker: '1ce',\n program_voting_power: 0.064442687460896,\n tokens: '201086469492900000000000',\n },\n doravaloper1z6kfew2nhuh02szc2hdecw4fqey2d32auucvux: {\n operator_address: '',\n account_address: 'dora1z6kfew2nhuh02szc2hdecw4fqey2d32a02a62e',\n allocation: '45246951843662957379584',\n allocation_dora: 45246.95184366296,\n moniker: 'Nodes.Guru',\n program_voting_power: 0.12895351616135226,\n tokens: '402385566389000000000006',\n },\n doravaloper1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v: {\n operator_address: '',\n account_address: 'dora1zzne8ufazycklx4j6mgc987t8ykd6wxu63223v',\n allocation: '44982761968475888943104',\n allocation_dora: 44982.76196847589,\n moniker: 'ZKV',\n program_voting_power: 0.12820057674882976,\n tokens: '400036100000000000000000',\n },\n};\n\nexport interface NetworkConfig {\n network: string;\n chainId: string;\n rpcEndpoint: string;\n restEndpoint: string;\n apiEndpoint: string;\n certificateApiEndpoint: string;\n registryAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n}\n\nexport function getDefaultParams(\n network: 'mainnet' | 'testnet' = 'mainnet'\n): NetworkConfig {\n switch (network) {\n case 'mainnet':\n return {\n network: 'mainnet',\n chainId: 'vota-ash',\n rpcEndpoint: 'https://vota-rpc.dorafactory.org',\n restEndpoint: 'https://vota-rest.dorafactory.org',\n apiEndpoint: 'https://vota-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 117, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n };\n case 'testnet':\n return {\n network: 'testnet',\n chainId: 'vota-testnet',\n rpcEndpoint: 'https://vota-testnet-rpc.dorafactory.org',\n restEndpoint: 'https://vota-testnet-rest.dorafactory.org',\n apiEndpoint: 'https://vota-testnet-api.dorafactory.org',\n certificateApiEndpoint:\n 'https://vota-testnet-certificate-api.dorafactory.org/api/v1',\n registryAddress:\n 'dora13c8aecstyxrhax9znvvh5zey89edrmd2k5va57pxvpe3fxtfsfeqlhsjnd',\n maciCodeId: 107,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 115, // 6-3-3-125\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n };\n }\n}\n","import { Http } from '../../libs';\nimport {\n CircuitResponse,\n CircuitsCountGraphqlResponse,\n CircuitType,\n CircuitsResponse,\n} from '../../types';\nimport { circuits } from '../const';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Circuit {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n try {\n const circuitName = name;\n const circuitData: CircuitType = circuits[circuitName];\n\n if (circuitData === undefined) {\n return {\n code: 404,\n error: {\n message: `Circuit ${circuitName} not found`,\n type: ERROR.ERROR_CIRCUIT_NOT_FOUND,\n },\n };\n }\n\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuitData.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse =\n await this.http.fetchGraphql<CircuitsCountGraphqlResponse>(\n CIRCUIT_ROUNDS_COUNT_QUERY,\n ''\n );\n\n circuitData.roundCount =\n circuitRoundsCountResponse.data.rounds.totalCount;\n\n const response: CircuitResponse = {\n code: 200,\n data: {\n circuit: circuitData,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getCircuits(): Promise<CircuitsResponse> {\n try {\n const circuitsArray: CircuitType[] = Object.values(circuits).sort(\n (a, b) => a.displayName.localeCompare(b.displayName)\n );\n\n const circuitsWithRoundCount = await Promise.all(\n circuitsArray.map(async (circuit) => {\n const CIRCUIT_ROUNDS_COUNT_QUERY = `\n query {\n rounds(filter: { circuitName: { equalTo: \"${circuit.displayName}\" } }) {\n totalCount\n }\n }\n `;\n const circuitRoundsCountResponse: CircuitsCountGraphqlResponse =\n await this.http.fetchGraphql(CIRCUIT_ROUNDS_COUNT_QUERY, '');\n return {\n ...circuit,\n roundCount: circuitRoundsCountResponse.data.rounds.totalCount,\n };\n })\n );\n\n const response: CircuitsResponse = {\n code: 200,\n data: {\n circuits: circuitsWithRoundCount,\n },\n };\n\n return response;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { decode } from 'bech32';\n\nfunction verifyIsBech32(address: string): Error | undefined {\n try {\n decode(address);\n } catch (error) {\n return error instanceof Error ? error : new Error('Unknown error');\n }\n\n return undefined;\n}\n\nexport function isValidAddress(address: string): boolean {\n // An address is valid if it starts with `dora` and is Bech32 format.\n return address.startsWith('dora') && verifyIsBech32(address) === undefined;\n}\n\n/**\n * Converts a hexadecimal string to a decimal string.\n * @param hexString - The hexadecimal string to convert.\n * @returns The decimal string representation of the input.\n */\nexport function hexToDecimalString(hexString: string) {\n const decimalString = BigInt('0x' + hexString).toString(10);\n return decimalString;\n}\n\nfunction padWithZerosIfNeeded(inputString: string) {\n if (inputString.length === 64) {\n return inputString;\n } else if (inputString.length < 64) {\n const zerosToAdd = 64 - inputString.length;\n const zeroPadding = '0'.repeat(zerosToAdd);\n return zeroPadding + inputString;\n }\n throw new Error('Invalid input string length');\n}\n\n/**\n * Parses a public key string into its x and y coordinates.\n * @param publickKey - The public key string to parse (128 characters long).\n * @returns An object containing the x and y coordinates as decimal strings.\n */\nexport function decompressPublicKey(compressedPubkey: string) {\n const x = compressedPubkey.slice(0, 64);\n const y = compressedPubkey.slice(64);\n\n return {\n x: hexToDecimalString(x),\n y: hexToDecimalString(y),\n };\n}\n\nexport function compressPublicKey(decompressedPubkey: any[]) {\n const x = decompressedPubkey[0];\n const y = decompressedPubkey[1];\n const compressedPubkey =\n padWithZerosIfNeeded(x.toString(16)) + padWithZerosIfNeeded(y.toString(16));\n return compressedPubkey;\n}\n","import { ERROR } from '../errors/types';\nimport { Http } from '../../libs';\nimport {\n OperatorsGraphqlResponse,\n RoundsCountGraphqlResponse,\n OperatorResponse,\n OperatorsResponse,\n OperatorDelayOperationsResponse,\n OperatorDelayOperationsGraphqlResponse,\n MissRateResponse,\n MissRateType,\n TransactionsGraphqlResponse,\n RoundsGraphqlResponse,\n} from '../../types';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\n\nexport class Operator {\n public http: Http;\n public amaciRegistryContract: string;\n\n constructor(http: Http, amaciRegistryContract: string) {\n this.http = http;\n this.amaciRegistryContract = amaciRegistryContract;\n }\n\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query {\n operators(filter: { operatorAddress: { equalTo: \"${address}\" } }) {\n edges {\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges ||\n response.data.operators.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operator found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_NOT_FOUND,\n },\n };\n }\n\n const operatorResponse = response.data.operators.edges[0].node;\n\n if (\n operatorResponse.operatorAddress === '' ||\n operatorResponse.coordinatorPubkeyX === ''\n ) {\n operatorResponse.activeRoundsCount = 0;\n operatorResponse.completedRoundsCount = 0;\n } else {\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operatorResponse.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operatorResponse.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operatorResponse.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n }\n\n operatorResponse.logoUrl = '';\n operatorResponse.moniker = '';\n const identity = response.data.operators.edges[0].node.identity;\n\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operatorResponse.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operatorResponse.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n const operator: OperatorResponse = {\n code: 200,\n data: {\n operator: operatorResponse,\n },\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(first: $limit, after: $after, filter: {operatorAddress: {equalTo: \"${address}\"}}, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.operatorDelayOperations ||\n !response.data.operatorDelayOperations.edges ||\n response.data.operatorDelayOperations.edges.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No operatorDelayOperations found for address ${address}`,\n type: ERROR.ERROR_OPERATOR_DELAY_HISTORY_NOT_FOUND,\n },\n };\n }\n const operator: OperatorDelayOperationsResponse = {\n code: 200,\n data: response.data,\n };\n return operator;\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n try {\n const OPERATORS_QUERY = `query ($limit: Int, $after: Cursor) {\n operators(first: $limit, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n validatorAddress\n operatorAddress\n coordinatorPubkeyX\n coordinatorPubkeyY\n identity\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<OperatorsGraphqlResponse>(\n OPERATORS_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.operators ||\n !response.data.operators.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No operators found',\n type: ERROR.ERROR_OPERATORS_NOT_FOUND,\n },\n };\n }\n const operatorsWithRounds = await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n if (\n operator.operatorAddress === '' ||\n operator.coordinatorPubkeyX === ''\n ) {\n operator.activeRoundsCount = 0;\n operator.completedRoundsCount = 0;\n return operator;\n }\n const ROUNDS_QUERY = `query {\n activeRoundsCount: rounds(filter: {\n period: {notEqualTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n completedRoundsCount: rounds(filter: {\n period: {equalTo: \"Ended\"},\n operator: {equalTo: \"${operator.operatorAddress}\"},\n caller: {equalTo: \"${this.amaciRegistryContract}\"}\n }) {\n totalCount\n }\n }`;\n\n const roundsCount =\n await this.http.fetchGraphql<RoundsCountGraphqlResponse>(\n ROUNDS_QUERY,\n ''\n );\n operator.activeRoundsCount =\n roundsCount.data.activeRoundsCount.totalCount;\n operator.completedRoundsCount =\n roundsCount.data.completedRoundsCount.totalCount;\n\n return operator;\n })\n );\n\n response.data.operators.edges = operatorsWithRounds.map(\n (operator, index) => ({\n cursor: response.data.operators.edges[index].cursor,\n node: operator,\n })\n );\n\n await Promise.all(\n response.data.operators.edges.map(async (edge) => {\n const operator = edge.node;\n const identity = operator.identity;\n operator.logoUrl = '';\n operator.moniker = '';\n\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n operator.logoUrl = keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n operator.moniker = keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n return operator;\n })\n );\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n try {\n const now = new Date();\n const startTime = new Date(\n now.getTime() - durationDay * 24 * 60 * 60 * 1000\n );\n const startTimestamp = Math.floor(startTime.getTime() / 1000);\n const endNanosTimestamp = Math.floor(startTime.getTime() * 1000000);\n const txTimestamp = Math.floor(startTime.getTime());\n\n const QUERY = `query ($limit: Int, $after: Cursor) {\n operatorDelayOperations(\n first: $limit,\n after: $after,\n filter: {\n operatorAddress: {equalTo: \"${address}\"},\n timestamp: { greaterThanOrEqualTo: \"${startTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ) {\n edges {\n node {\n blockHeight\n delayProcessDmsgCount\n delayDuration\n delayReason\n delayType\n id\n nodeId\n operatorAddress\n timestamp\n roundAddress\n }\n }\n }\n }`;\n\n const ROUNDS_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, \n filter: {\n operator: {equalTo: \"${address}\"},\n votingEnd: { greaterThanOrEqualTo: \"${endNanosTimestamp}\" }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const roundsResponse =\n await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUNDS_QUERY,\n '',\n 9999\n );\n const roundContractAddresses =\n roundsResponse?.data?.rounds?.edges?.map(\n (edge) => edge.node.contractAddress\n ) || [];\n\n const TRANSACTIONS_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, \n filter: {\n timestamp: { greaterThanOrEqualTo: \"${txTimestamp}\" },\n type: { equalTo: \"op:procDeactivate\" },\n contractAddress: { in: ${JSON.stringify(roundContractAddresses)} }\n },\n orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const [delayResponse, transactionsResponse] = await Promise.all([\n this.http.fetchGraphql<OperatorDelayOperationsGraphqlResponse>(\n QUERY,\n '',\n 9999\n ),\n this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTIONS_QUERY,\n '',\n 9999\n ),\n ]);\n\n const dailyStats = new Map<string, MissRateType>();\n\n const endDate = new Date();\n for (let i = 0; i < durationDay; i++) {\n const date = new Date(endDate.getTime() - i * 24 * 60 * 60 * 1000)\n .toISOString()\n .split('T')[0];\n dailyStats.set(date, {\n delayCount: 0,\n deactivateDelay: {\n count: 0,\n dmsgCount: 0,\n },\n tallyDelay: {\n count: 0,\n },\n totalDelayDuration: 0,\n avgDelayDuration: 0,\n tallyCount: 0,\n deactivateCount: 0,\n missRate: 0,\n });\n }\n\n delayResponse.data.operatorDelayOperations.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp) * 1000)\n .toISOString()\n .split('T')[0];\n\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.delayCount++;\n stats.totalDelayDuration += parseInt(node.delayDuration);\n if (node.delayType === 'deactivate_delay') {\n stats.deactivateDelay.count++;\n stats.deactivateDelay.dmsgCount += node.delayProcessDmsgCount;\n } else if (node.delayType === 'tally_delay') {\n stats.tallyDelay.count++;\n }\n }\n });\n\n if (roundsResponse?.data?.rounds?.edges) {\n roundsResponse.data.rounds.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.votingEnd) / 1000000)\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.tallyCount++;\n }\n });\n }\n\n if (transactionsResponse?.data?.transactions?.edges) {\n transactionsResponse.data.transactions.edges.forEach(({ node }) => {\n const date = new Date(parseInt(node.timestamp))\n .toISOString()\n .split('T')[0];\n if (dailyStats.has(date)) {\n const stats = dailyStats.get(date)!;\n stats.deactivateCount++;\n }\n });\n }\n\n return {\n code: 200,\n data: {\n missRate: Array.from(dailyStats.entries())\n .map(([date, stats]) => ({\n date,\n delayCount: stats.delayCount,\n deactivateDelay: stats.deactivateDelay,\n tallyDelay: stats.tallyDelay,\n totalDelayDuration: stats.totalDelayDuration,\n avgDelayDuration:\n stats.delayCount > 0\n ? stats.totalDelayDuration / stats.delayCount\n : 0,\n tallyCount: stats.tallyCount,\n deactivateCount: stats.deactivateCount,\n missRate:\n stats.deactivateCount + stats.tallyCount > 0\n ? parseFloat(\n (\n (stats.deactivateDelay.count + stats.tallyDelay.count) /\n (stats.deactivateCount + stats.tallyCount)\n ).toFixed(2)\n )\n : 0,\n }))\n .sort((a, b) => b.date.localeCompare(a.date)),\n },\n };\n } catch (error) {\n return {\n code: 404,\n error: {\n message: 'Query miss rate failed',\n type: ERROR.ERROR_QUERY_MISS_RATE_FAILED,\n },\n };\n }\n }\n}\n","import {\n RoundsResponse,\n RoundResponse,\n RoundGraphqlResponse,\n RoundsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Round {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getRoundById(address: string): Promise<RoundResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n identity\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundGraphqlResponse>(\n ROUND_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.round) {\n return {\n code: 404,\n error: {\n message: `No round data found for address ${address}`,\n type: ERROR.ERROR_ROUND_NOT_FOUND,\n },\n };\n }\n\n response.data.round.operatorLogoUrl = '';\n response.data.round.operatorMoniker = '';\n\n const identity = response.data.round.identity;\n // try {\n const keybaseUrl = `https://keybase.io/_/api/1.0/user/lookup.json?key_suffix=${identity}`;\n const keybaseResponse = await this.http.fetch(keybaseUrl);\n const keybaseData = await keybaseResponse.json();\n\n if (keybaseData.status.code === 0) {\n if (keybaseData.them[0]?.pictures?.primary?.url) {\n response.data.round.operatorLogoUrl =\n keybaseData.them[0].pictures.primary.url;\n }\n if (keybaseData.them[0]?.basics?.username_cased) {\n response.data.round.operatorMoniker =\n keybaseData.them[0].profile.full_name;\n }\n }\n // } catch (error) {\n // console.error('Error fetching keybase data:', error);\n // }\n\n const results = JSON.parse(response.data.round.results);\n const votes = results.map((r: string) => ({\n v: Number(r.slice(0, -24)),\n v2: Number(r.slice(-24)),\n }));\n const totalVotes = votes.reduce(\n (s: { v: number; v2: number }, c: { v: number; v2: number }) => ({\n v: s.v + c.v,\n v2: s.v2 + c.v2,\n }),\n { v: 0, v2: 0 }\n );\n const resultsList = votes.map((v: { v: number; v2: number }) => ({\n v: totalVotes.v === 0 ? '0.0' : ((v.v / totalVotes.v) * 100).toFixed(3),\n v2:\n totalVotes.v2 === 0\n ? '0.0'\n : ((v.v2 / totalVotes.v2) * 100).toFixed(3),\n }));\n response.data.round.resultsList = resultsList;\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n cursor\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No rounds data found',\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByCircuitName(\n circuitName: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const ROUND_HISTORY_QUERY = `query ($limit: Int, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n circuitName:{\n equalTo: \"${circuitName}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for circuit name ${circuitName}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n const currentTime = Math.floor(Date.now() / 1000);\n let filterCondition = '';\n\n switch (status) {\n case 'Created':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" } },\n { and: [\n { votingStart: { notEqualTo: \"0\" } },\n { votingStart: { greaterThan: \"${currentTime.toString()}\" } }\n ] }\n ]\n `;\n break;\n case 'Ongoing':\n filterCondition = `\n or: [\n { votingStart: { equalTo: \"0\" }},\n { votingStart: { lessThanOrEqualTo: \"${currentTime.toString()}\" }, votingEnd: { greaterThan: \"${currentTime.toString()}\" } }\n ]\n `;\n break;\n case 'Tallying':\n filterCondition = `\n and: [\n { status: { notEqualTo: \"Closed\" } },\n { votingEnd: { lessThan: \"${currentTime.toString()}\" } },\n { votingEnd: { notEqualTo: \"0\" } }\n ]\n `;\n break;\n case 'Closed':\n filterCondition = `status: { equalTo: \"Closed\" }`;\n break;\n default:\n return {\n code: 400,\n error: {\n message: `Invalid status: ${status}`,\n type: ERROR.ERROR_ROUND_INVALID_STATUS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter: { ${filterCondition} }, orderBy: [TIMESTAMP_DESC]) {\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for status ${status}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getRoundsByOperator(\n operator: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n try {\n if (!isValidAddress(operator)) {\n return {\n code: 400,\n error: {\n message: 'Invalid operator address format',\n type: ERROR.ERROR_OPERATOR_INVALID_ADDRESS,\n },\n };\n }\n\n const ROUND_HISTORY_QUERY = `query ($limit: Int!, $after: Cursor) {\n rounds(first: $limit, after: $after, filter:{\n operator:{\n equalTo: \"${operator}\"\n }\n }, orderBy: [TIMESTAMP_DESC]){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n caller\n admin\n operator\n contractAddress\n circuitName\n timestamp\n votingStart\n votingEnd\n status\n period\n actionType\n roundTitle\n roundDescription\n roundLink\n coordinatorPubkeyX\n coordinatorPubkeyY\n voteOptionMap\n results\n allResult\n gasStationEnable\n totalGrant\n baseGrant\n totalBond\n circuitType\n circuitPower\n certificationSystem\n codeId\n maciType\n voiceCreditAmount\n preDeactivateRoot\n }\n }\n }\n }`;\n\n const response = await this.http.fetchGraphql<RoundsGraphqlResponse>(\n ROUND_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.rounds ||\n !response.data.rounds.edges\n ) {\n return {\n code: 404,\n error: {\n message: `No rounds data found for operator ${operator}`,\n type: ERROR.ERROR_ROUNDS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n TransactionsResponse,\n TransactionResponse,\n TransactionGraphqlResponse,\n TransactionsGraphqlResponse,\n} from '../../types';\nimport { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Transaction {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getTransactionByHash(txHash: string): Promise<TransactionResponse> {\n try {\n const TRANSACTION_QUERY = `query {\n transaction(id: \"${txHash}\") {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }`;\n\n const response = await this.http.fetchGraphql<TransactionGraphqlResponse>(\n TRANSACTION_QUERY,\n ''\n );\n\n if (!response || !response.data || !response.data.transaction) {\n return {\n code: 404,\n error: {\n message: `No transaction found for txHash ${txHash}`,\n type: ERROR.ERROR_TRANSACTION_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int, $after: Cursor) {\n transactions(first: $limit, after: $after, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const TRANSACTION_HISTORY_QUERY = `query transactions($limit: Int!, $after: Cursor) {\n transactions(first: $limit, after: $after, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n }, orderBy: [TIMESTAMP_DESC]\n ){\n pageInfo {\n endCursor\n hasNextPage\n }\n totalCount\n edges {\n cursor\n node {\n id\n blockHeight\n txHash\n timestamp\n type\n status\n circuitName\n fee\n gasUsed\n gasWanted\n caller\n contractAddress\n }\n }\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<TransactionsGraphqlResponse>(\n TRANSACTION_HISTORY_QUERY,\n after,\n limit\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.transactions ||\n !response.data.transactions.edges\n ) {\n return {\n code: 404,\n error: {\n message: 'No transactions data found',\n type: ERROR.ERROR_TRANSACTIONS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { isValidAddress } from '../../utils';\nimport { ProofResponse, ProofGraphqlResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Proof {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n try {\n if (!isValidAddress(address)) {\n return {\n code: 400,\n error: {\n message: 'Invalid round address format',\n type: ERROR.ERROR_ROUND_INVALID_ADDRESS,\n },\n };\n }\n\n const PROOF_QUERY = `query HomePage {\n proofData(first: 100, filter:{\n contractAddress:{\n equalTo: \"${address}\"\n }\n } ,orderBy: [TIMESTAMP_DESC]\n ){\n nodes {\n id\n blockHeight\n txHash\n contractAddress\n timestamp\n actionType\n commitment\n proof\n }\n }\n }\n `;\n\n const response = await this.http.fetchGraphql<ProofGraphqlResponse>(\n PROOF_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.proofData ||\n !response.data.proofData.nodes ||\n response.data.proofData.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No proof found for round address ${address}`,\n type: ERROR.ERROR_PROOF_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: response.data,\n };\n } catch (error) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import { Http } from '../../libs';\nimport { SignUpEventsGraphqlResponse, SignUpEventsResponse } from '../../types';\nimport { handleError, ErrorType } from '../errors';\nimport { ERROR } from '../errors/types';\n\nexport class Event {\n public http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n try {\n const STATE_IDX_BY_PUB_KEY_QUERY = `\nquery signUpEvents($limit: Int, $after: Cursor) {\n\tsignUpEvents(\n first: $limit, after: $after,\n\t\tfilter: {\n\t\t\tcontractAddress: {\n\t\t\t\tequalTo: \"${contractAddress}\"\n\t\t\t}\n\t\t\tpubKey: {\n\t\t\t\tequalTo: \"${pubKey.map((n) => `\\\\\"${n}\\\\\"`).join(',')}\"\n\t\t\t}\n\t\t}) {\n\t\tnodes {\n\t\t\tid\n\t\t\tblockHeight\n\t\t\ttxHash\n\t\t\tcontractAddress\n\t\t\ttimestamp\n\t\t\tpubKey\n\t\t\tstateIdx\n\t\t\tbalance\n\t\t}\n\t}\n}\n `;\n\n const response =\n await this.http.fetchGraphql<SignUpEventsGraphqlResponse>(\n STATE_IDX_BY_PUB_KEY_QUERY,\n ''\n );\n\n if (\n !response ||\n !response.data ||\n !response.data.signUpEvents ||\n !response.data.signUpEvents.nodes ||\n response.data.signUpEvents.nodes.length === 0\n ) {\n return {\n code: 404,\n error: {\n message: `No signUpEvents found for pubKey ${pubKey\n .map((n) => `\"${n}\"`)\n .join(',')}`,\n type: ERROR.ERROR_SIGN_UP_EVENTS_NOT_FOUND,\n },\n };\n }\n\n return {\n code: 200,\n data: {\n signUpEvents: response.data.signUpEvents.nodes,\n },\n };\n } catch (error: any) {\n return handleError(error as ErrorType);\n }\n }\n}\n","import {\n BalanceResponse,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n SignUpEventsResponse,\n OperatorDelayOperationsResponse,\n MissRateResponse,\n} from '../../types';\nimport { IndexerParams } from './types';\nimport { Http } from '../http';\nimport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n Event,\n} from '../query';\n\n/**\n * @class Indexer\n * @description This class is used to interact with Maci Indexer.\n */\nexport class Indexer {\n public restEndpoint: string;\n public apiEndpoint: string;\n public registryAddress: string;\n\n public http: Http;\n public round: Round;\n public account: UserAccount;\n public circuit: Circuit;\n public operator: Operator;\n public proof: Proof;\n public transaction: Transaction;\n public event: Event;\n\n /**\n * @constructor\n * @param {IndexerParams} params - The parameters for the Maci Indexer instance.\n */\n constructor({\n restEndpoint,\n apiEndpoint,\n registryAddress,\n http,\n }: IndexerParams) {\n this.http = http;\n\n this.restEndpoint = restEndpoint;\n this.apiEndpoint = apiEndpoint;\n this.registryAddress = registryAddress;\n\n this.round = new Round(this.http);\n this.account = new UserAccount(this.http);\n this.circuit = new Circuit(this.http);\n this.operator = new Operator(this.http, this.registryAddress);\n this.proof = new Proof(this.http);\n this.transaction = new Transaction(this.http);\n this.event = new Event(this.http);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.round.getRoundById(id);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.operator.getOperatorByAddress(address);\n }\n\n async getOperatorDelayOperationsByAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<OperatorDelayOperationsResponse> {\n return await this.operator.getOperatorDelayOperationsByAddress(\n address,\n after,\n limit\n );\n }\n\n async queryMissRate(\n address: string,\n durationDay: number\n ): Promise<MissRateResponse> {\n return await this.operator.queryMissRate(address, durationDay);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.proof.getProofByContractAddress(address);\n }\n\n /**\n * @method getStateIdxByPubKey\n * @description Get the state index of a specific public key.\n * @param {string} contractAddress - The contract address.\n * @param {bigint[]} pubKey - The public key.\n * @returns {Promise<SignUpEventsResponse>} The sign up events response.\n */\n async getSignUpEventByPubKey(\n contractAddress: string,\n pubKey: bigint[]\n ): Promise<SignUpEventsResponse> {\n return await this.event.getSignUpEventByPubKey(contractAddress, pubKey);\n }\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport {\n SigningCosmWasmClient,\n SigningCosmWasmClientOptions,\n} from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { OracleMaciClient } from './ts/OracleMaci.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 64_000,\n gasPrice: GasPrice.fromString('100000000000peaka'),\n};\n\nexport async function createMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new MaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createAMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new AMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createRegistryClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new RegistryClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createOracleMaciClientBy({\n rpcEndpoint,\n wallet,\n contractAddress,\n}: {\n rpcEndpoint: string;\n wallet: OfflineSigner;\n contractAddress: string;\n}) {\n const signingCosmWasmClient = await createContractClientByWallet(\n rpcEndpoint,\n wallet\n );\n const [{ address }] = await wallet.getAccounts();\n return new OracleMaciClient(signingCosmWasmClient, address, contractAddress);\n}\n\nexport async function createContractClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const client = await SigningCosmWasmClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return client;\n}\n\nexport async function getSignerClientByWallet(\n rpcEndpoint: string,\n wallet: OfflineSigner\n) {\n const signingStargateClient = await SigningStargateClient.connectWithSigner(\n rpcEndpoint,\n wallet,\n {\n ...defaultSigningClientOptions,\n }\n );\n return signingStargateClient;\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n Addr,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './Maci.types';\nexport interface MaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: string }) => Promise<Boolean>;\n whiteBalanceOf: ({ sender }: { sender: string }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n}\nexport class MaciQueryClient implements MaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: string }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n whiteBalanceOf = async ({ sender }: { sender: string }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n sender,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n}\nexport interface MaciInterface extends MaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class MaciClient extends MaciQueryClient implements MaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n Uint256,\n Timestamp,\n Uint64,\n InstantiateMsg,\n PubKey,\n MaciParameters,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n Boolean,\n ArrayOfString,\n} from './AMaci.types';\nexport interface AMaciReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<Addr>;\n operator: () => Promise<Addr>;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getDMsgChainLength: () => Promise<Uint256>;\n getProcessedDMsgCount: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getVoiceCreditAmount: () => Promise<Uint256>;\n whiteList: () => Promise<Whitelist>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n signuped: ({ pubkeyX }: { pubkeyX: Uint256 }) => Promise<Uint256>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryPreDeactivateRoot: () => Promise<Uint256>;\n}\nexport class AMaciQueryClient implements AMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getDMsgChainLength = this.getDMsgChainLength.bind(this);\n this.getProcessedDMsgCount = this.getProcessedDMsgCount.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.getVoiceCreditAmount = this.getVoiceCreditAmount.bind(this);\n this.whiteList = this.whiteList.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.signuped = this.signuped.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryPreDeactivateRoot = this.queryPreDeactivateRoot.bind(this);\n }\n admin = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getDMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_d_msg_chain_length: {},\n });\n };\n getProcessedDMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_d_msg_count: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n getVoiceCreditAmount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_amount: {},\n });\n };\n whiteList = async (): Promise<Whitelist> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_list: {},\n });\n };\n isWhiteList = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n sender,\n },\n });\n };\n signuped = async ({ pubkeyX }: { pubkeyX: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n signuped: {\n pubkey_x: pubkeyX,\n },\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryPreDeactivateRoot = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_pre_deactivate_root: {},\n });\n };\n}\nexport interface AMaciInterface extends AMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setWhitelists: (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishDeactivateMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processDeactivateMessage: (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n preAddNewKey: (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class AMaciClient extends AMaciQueryClient implements AMaciInterface {\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setWhitelists = this.setWhitelists.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.publishDeactivateMessage = this.publishDeactivateMessage.bind(this);\n this.processDeactivateMessage = this.processDeactivateMessage.bind(this);\n this.addNewKey = this.addNewKey.bind(this);\n this.preAddNewKey = this.preAddNewKey.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setWhitelists = async (\n {\n whitelists,\n }: {\n whitelists: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_whitelists: {\n whitelists,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishDeactivateMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_deactivate_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processDeactivateMessage = async (\n {\n groth16Proof,\n newDeactivateCommitment,\n newDeactivateRoot,\n size,\n }: {\n groth16Proof: Groth16ProofType;\n newDeactivateCommitment: Uint256;\n newDeactivateRoot: Uint256;\n size: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_deactivate_message: {\n groth16_proof: groth16Proof,\n new_deactivate_commitment: newDeactivateCommitment,\n new_deactivate_root: newDeactivateRoot,\n size,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n preAddNewKey = async (\n {\n d,\n groth16Proof,\n nullifier,\n pubkey,\n }: {\n d: Uint256[];\n groth16Proof: Groth16ProofType;\n nullifier: Uint256;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n pre_add_new_key: {\n d,\n groth16_proof: groth16Proof,\n nullifier,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newStateCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n }: {\n groth16Proof: Groth16ProofType;\n newTallyCommitment: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n maxAmount,\n }: {\n maxAmount: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n max_amount: maxAmount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {},\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Addr,\n InstantiateMsg,\n ExecuteMsg,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n VotingTime,\n Whitelist,\n WhitelistConfig,\n ValidatorSet,\n QueryMsg,\n AdminResponse,\n String,\n Boolean,\n} from './Registry.types';\nexport interface RegistryReadOnlyInterface {\n contractAddress: string;\n admin: () => Promise<AdminResponse>;\n operator: () => Promise<Addr>;\n isMaciOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n isValidator: ({ address }: { address: Addr }) => Promise<Boolean>;\n getValidators: () => Promise<ValidatorSet>;\n getValidatorOperator: ({ address }: { address: Addr }) => Promise<Addr>;\n getMaciOperatorPubkey: ({ address }: { address: Addr }) => Promise<PubKey>;\n getMaciOperatorIdentity: ({ address }: { address: Addr }) => Promise<String>;\n}\nexport class RegistryQueryClient implements RegistryReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.admin = this.admin.bind(this);\n this.operator = this.operator.bind(this);\n this.isMaciOperator = this.isMaciOperator.bind(this);\n this.isValidator = this.isValidator.bind(this);\n this.getValidators = this.getValidators.bind(this);\n this.getValidatorOperator = this.getValidatorOperator.bind(this);\n this.getMaciOperatorPubkey = this.getMaciOperatorPubkey.bind(this);\n this.getMaciOperatorIdentity = this.getMaciOperatorIdentity.bind(this);\n }\n admin = async (): Promise<AdminResponse> => {\n return this.client.queryContractSmart(this.contractAddress, {\n admin: {},\n });\n };\n operator = async (): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator: {},\n });\n };\n isMaciOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_maci_operator: {\n address,\n },\n });\n };\n isValidator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_validator: {\n address,\n },\n });\n };\n getValidators = async (): Promise<ValidatorSet> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validators: {},\n });\n };\n getValidatorOperator = async ({\n address,\n }: {\n address: Addr;\n }): Promise<Addr> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_validator_operator: {\n address,\n },\n });\n };\n getMaciOperatorPubkey = async ({\n address,\n }: {\n address: Addr;\n }): Promise<PubKey> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_pubkey: {\n address,\n },\n });\n };\n getMaciOperatorIdentity = async ({\n address,\n }: {\n address: Addr;\n }): Promise<String> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_maci_operator_identity: {\n address,\n },\n });\n };\n}\nexport interface RegistryInterface extends RegistryReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setMaciOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorPubkey: (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setMaciOperatorIdentity: (\n {\n identity,\n }: {\n identity: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createRound: (\n {\n certificationSystem,\n circuitType,\n maxOption,\n maxVoter,\n operator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxOption: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n votingTime: VotingTime;\n whitelist?: Whitelist;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setValidators: (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeValidator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateAmaciCodeId: (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n changeOperator: (\n {\n address,\n }: {\n address: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class RegistryClient\n extends RegistryQueryClient\n implements RegistryInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setMaciOperator = this.setMaciOperator.bind(this);\n this.setMaciOperatorPubkey = this.setMaciOperatorPubkey.bind(this);\n this.setMaciOperatorIdentity = this.setMaciOperatorIdentity.bind(this);\n this.createRound = this.createRound.bind(this);\n this.setValidators = this.setValidators.bind(this);\n this.removeValidator = this.removeValidator.bind(this);\n this.updateAmaciCodeId = this.updateAmaciCodeId.bind(this);\n this.changeOperator = this.changeOperator.bind(this);\n }\n setMaciOperator = async (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorPubkey = async (\n {\n pubkey,\n }: {\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_pubkey: {\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setMaciOperatorIdentity = async (\n {\n identity,\n }: {\n identity: string;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_maci_operator_identity: {\n identity,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createRound = async (\n {\n certificationSystem,\n circuitType,\n maxOption,\n maxVoter,\n operator,\n preDeactivateRoot,\n roundInfo,\n voiceCreditAmount,\n votingTime,\n whitelist,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n maxOption: Uint256;\n maxVoter: Uint256;\n operator: Addr;\n preDeactivateRoot: Uint256;\n roundInfo: RoundInfo;\n voiceCreditAmount: Uint256;\n votingTime: VotingTime;\n whitelist?: Whitelist;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n create_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n max_option: maxOption,\n max_voter: maxVoter,\n operator,\n pre_deactivate_root: preDeactivateRoot,\n round_info: roundInfo,\n voice_credit_amount: voiceCreditAmount,\n voting_time: votingTime,\n whitelist,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setValidators = async (\n {\n addresses,\n }: {\n addresses: ValidatorSet;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_validators: {\n addresses,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeValidator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n remove_validator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateAmaciCodeId = async (\n {\n amaciCodeId,\n }: {\n amaciCodeId: number;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n update_amaci_code_id: {\n amaci_code_id: amaciCodeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n changeOperator = async (\n {\n address,\n }: {\n address: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n change_operator: {\n address,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","/**\n * This file was automatically generated by @cosmwasm/ts-codegen@1.11.1.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run the @cosmwasm/ts-codegen generate command to regenerate this file.\n */\n\nimport {\n CosmWasmClient,\n SigningCosmWasmClient,\n ExecuteResult,\n} from '@cosmjs/cosmwasm-stargate';\nimport { Coin, StdFee } from '@cosmjs/amino';\nimport {\n Uint256,\n Addr,\n Timestamp,\n Uint64,\n VotingPowerMode,\n InstantiateMsg,\n PubKey,\n Groth16VKeyType,\n MaciParameters,\n PlonkVKeyType,\n QuinaryTreeRoot,\n RoundInfo,\n VotingTime,\n VotingPowerArgs,\n ExecuteMsg,\n Uint128,\n MessageData,\n Groth16ProofType,\n PlonkProofType,\n QueryMsg,\n PeriodStatus,\n Period,\n GrantConfig,\n Boolean,\n Binary,\n OracleWhitelistConfig,\n ArrayOfString,\n WhitelistConfig,\n} from './OracleMaci.types';\nexport interface OracleMaciReadOnlyInterface {\n contractAddress: string;\n getRoundInfo: () => Promise<RoundInfo>;\n getVotingTime: () => Promise<VotingTime>;\n getPeriod: () => Promise<Period>;\n getNumSignUp: () => Promise<Uint256>;\n getMsgChainLength: () => Promise<Uint256>;\n getProcessedMsgCount: () => Promise<Uint256>;\n getProcessedUserCount: () => Promise<Uint256>;\n getResult: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n getAllResult: () => Promise<Uint256>;\n getStateIdxInc: ({ address }: { address: Addr }) => Promise<Uint256>;\n getVoiceCreditBalance: ({ index }: { index: Uint256 }) => Promise<Uint256>;\n isWhiteList: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Boolean>;\n whiteBalanceOf: ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }) => Promise<Uint256>;\n whiteInfo: ({ sender }: { sender: string }) => Promise<WhitelistConfig>;\n grantInfo: ({ grantee }: { grantee: string }) => Promise<GrantConfig>;\n maxWhitelistNum: () => Promise<Uint128>;\n voteOptionMap: () => Promise<ArrayOfString>;\n maxVoteOptions: () => Promise<Uint256>;\n queryTotalFeeGrant: () => Promise<Uint128>;\n queryCircuitType: () => Promise<Uint256>;\n queryCertSystem: () => Promise<Uint256>;\n queryOracleWhitelistConfig: () => Promise<OracleWhitelistConfig>;\n}\nexport class OracleMaciQueryClient implements OracleMaciReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.getRoundInfo = this.getRoundInfo.bind(this);\n this.getVotingTime = this.getVotingTime.bind(this);\n this.getPeriod = this.getPeriod.bind(this);\n this.getNumSignUp = this.getNumSignUp.bind(this);\n this.getMsgChainLength = this.getMsgChainLength.bind(this);\n this.getProcessedMsgCount = this.getProcessedMsgCount.bind(this);\n this.getProcessedUserCount = this.getProcessedUserCount.bind(this);\n this.getResult = this.getResult.bind(this);\n this.getAllResult = this.getAllResult.bind(this);\n this.getStateIdxInc = this.getStateIdxInc.bind(this);\n this.getVoiceCreditBalance = this.getVoiceCreditBalance.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.whiteBalanceOf = this.whiteBalanceOf.bind(this);\n this.whiteInfo = this.whiteInfo.bind(this);\n this.grantInfo = this.grantInfo.bind(this);\n this.maxWhitelistNum = this.maxWhitelistNum.bind(this);\n this.voteOptionMap = this.voteOptionMap.bind(this);\n this.maxVoteOptions = this.maxVoteOptions.bind(this);\n this.queryTotalFeeGrant = this.queryTotalFeeGrant.bind(this);\n this.queryCircuitType = this.queryCircuitType.bind(this);\n this.queryCertSystem = this.queryCertSystem.bind(this);\n this.queryOracleWhitelistConfig =\n this.queryOracleWhitelistConfig.bind(this);\n }\n getRoundInfo = async (): Promise<RoundInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_round_info: {},\n });\n };\n getVotingTime = async (): Promise<VotingTime> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voting_time: {},\n });\n };\n getPeriod = async (): Promise<Period> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_period: {},\n });\n };\n getNumSignUp = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_num_sign_up: {},\n });\n };\n getMsgChainLength = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_msg_chain_length: {},\n });\n };\n getProcessedMsgCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_msg_count: {},\n });\n };\n getProcessedUserCount = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_processed_user_count: {},\n });\n };\n getResult = async ({ index }: { index: Uint256 }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_result: {\n index,\n },\n });\n };\n getAllResult = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_all_result: {},\n });\n };\n getStateIdxInc = async ({ address }: { address: Addr }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_state_idx_inc: {\n address,\n },\n });\n };\n getVoiceCreditBalance = async ({\n index,\n }: {\n index: Uint256;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_voice_credit_balance: {\n index,\n },\n });\n };\n isWhiteList = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_white_list: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteBalanceOf = async ({\n amount,\n certificate,\n sender,\n }: {\n amount: Uint256;\n certificate: string;\n sender: string;\n }): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_balance_of: {\n amount,\n certificate,\n sender,\n },\n });\n };\n whiteInfo = async ({\n sender,\n }: {\n sender: string;\n }): Promise<WhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n white_info: {\n sender,\n },\n });\n };\n grantInfo = async ({\n grantee,\n }: {\n grantee: string;\n }): Promise<GrantConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n grant_info: {\n grantee,\n },\n });\n };\n maxWhitelistNum = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_whitelist_num: {},\n });\n };\n voteOptionMap = async (): Promise<ArrayOfString> => {\n return this.client.queryContractSmart(this.contractAddress, {\n vote_option_map: {},\n });\n };\n maxVoteOptions = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n max_vote_options: {},\n });\n };\n queryTotalFeeGrant = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_total_fee_grant: {},\n });\n };\n queryCircuitType = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_circuit_type: {},\n });\n };\n queryCertSystem = async (): Promise<Uint256> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_cert_system: {},\n });\n };\n queryOracleWhitelistConfig = async (): Promise<OracleWhitelistConfig> => {\n return this.client.queryContractSmart(this.contractAddress, {\n query_oracle_whitelist_config: {},\n });\n };\n}\nexport interface OracleMaciInterface extends OracleMaciReadOnlyInterface {\n contractAddress: string;\n sender: string;\n setParams: (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n signUp: (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n startProcessPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopVotingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n publishMessage: (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processMessage: (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopProcessingPeriod: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n processTally: (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n stopTallyingPeriod: (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grant: (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n revoke: (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n bond: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class OracleMaciClient\n extends OracleMaciQueryClient\n implements OracleMaciInterface\n{\n client: SigningCosmWasmClient;\n sender: string;\n contractAddress: string;\n constructor(\n client: SigningCosmWasmClient,\n sender: string,\n contractAddress: string\n ) {\n super(client, contractAddress);\n this.client = client;\n this.sender = sender;\n this.contractAddress = contractAddress;\n this.setParams = this.setParams.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.startVotingPeriod = this.startVotingPeriod.bind(this);\n this.signUp = this.signUp.bind(this);\n this.startProcessPeriod = this.startProcessPeriod.bind(this);\n this.stopVotingPeriod = this.stopVotingPeriod.bind(this);\n this.publishMessage = this.publishMessage.bind(this);\n this.processMessage = this.processMessage.bind(this);\n this.stopProcessingPeriod = this.stopProcessingPeriod.bind(this);\n this.processTally = this.processTally.bind(this);\n this.stopTallyingPeriod = this.stopTallyingPeriod.bind(this);\n this.grant = this.grant.bind(this);\n this.revoke = this.revoke.bind(this);\n this.bond = this.bond.bind(this);\n this.withdraw = this.withdraw.bind(this);\n }\n setParams = async (\n {\n intStateTreeDepth,\n messageBatchSize,\n stateTreeDepth,\n voteOptionTreeDepth,\n }: {\n intStateTreeDepth: Uint256;\n messageBatchSize: Uint256;\n stateTreeDepth: Uint256;\n voteOptionTreeDepth: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_params: {\n int_state_tree_depth: intStateTreeDepth,\n message_batch_size: messageBatchSize,\n state_tree_depth: stateTreeDepth,\n vote_option_tree_depth: voteOptionTreeDepth,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n roundInfo,\n }: {\n roundInfo: RoundInfo;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_round_info: {\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n voteOptionMap,\n }: {\n voteOptionMap: string[];\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n set_vote_options_map: {\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n signUp = async (\n {\n amount,\n certificate,\n pubkey,\n }: {\n amount: Uint256;\n certificate: string;\n pubkey: PubKey;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n sign_up: {\n amount,\n certificate,\n pubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n startProcessPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n start_process_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n stopVotingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_voting_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n publishMessage = async (\n {\n encPubKey,\n message,\n }: {\n encPubKey: PubKey;\n message: MessageData;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n publish_message: {\n enc_pub_key: encPubKey,\n message,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n processMessage = async (\n {\n groth16Proof,\n newStateCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newStateCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_message: {\n groth16_proof: groth16Proof,\n new_state_commitment: newStateCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopProcessingPeriod = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_processing_period: {},\n },\n fee,\n memo,\n _funds\n );\n };\n processTally = async (\n {\n groth16Proof,\n newTallyCommitment,\n plonkProof,\n }: {\n groth16Proof?: Groth16ProofType;\n newTallyCommitment: Uint256;\n plonkProof?: PlonkProofType;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n process_tally: {\n groth16_proof: groth16Proof,\n new_tally_commitment: newTallyCommitment,\n plonk_proof: plonkProof,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n stopTallyingPeriod = async (\n {\n results,\n salt,\n }: {\n results: Uint256[];\n salt: Uint256;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n stop_tallying_period: {\n results,\n salt,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grant = async (\n {\n baseAmount,\n grantee,\n }: {\n baseAmount: Uint128;\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n grant: {\n base_amount: baseAmount,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n revoke = async (\n {\n grantee,\n }: {\n grantee: Addr;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n revoke: {\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n bond = async (\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n bond: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n }: {\n amount?: Uint128;\n },\n fee: number | StdFee | 'auto' = 'auto',\n memo?: string,\n _funds?: Coin[]\n ): Promise<ExecuteResult> => {\n return await this.client.execute(\n this.sender,\n this.contractAddress,\n {\n withdraw: {\n amount,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\n\nexport enum MaciCircuitType {\n IP1V = '0',\n QV = '1',\n}\n\nexport enum MaciCertSystemType {\n GROTH16 = 'groth16',\n PLONK = 'plonk',\n}\n\nexport enum MaciRoundType {\n MACI = '0',\n AMACI = '1',\n ORACLE_MACI = '2',\n}\n\nexport type CertificateEcosystem = 'cosmoshub' | 'doravota';\n\nexport type ClientParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n};\n\nexport type ContractParams = {\n rpcEndpoint: string;\n registryAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n whitelistBackendPubkey: string;\n feegrantOperator: string;\n};\n\nexport type TransactionType = {\n id: string;\n blockHeight: string;\n txHash: string;\n timestamp: string;\n type: string;\n status: string;\n circuitName: string;\n fee: string;\n gasUsed: string;\n gasWanted: string;\n caller: string;\n contractAddress: string;\n};\n\nexport type RoundType = {\n id: string;\n blockHeight: string;\n txHash: string;\n caller: string;\n admin: string;\n operator: string;\n contractAddress: string;\n circuitName: string;\n timestamp: string;\n votingStart: string;\n votingEnd: string;\n status: string;\n period: string;\n actionType: string;\n roundTitle: string;\n roundDescription: string;\n roundLink: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n voteOptionMap: string;\n results: string;\n allResult: string;\n gasStationEnable: boolean;\n totalGrant: string;\n baseGrant: string;\n totalBond: string;\n circuitType: string;\n circuitPower: string;\n certificationSystem: string;\n codeId: string;\n maciType: string;\n voiceCreditAmount: string;\n preDeactivateRoot: string;\n identity: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type ProofType = {\n nodes: {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n actionType: string;\n commitment: string;\n proof: string;\n }[];\n};\n\nexport type OperatorDelayType = {\n blockHeight: string;\n delayProcessDmsgCount: number;\n delayDuration: string;\n delayReason: string;\n delayType: string;\n id: string;\n nodeId: string;\n operatorAddress: string;\n timestamp: string;\n roundAddress: string;\n};\n\nexport type OperatorType = {\n id: string;\n validatorAddress: string;\n operatorAddress: string;\n coordinatorPubkeyX: string;\n coordinatorPubkeyY: string;\n identity: string;\n logoUrl: string;\n moniker: string;\n activeRoundsCount: number;\n completedRoundsCount: number;\n};\n\nexport type CircuitType = {\n maciType: string;\n circuitType: string;\n displayName: string;\n repoUrl: string;\n zipUrl: string;\n roundCount?: number;\n};\n\nexport type SignUpEventType = {\n id: string;\n blockHeight: string;\n txHash: string;\n contractAddress: string;\n timestamp: string;\n pubKey: string;\n stateIdx: number;\n balance: string;\n};\n\nexport type CircuitsCountGraphqlResponse = {\n data: {\n rounds: {\n totalCount: number;\n };\n };\n};\n\nexport type ErrorResponse = {\n code: number;\n error: {\n message: string;\n type: string;\n };\n};\n\nexport type SuccessResponse<T> = {\n code: 200;\n data: T;\n};\n\nexport type CircuitResponse =\n | SuccessResponse<{\n circuit: CircuitType;\n }>\n | ErrorResponse;\n\nexport type CircuitsResponse =\n | SuccessResponse<{\n circuits: CircuitType[];\n }>\n | ErrorResponse;\n\nexport type BalanceResponse =\n | SuccessResponse<{\n balance: string;\n }>\n | ErrorResponse;\n\nexport type OperatorResponse =\n | SuccessResponse<{\n operator: OperatorType;\n }>\n | ErrorResponse;\n\nexport type MissRateResponse =\n | SuccessResponse<{\n missRate: (MissRateType & {\n date: string;\n })[];\n }>\n | ErrorResponse;\n\n// export type ClaimableResponse =\n// | SuccessResponse<{\n// claimable: ClaimableType;\n// }>\n// | ErrorResponse;\n\nexport type OperatorDelayOperationsResponse =\n | SuccessResponse<{\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsResponse =\n | SuccessResponse<{\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type OperatorsGraphqlResponse = {\n data: {\n operators: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type RoundsCountGraphqlResponse = {\n data: {\n activeRoundsCount: {\n totalCount: number;\n };\n completedRoundsCount: {\n totalCount: number;\n };\n };\n};\n\nexport type VoteCountGraphqlResponse = {\n data: {\n signupsCount: {\n totalCount: number;\n };\n messagesCount: {\n totalCount: number;\n };\n };\n};\n\nexport type OperatorDelayOperationsGraphqlResponse = {\n data: {\n operatorDelayOperations: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: OperatorDelayType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionGraphqlResponse = {\n data: {\n transaction: TransactionType;\n };\n};\n\nexport type TransactionResponse =\n | SuccessResponse<{\n transaction: TransactionType;\n }>\n | ErrorResponse;\n\nexport type TransactionsGraphqlResponse = {\n data: {\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type TransactionsResponse =\n | SuccessResponse<{\n transactions: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: TransactionType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundResponse =\n | SuccessResponse<{\n round: RoundType;\n }>\n | ErrorResponse;\n\nexport type RoundsResponse =\n | SuccessResponse<{\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n }>\n | ErrorResponse;\n\nexport type RoundGraphqlResponse = {\n data: {\n round: RoundType;\n };\n};\n\nexport type RoundsGraphqlResponse = {\n data: {\n rounds: {\n pageInfo: {\n endCursor: string;\n hasNextPage: boolean;\n };\n edges: {\n cursor: string;\n node: RoundType;\n }[];\n totalCount: number;\n };\n };\n};\n\nexport type ProofResponse =\n | SuccessResponse<{\n proofData: ProofType;\n }>\n | ErrorResponse;\n\nexport type ProofGraphqlResponse = {\n data: {\n proofData: ProofType;\n };\n};\n\nexport type SignUpEventsResponse =\n | SuccessResponse<{\n signUpEvents: SignUpEventType[];\n }>\n | ErrorResponse;\n\nexport type SignUpEventsGraphqlResponse = {\n data: {\n signUpEvents: {\n nodes: SignUpEventType[];\n };\n };\n};\n\nexport type MissRateType = {\n delayCount: number;\n deactivateDelay: {\n count: number;\n dmsgCount: number;\n };\n tallyDelay: {\n count: number;\n };\n totalDelayDuration: number;\n avgDelayDuration: number;\n tallyCount: number;\n deactivateCount: number;\n missRate: number;\n};\n","import { GasPrice } from '@cosmjs/stargate';\n\ntype Groth16VkeyType = {\n vk_alpha1: string;\n vk_beta_2: string;\n vk_gamma_2: string;\n vk_delta_2: string;\n vk_ic0: string;\n vk_ic1: string;\n};\n\ntype CircuitInfoType = {\n [key: string]: {\n parameter: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n groth16: {\n process_vkey?: Groth16VkeyType;\n tally_vkey?: Groth16VkeyType;\n process_1p1v_vkey?: Groth16VkeyType;\n tally_1p1v_vkey?: Groth16VkeyType;\n process_qv_vkey?: Groth16VkeyType;\n tally_qv_vkey?: Groth16VkeyType;\n };\n plonk?: {\n process_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n tally_vkey: {\n n: number;\n num_inputs: number;\n selector_commitments: string[];\n next_step_selector_commitments: string[];\n permutation_commitments: string[];\n non_residues: string[];\n g2_elements: string[];\n };\n };\n };\n};\n\nexport const CIRCUIT_INFO: CircuitInfoType = {\n '2-1-1-5': {\n parameter: {\n state_tree_depth: '2',\n int_state_tree_depth: '1',\n vote_option_tree_depth: '1',\n message_batch_size: '5',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2178a9c3805dd82071b2b28bb4c0ffc8178cad913c8c990b98b4863284dc3a5d175c0be554fc060c27c551e5e32effef015b918a0f5a2dc1b92909b8272719301c521d5f6542db5ea4775a42d32159c356a696599c1a3df011ec00559ae1c2b60d860f7e6513a7d20feaeaca401863e35a0f691dd7d30ce06d07946840de1ec8',\n vk_ic0:\n '19126a54a9b6d0d415f892c246485cb2889487cf9c4a8cd88dab5e1140e1d0630d1d76ef4652df8887c9dc557aa57f25e221db7e5b2e4cf618a362bece107f5c',\n vk_ic1:\n '0632e625fefc7172e8aec1070c4d32b90b6c482f6f3806773a4c55a03877c2d716cfd935eb3e3883f580c93f56adbf3a253ce3c208c52fb784f9d8fec139c617',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2e9fad39728c543c5213599111e1a44b01720c999a6785e8136c3e3b3bf8e07e248e1933d477969ca6e27cb7a74bca18cac7e3bbdf9371be5c54fe151f6376a30955609ec69b89329322a2f435b706ca248d1312c7513853a50ef37ed0f7826c25a5c57bf07789d89e538bc24017cf2722811f21480b0bb8030ed0028ecb7cd8',\n vk_ic0:\n '1bc1a1a3444256469c07cd6f4d1cfd9f7c9ddce596a306e0af077ca9e9c0fe9602db2a9aecef76a9dc4c19bf88c0099b04fc75410cc9004f0966440825e3790a',\n vk_ic1:\n '05b8b475f2bfedba4fa04ab1972006da9764c2c3e6fb65d6dd0aac938fd298112a560e13770b06a3f709a49fddf016331ea205fa125026993f6666eff69f4def',\n },\n },\n plonk: {\n process_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '29b0f4a90bea69583a8fca1e74d23adf739d605af605a0e0971fac548df976fb2e10a42dfca2325684c1bca5fabbf9d7022fc8b997ea478f1052dd8808d99e44',\n '119002055b6c2f98314ef408e4a917a6678f114ca991185749289f171f61efc32b3a931c700271b82d22c2073af9b7fffcb7bfa644ea09102d9ef8482410a991',\n '10c5f32870d26f8e26d2eaae2705557b18210b2355677172e1bef5fe684120891f8317185390ddbb22ecb922d37e03c3cc524c84f65c8045f2324b0f164cfbdb',\n '115a5f9af5d438d3261cfa31b7050b931b7d22647f628a43af41a41dcd44cb8d2e99368eb15cdc6d1f16faf9db0db4825613d6893c776aef456705bdc76eb728',\n '1a61cc5f0fbe92fbc8c9bd58928ce467f63e4771e4d517966afbaf220ea069a91cec3231c370be07fee8d9ec01660d054c549b034715855ffa652ad5b67ced86',\n '19e0d095a343115f6e7ad7ae1f51e375cd648fb35451cb2d5a8cf3bafbb25d0525efdc2cc5b5600ee0ae954dca3bf67c8277d470161fe23b4be7a5bcdf641e68',\n ],\n next_step_selector_commitments: [\n '246ce82e01ed312e81492f132da2ee16bc13cc0024fbcc668de30173ad59067f0f072a892451cc495f5d9b8b99c8dc29be1d42d3004aed45fd5b2cd32a420016',\n ],\n permutation_commitments: [\n '19c4143f41738480adc5ae49922d31b8a5afaa1d25ced5c20b869c0e1ccad91920c267c53d33907318cd194ba2ea08a85f250779765ba4121f7a0edfe1afe22b',\n '114bda14aa702a0815e3f91318a08a2798244420fd6675c8fc3cc2b0232298890d2eb3c1f27a83f4a3be777524d6cc65aa435e0a472fae8d1158e0a6ded685d0',\n '289f0b046968d2c095d05350e43996756fc85d2deb0e267a069615f0889a249413bdbe6f09edb4db956b8f3fc4488c4681cd52469dc0d419dab99a65b88309f7',\n '16dd74a2089960aac0d68309d5e81c6b45c29fafe4d42c922c06eb633ed48d551d347d1f43ee9b137772eefc43a6dcdf5ac35ee1615bc8f7c243bce071c410a9',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 524287,\n num_inputs: 1,\n selector_commitments: [\n '18c2bb75c8ed53a5d15a56cc91c56f14c832419994ce7187c7c98b5e622cac0808b773f05e09822d8d267646198a78359ea2aa6fbaeb01317142f99fd11da6c0',\n '181499098243a5968f5490b7759aa15f0f769f24f3f4219b69f96913cf4fb23c1cd7b3f109196d7577390fd2e6d3930a71b0559aff756f3ca43eef66ce7333f4',\n '07ba2bdd452503fb16b56ea2940e95a98118c9dd120ae192680fe2b80bdb26f10ac6cdc7cb12b581a8c64d45b5af3d253c4282405eed3fd4d091ae05aac45cb6',\n '1caf01f1775eeafa78a11202e926ee92be997ce040f9c6fbce161348a40aeda70d9f15738cccf538083784e566ceef651d000223ae810c980e2d5d98b91b4665',\n '2c377c69cae1d591af413da2fd986ef3dca595d0c5817ee4932b92169d37c52d1218ce63dde705ebd1dc66d9b62daca287e4fdf6800b69204e5b78bfe84365a1',\n '175dd4ff280e39f0e080c181f853845e40c4b91709a93e4398d24befc9cf556903675361817e031e86bd896ff1dd7bc1cc31ca920a101499db0c58d77f0730ec',\n ],\n next_step_selector_commitments: [\n '12d76999d26137d433f7119ab34f3fc63cfedb9172052cfb34acfc3cdc570f511aba802ebe92b87f913496314b938cf526078280a68826c90b686b90420c7742',\n ],\n permutation_commitments: [\n '167b05c0132399e7126e8d16efb224b1c6729942048fc7e730fd1451116e0a6e05acaf2a6d2c88cc25610474b651c8cdcb7e8e14e59ddfad819123e888c4b1b6',\n '25aed62de4b701dc645e076543e2553c306010f2776c74edae55ea5253d9540403d042c4cb699cc04b2bb63d3c3edc0c85b049a84dc2fd44369f957d81363563',\n '0e77fb0b0e84da1d955da3d66dbb8fa3988f22e999a34bc4ac537a0f9187ac40156f8d7cb6d005fd85a0178d794f941b4e84832fd389a37c2a78112dac09b758',\n '051d3d906d457eaa9eff77a296dfa1760fd9ea379eec60487be38de91545ca2c1fcf457d6ac31afee10951245b0cc1e2c7674596f65955d189d48b6938fb3594',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '4-2-2-25': {\n parameter: {\n state_tree_depth: '4',\n int_state_tree_depth: '2',\n vote_option_tree_depth: '2',\n message_batch_size: '25',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '0d0fe390b9dd4d1d0f486787b6ea96765cbeaa8f00310fecc3429673c5866c081a27998596ba296f66f3f7b5e2450d1ce1bcc535c133b2e8b577ba07dc1ccb4c1895f7afb9b3168a6d628c9173157cd56ca51948cc66c129a25f80e3b665e4b12c9c50f0cc0d070978ed2fb8ce15956d67c5dc6c07c7f45f1facfb5522d7b656',\n vk_ic0:\n '0ff2b22774da5c0ba94db4d759827b8c962aaf44db2649eb10407de02a40463a26497581d6d0979ad7f9057f26e048109158b0872700e2ad8447ffc9b4bf146b',\n vk_ic1:\n '0a47be101a59d20641e1369c0b2b9fb839cd35ecbfbeac3866df43723b70c78d17e96303c417743d93b7726805b736f364d305036b50e4ad1b885fc41284daf5',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '08e44e0876bd574d8a3411e374884eb61da7292ca52903fa96553c37311b66ce0f2f529e59b1d37e55794a575d0f87548ca0d03331c19689bc203a68c1c4bae20e9fd25a7bffaa9b7409e694a48bc0d57f42df164d4a01bd5deecffedd2d3a3125eff290efb93eaf9c578cc7ee9d00406137607b9602de02424ff413ac948690',\n vk_ic0:\n '295c8e84b4b6b8de44b24f80eb5cae1df65e4877c4af8da2dbadfbfc3586dc790661b9e636f2c2a83028d11cbb7c753675481b65a5dfe32fff7a558231b3c9ef',\n vk_ic1:\n '299cfb28054cde0470bd7ff280349089350226d1ca154dcf6544b2680bf3bea925026e6644668273d6066ef6766c2f561c3607c523fbbd1379c5002376ef69c3',\n },\n },\n plonk: {\n process_vkey: {\n n: 2097151,\n num_inputs: 1,\n selector_commitments: [\n '126cbf10e0b68a56d45614be16c5bb48bd1374478e17b9fe1a78b726ea70f9b21f3cd20fd178d89e5923c422ef050ccc7134fbd76c9efdbb90f677ee41e01edb',\n '12813166f206c95eddd998a40d8d2e54e29dd393f543e3583a7999b18d674832024cdd935540bd3b96207ec0609c6718ad8b14e2ef315594454c57d606494485',\n '05da9eea3ee7151355067ced11a8e8ff57a56c758493afc9cbb6cfbacfc42e7b08993dfa25c85f20aeb7f64e87fe56ac8066cf6b8479dc96294e302ef5d55372',\n '2e446e540bacde7daea23c93a67bc6b1424b7c16b33fd2cee251b0d093cd78300030b8e340f01f320639d60b77724e58fc8a2d778b7b2a5df2c953ce34debeea',\n '1cf8c75b18071ede19d196b46a8776efc29ac514458a698d9f2e50b7bc692f6e06f7ff96897240eca31058fe330e8cbcd911324b79a3a34d03340a3cfed85fd5',\n '17101fb5c293438a695075b221219679e278e4bd147239c9fc69081b19cacefe218eb895f1456ca81e29731967588aee4b0758ea51aa28e5fefc81fed4a11513',\n ],\n next_step_selector_commitments: [\n '0cebff4fe8cd70325f986088a1e17ae129a025481137bd80aef9c1f1c2e52f1e265a4ccae1ed89cb2fba527165f007898e70f988311ee4e4e87e41376cfeed03',\n ],\n permutation_commitments: [\n '025b5db167721133693f0b6d9d7cfadce68ad15365ef1605dda4a6c809edeea61927b27ca11713fc683c88f6330e9621837b05e5db74d5994d1cf04bc3d529b3',\n '1fac93999f33b145613901846e6403d7f4237d582b51ccc4fb5c70038284c6e21cc804cc3cf7170b96da74fcbb30c81cd8c3405a629327c657025db7332f169a',\n '0b6d7d383de73dbfc16f2c0f3af763135ff05a12ec937548008cfee944c195f902336a68a50f62f595953e44401e872fb41abb66a733684b079ffe550d09c233',\n '225a1f5e92d105d3be026ae68904826f89b786faad75a846ef966ed714568bba28d1388786fde71dea206cdef16faa7a589e90863e6245d271e3f154c75c5531',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 1048575,\n num_inputs: 1,\n selector_commitments: [\n '1588fb667b3f0e4d0970b8208e4b6b4c729c4926b936f8d877017cf42d07ca15069643791d98abcd6b7d0b0546e7560ab9011e069f2ee48ede581fc72d8b5e04',\n '09c5480b103c44a81850ffd9a61ec21f7db41bc89996d8df075c3e029290eb5b083cb2b184d95c0761e585547be33250c8939929b87fdc39775ccea17d51b481',\n '278e239bcac0a945a17572a6d61ba59f705746e6893a10a44841933a8c8310e712e4ee913af9b77c8fdcdc365316aa9f1b8dc081eb99ad80265768ec9f484beb',\n '12532585ea307c5559b18a4d01db59b544a88088f61a5b5ed0431393e6f675af1309bf0dcaa7a552849e5f28d0300c8c61b18393fb638aed3b7d70e27bb91c35',\n '172e7ecb8e485aaee801fd78b8fd7c0b862baef65e39e6832cffa2170b6f981928d86ab5887e8c3210e34e03cada468bd501f60ec3a8fa35b4c7067d6fb8c6ae',\n '0c27211d046735fc681228b8366be2c8cf9a256cbd03dcd4af65152e94f95a6f1af151a5311b195b0f4acffeec4952cc52edbb7045aab61bbd3be9cd322ab99e',\n ],\n next_step_selector_commitments: [\n '25ee15301d562e6c630946b3fbe36b9fbd8dfbd44ddf70cc825fb1fa1ebd966229081f6b9297da671c69064e10b8f5dd0f69b69d1bf79122c6197f119087ebe1',\n ],\n permutation_commitments: [\n '194849a6ec5cb37e09d20801d387abbab04e453f630c5fbbf5c4819c5569480c0c8bf0ce2b4955cc4c891840da1d9e99feb81e8d43251dffbe4d6167639b9f9b',\n '17717d2638632d406b3c8aa69550c8aeed1b79def3ab55e9d0c4bdf21cc339ad07d3bd3a331145fc96f34c85469a34a8c93b53b7aa36bb5a94c31e3b4d47713e',\n '277b0c99b63c79bb9ed2f677c3987cf00acb293933dfced82b5afcb8bf0c34570d3187ce5c7e892582ddda4322cf7c50d41105fe98503fb60e41f4a08da5916d',\n '0489f6dec0f27a8c21d147ebb9781b68b4b73db065a6017924c543f6d9fadbe922d24c0946bd8b19df7659810296d063b557cdf7aba510b11e08fbf2e9d37931',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '6-3-3-125': {\n parameter: {\n state_tree_depth: '6',\n int_state_tree_depth: '3',\n vote_option_tree_depth: '3',\n message_batch_size: '125',\n },\n groth16: {\n process_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '057f25675851ef5a79a6d8706a43a6cd8e494cfb12c241ede46991d9174cf30605b081ff44f3ede774dab68ea9324c12308c13cb09cbb129adf94401b9134f5b16137d952fd32ab2d4243ebff4cb15d17206948ef17909ea8606886a8109bdad082f7d27e1cbf98925f055b39d1c89f9bcc4f6d92fdb920934ff5e37ba4d9b49',\n vk_ic0:\n '27c937c032a18a320566e934448a0ffceea7050492a509c45a3bcb7e8ff8905d20789ada31729a833a4f595ff9f49f88adb66f2ab987de15a15deccb0e785bf4',\n vk_ic1:\n '0ed2cefc103a2234dbc6bbd8634812d65332218b7589f4079b2c08eb5a4f5f63113a7f3cb53797a7f5819d7de7e3f0b2197d1c34790685a4a59af4314810420b',\n },\n tally_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '2065e91c00fcc5cbc3d974cf52e24de972bdb1b4d8ded629dec20b5c904c3fa327ffe02402094795ff4d02588c8268fcad738f69eb4c732a0c98b485035e1f4913ede11b074ff143a929673e581a547717c58ce01af87d9d8b28f65f506093a61013e367b93e6782129362065840a0af9b77d7d9659a84577176e64a918d8d4c',\n vk_ic0:\n '11db4a022aab89a265f06ff62aa18c74b21e913a8b23e7fce9cb46f76d1c4d9f2a7475b1eeb7be0a0dc457e6d52536ba351b621b63a7d77da75d4e773048537e',\n vk_ic1:\n '0f298d235d0822ad281386abdf511853529af4c864b0cd54140facebfc1356a3059cd6d0d4b27b39e5683548fe12025e2a6b2e2724c2ca87d2008ef932ed3801',\n },\n },\n plonk: {\n process_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '216533ab27390f98812429524326ac08736d636d2891fb81446796cc1771a3230642f49db115acc15a186a1013f91a08efcd05640eb137d700276e80fd05bc90',\n '11747f6f378e26dbdacff464ce7eb6a8869750d0fa7e508e263ac77b582c1e9b24ba3d208650b0c28943915c563cc94cc3f98cdb5fd8adc4f4d3e2a60eda3302',\n '09239eb768d8d47b91c7e08e2ec6a374571964ed16be293cdc35e112393c4fd1182a0794be7f1441418664e9f718b67ed392a7da3e2868375bcf629131bb2680',\n '2020f7db24940bbf38d097ea5d7ef7253e38b154d7eb0ff1782ea18ce215dd7b0e8475197b071b118adc6418b7b7fb42fea19b6272d1bb460cc47deacb299ec7',\n '298923db1618185064bbab5df30ee03a3c9cbc7ce8f096d76cbd2a5ab3df86cd05bbedb938e6e0ff35cce23609458aff8081cdf3163655672074d1b18b0007bd',\n '0effaabe8c6e8a076aedd36d10f2926f9871f552d93e22bfbe69e3c828a546fa2d0cd163b49a6de219ac2c048a8459ae448047748ba078b9d5d07b290c946b08',\n ],\n next_step_selector_commitments: [\n '13e3d7299e30e6142699469d620df721eca35bbb807a8f4298f165260fdc24f823e7bd9bcb6506a094a5ebef44434c62e4bcb5d3dd7e092c49d5cb80b8ae0757',\n ],\n permutation_commitments: [\n '03d94ab8fdc681523a8eec10f1ce5552937c268d1d970f9e75ee8657cd4c12a81e03476f83ef5c14db2f4d931b833a3b65b8d5689b37cc7f183914c90d3d065d',\n '1b9c6ef20e68355c535bda6ff04a8a61d7552a594bb8e88d69a6f8840ddab04d2884824cc356d0d90cc278c247fc531de62efca4b19ed1be6f071144474d2037',\n '1ff82de8312481e1591d2d1c2698fa3944b3f0afa0dd702be8a1a944a5a8997323ffbd0ab39a2e13608a8e76803c33ffda7317bb7101e335ce5552ed62dcd09d',\n '2cb2bbdd51d22b79957b0401ecb6fe089f05426ba092b1205fa92f39b36cc5fc0c36c3934e47b7d407d4cda0c78c2b3fb23162cb0d295e8a8cce1a274956c34a',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n tally_vkey: {\n n: 8388607,\n num_inputs: 1,\n selector_commitments: [\n '258d101f9499e81c0d0da8986c659ef33da19d4955a142e56b4854d1327c902c1996baecd81432717a9cbf92ccf651e4217a788c1a2ed855f749480f8ce8203c',\n '1892a17c9c01389e3149b0663069a1ad4fd3c8e2db5ce99795b781c47b55acf9001cf5f0b4c1d088fa2058ca19cd2f1e9559ebe059897bb0aadcb540ce5f468a',\n '09912d6eaa4a22802451135d9a221ebf97c2ce8ad5bbb2942d5a860482e8e4202573995072c4b014cd0e9d09a1fd53ee7d602070b404288a7fd0d97b57d8f07d',\n '0c62ef7ad01b05b2c01fca6188de269d63d725348a07a99bbc50f24c1518aa871fdc61bbf42399433a0917c919dcfe9e851b206e1c37dec0908f69ad89bb1f8e',\n '07d181c1026ef4a6732bff3dffbc5ae0e3746e4860f478c6c2e8e258df2ed7671efe073fb31cf5a61c0eedceccb5e968220b9ff7e2b055b11d7c456a57fe7ac9',\n '1bbd7ad96893df675c811e5a2be184e2e3bc9af0ce30a7b26e53a916a10a777a01ffa70dbe585201ac09778429c04c71229392608095d220c7d82631a0caedd6',\n ],\n next_step_selector_commitments: [\n '2ae6c5c98d4c384e8e645d85a4ca362de4c4e75efe3c79d5bcbd126a9e305b831618df99300c7327f1eac6a498c8feac6013d4ba09b7ea046340f99b0598a832',\n ],\n permutation_commitments: [\n '2458c5fb474ab3e7ae9c6b82cc432a111954d8be5e7e9b4fc58c14e1aed77f3207426dbe08272aa69ba8b73809f27f9ff083641b5c3c896c386a74bbed3083dd',\n '0879ac4885674b1af0ab67c7b505bce6234f32a0335bdfd229023fea5f303ece0973ba8abc9ade8edcfb68c7d4b8b98272c7bf33eff841fec78d21c0c2e82aa6',\n '07b74f37fcbcb2d9962a529fbc254d54925aeb1be1a49517affeb3571ef3e31e3033f7900ff5bb5759cbb98b64ca7f42967278c328d00e60c042aa65f2178ded',\n '203c948fdc386e7bfbdc37363ab489e9ce3264f4ccd23c33dd8f2337fb9007a621cabf740aa26e522dcb7af6c0de9f93cbc69595b29b02e75c2f3507e97664ec',\n ],\n non_residues: [\n '0000000000000000000000000000000000000000000000000000000000000005',\n '0000000000000000000000000000000000000000000000000000000000000007',\n '000000000000000000000000000000000000000000000000000000000000000a',\n ],\n g2_elements: [\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n '260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c10118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b004fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe422febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55',\n ],\n },\n },\n },\n '9-4-3-625': {\n parameter: {\n state_tree_depth: '9',\n int_state_tree_depth: '4',\n message_batch_size: '625',\n vote_option_tree_depth: '3',\n },\n groth16: {\n process_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1195be678487bbc8c0ae726c0985a5caf6f75e3f8327926926c4f89e498ad733043e46e10b506d194b27275f402bc3fb208a2f5be69662e7c9898d1c0ece4f04',\n vk_ic1:\n '10c34362189a7ee44b1c5e57755d7e0d672dba552e614d5cd9a53081bee2333425879fa4e4a9e3fff287824cce35f94725ca0edb60a4ffcbf50becb2fd96cb0b',\n },\n tally_1p1v_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n process_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '1832600210a459fe61d971081d4baa1a1add23f87c8a8dc4042cd5cf6c6fdf8e3018489aec30d9deb26629e05965a3a7e038be58ce10c854cb7e1071f2708aad',\n vk_ic1:\n '0274a24117a799333754d646e35f37292e7ca9984fb8781211504b158d69d2c422aa99651ca207c77084988b16ef363664b9cf36071f7131dcc10b98ea27d7f6',\n },\n tally_qv_vkey: {\n vk_alpha1:\n '2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e214bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d1926',\n vk_beta_2:\n '0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a71739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8',\n vk_gamma_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_delta_2:\n '198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa',\n vk_ic0:\n '2ec191d51bd4ac7cd65cb3dd2decfa4e56c4f167bbc40e2c9e1ca728f9bc5b0e2ed1c82319dc554aea5ff2ca05d6f4d4d61e8f059a8c05d4b4faabae5128a437',\n vk_ic1:\n '2f19db8f03b6b5896abc6989273371b14833356f45c12685e57bc292eccc53570cb629e551df179f73b9f3391946bad29739af8b808c80b0f057af45aea59849',\n },\n },\n },\n};\n\nexport const MACI_TYPE = {\n 'maci-1p1v': '0',\n 'maci-qv': '1',\n};\n\nexport const AMACI_TYPE = {\n 'amaci-1p1v': '0',\n 'amaci-qv': '1',\n};\n\nexport const PROOF_SYSTEM = {\n groth16: '0',\n plonk: '1',\n};\n\nexport const QTR_LIB = {\n zeros: [\n '0',\n '14655542659562014735865511769057053982292279840403315552050801315682099828156',\n '19261153649140605024552417994922546473530072875902678653210025980873274131905',\n '21526503558325068664033192388586640128492121680588893182274749683522508994597',\n '20017764101928005973906869479218555869286328459998999367935018992260318153770',\n '16998355316577652097112514691750893516081130026395813155204269482715045879598',\n '2612442706402737973181840577010736087708621987282725873936541279764292204086',\n '17716535433480122581515618850811568065658392066947958324371350481921422579201',\n '17437916409890180001398333108882255895598851862997171508841759030332444017770',\n ],\n};\n","import {\n MaciCertSystemType,\n MaciCircuitType,\n MaciRoundType,\n} from '../../types';\nimport { CIRCUIT_INFO } from './vars';\n\ntype MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport function getCircuitType(circuitType: MaciCircuitType) {\n let maciVoteType = null;\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n return maciVoteType;\n}\n\nexport function getContractParams(\n type: MaciRoundType,\n circuitType: MaciCircuitType,\n proofSystem: MaciCertSystemType,\n maxVoter: number,\n maxOption: number\n) {\n let parameters: {\n state_tree_depth: string;\n int_state_tree_depth: string;\n vote_option_tree_depth: string;\n message_batch_size: string;\n };\n let groth16ProcessVkey = null;\n let groth16TallyVkey = null;\n let plonkProcessVkey = null;\n let plonkTallyVkey = null;\n let maciVoteType = null;\n let maciCertSystem = null;\n\n switch (circuitType) {\n case MaciCircuitType.IP1V:\n maciVoteType = '0';\n break;\n case MaciCircuitType.QV:\n maciVoteType = '1';\n break;\n default:\n throw new Error(\n `Invalid circuit type ${circuitType}, only support 1P1V and QV`\n );\n }\n\n switch (proofSystem) {\n case MaciCertSystemType.GROTH16:\n maciCertSystem = '0';\n break;\n case MaciCertSystemType.PLONK:\n maciCertSystem = '1';\n break;\n default:\n throw new Error(\n `Invalid proof system ${proofSystem}, only support GROTH16 and PLONK`\n );\n }\n\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n parameters = CIRCUIT_INFO['2-1-1-5'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['2-1-1-5']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['2-1-1-5']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n parameters = CIRCUIT_INFO['4-2-2-25'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['4-2-2-25']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['4-2-2-25']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 15625 && maxOption <= 125) {\n // state_tree_depth: 6\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['6-3-3-125'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n groth16ProcessVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].process_vkey;\n groth16TallyVkey = CIRCUIT_INFO['6-3-3-125']['groth16'].tally_vkey;\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n plonkProcessVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.process_vkey;\n plonkTallyVkey = CIRCUIT_INFO['6-3-3-125']['plonk']?.tally_vkey;\n }\n } else if (maxVoter <= 1953125 && maxOption <= 125) {\n // state_tree_depth: 9\n // vote_option_tree_depth: 3\n parameters = CIRCUIT_INFO['9-4-3-625'].parameter;\n if (proofSystem === MaciCertSystemType.GROTH16) {\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n } else if (proofSystem === MaciCertSystemType.PLONK) {\n throw new Error('PLONK is not supported for MACI-9');\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n switch (type) {\n case MaciRoundType.MACI:\n return {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n };\n case MaciRoundType.AMACI:\n return {\n // parameters,\n // groth16ProcessVkey,\n // groth16TallyVkey,\n // plonkProcessVkey,\n // plonkTallyVkey,\n };\n case MaciRoundType.ORACLE_MACI:\n if (circuitType === MaciCircuitType.IP1V) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_1p1v_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_1p1v_vkey;\n } else if (circuitType === MaciCircuitType.QV) {\n groth16ProcessVkey =\n CIRCUIT_INFO['9-4-3-625']['groth16'].process_qv_vkey;\n groth16TallyVkey = CIRCUIT_INFO['9-4-3-625']['groth16'].tally_qv_vkey;\n }\n return {\n parameters: CIRCUIT_INFO['9-4-3-625'].parameter,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey: null,\n plonkTallyVkey: null,\n maciVoteType,\n maciCertSystem: '0',\n };\n }\n}\n\nexport function getAMaciRoundCircuitFee(maxVoter: number, maxOption: number) {\n let requiredFee = {\n denom: 'peaka',\n amount: '0',\n };\n if (maxVoter <= 25 && maxOption <= 5) {\n // state_tree_depth: 2\n // vote_option_tree_depth: 1\n requiredFee.amount = '50000000000000000000';\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n requiredFee.amount = '100000000000000000000';\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n\n return requiredFee;\n}\n","import { Secp256k1HdWallet } from '@cosmjs/launchpad';\nimport { DirectSecp256k1HdWallet, OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n GasPrice,\n SigningStargateClient,\n SigningStargateClientOptions,\n} from '@cosmjs/stargate';\nimport {\n SigningCosmWasmClient,\n SigningCosmWasmClientOptions,\n} from '@cosmjs/cosmwasm-stargate';\nimport { MaciClient } from './ts/Maci.client';\nimport { AMaciClient } from './ts/AMaci.client';\nimport { RegistryClient } from './ts/Registry.client';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n} from './config';\nimport { Whitelist } from './ts/Registry.types';\nimport { getDefaultParams } from '../const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n} from './types';\nimport {\n getAMaciRoundCircuitFee,\n getCircuitType,\n getContractParams,\n} from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { decompressPublicKey } from '../../utils';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public rpcEndpoint: string;\n public registryAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n rpcEndpoint,\n registryAddress,\n maciCodeId,\n oracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.feegrantOperator = feegrantOperator;\n this.whitelistBackendPubkey = whitelistBackendPubkey;\n }\n\n async createAMaciRound({\n signer,\n startVoting,\n endVoting,\n operator,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n voiceCreditAmount,\n circuitType,\n preDeactivateRoot,\n }: CreateAMaciRoundParams) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n const requiredFee = getAMaciRoundCircuitFee(maxVoter, maxOption);\n\n preDeactivateRoot = preDeactivateRoot || '0';\n const res = await client.createRound(\n {\n operator,\n preDeactivateRoot,\n voiceCreditAmount,\n whitelist,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n votingTime: {\n start_time,\n end_time,\n },\n maxVoter: maxVoter.toString(),\n maxOption: maxOption.toString(),\n certificationSystem: '0',\n circuitType,\n },\n 'auto',\n undefined,\n [requiredFee]\n );\n let contractAddress = '';\n res.events.map((event) => {\n if (event.type === 'wasm') {\n let actionEvent = event.attributes.find(\n (attr) => attr.key === 'action'\n )!;\n if (actionEvent.value === 'created_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return contractAddress;\n }\n\n async createMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n whitelist,\n title,\n description,\n link,\n maxVoter,\n maxOption,\n circuitType,\n certSystemType,\n }: CreateMaciRoundParams) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const { x: operatorPubkeyX, y: operatorPubkeyY } =\n decompressPublicKey(operatorPubkey);\n const {\n parameters,\n groth16ProcessVkey,\n groth16TallyVkey,\n plonkProcessVkey,\n plonkTallyVkey,\n maciVoteType,\n maciCertSystem,\n } = getContractParams(\n MaciRoundType.MACI,\n circuitType,\n certSystemType,\n maxVoter,\n maxOption\n );\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description, link },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX,\n y: operatorPubkeyY,\n },\n groth16_process_vkey: groth16ProcessVkey,\n groth16_tally_vkey: groth16TallyVkey,\n plonk_process_vkey: plonkProcessVkey,\n plonk_tally_vkey: plonkTallyVkey,\n max_vote_options: maxOption,\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n 'auto'\n );\n\n return instantiateResponse;\n }\n\n async createOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n }: CreateOracleMaciRoundParams) {\n const start_time = (startVoting.getTime() * 1_000_000).toString();\n const end_time = (endVoting.getTime() * 1_000_000).toString();\n const [{ address }] = await signer.getAccounts();\n const client = await createContractClientByWallet(this.rpcEndpoint, signer);\n const { x: operatorPubkeyX, y: operatorPubkeyY } =\n decompressPublicKey(operatorPubkey);\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n 0,\n 0\n );\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX,\n y: operatorPubkeyY,\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: this.whitelistBackendPubkey,\n whitelist_ecosystem: whitelistEcosystem,\n whitelist_snapshot_height: whitelistSnapshotHeight,\n whitelist_voting_power_args: whitelistVotingPowerArgs,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n feegrant_operator: this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n 'auto'\n );\n\n return instantiateResponse;\n }\n\n async queryRoundInfo({\n signer,\n roundAddress,\n }: {\n signer: OfflineSigner;\n roundAddress: string;\n }) {\n const client = await createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: roundAddress,\n });\n const roundInfo = await client.getRoundInfo();\n return roundInfo;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n const client = await createOracleMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n return client;\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createAMaciClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress,\n });\n }\n\n async contractClient({ signer }: { signer: OfflineSigner }) {\n return createContractClientByWallet(this.rpcEndpoint, signer);\n }\n}\n","import { Http } from '../http';\nimport {\n OracleCertificateParams,\n SignatureRequest,\n SignatureResponse,\n FeegrantAllowanceResponse,\n} from './types';\n\nexport class OracleCertificate {\n private certificateApiEndpoint: string;\n private http: Http;\n\n constructor({ certificateApiEndpoint, http }: OracleCertificateParams) {\n this.certificateApiEndpoint = certificateApiEndpoint;\n this.http = http;\n }\n\n async sign(data: SignatureRequest): Promise<SignatureResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/${data.ecosystem}/sign`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n address: data.address,\n height: data.height,\n contractAddress: data.contractAddress,\n }),\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n\n async feegrantAllowance(\n granter: string,\n grantee: string\n ): Promise<FeegrantAllowanceResponse> {\n const response = await this.http.fetchRest(\n `/cosmos/feegrant/v1beta1/allowance/${granter}/${grantee}`\n );\n\n return {\n granter,\n grantee,\n spend_limit: response.allowance.allowance.allowance.spend_limit,\n };\n }\n}\n","import {\n OfflineSigner,\n OfflineDirectSigner,\n isOfflineDirectSigner,\n} from '@cosmjs/proto-signing';\nimport { StdSignDoc } from '@cosmjs/amino';\nimport { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';\nimport { getDefaultParams } from '../const';\nimport { PublicKey, genKeypair, stringizing } from './circomlib';\nimport { SignResult, CircomParams } from './types';\nexport * from './circomlib';\n\nexport class Circom {\n private network: string;\n private chainId: string;\n\n constructor({ network }: CircomParams) {\n this.network = network;\n this.chainId = getDefaultParams(network).chainId;\n }\n\n async signMessage(\n signer: OfflineSigner,\n address: string,\n message: string\n ): Promise<SignResult> {\n if (typeof window !== 'undefined' && (window as any).keplr) {\n const sig = await (window as any).keplr.signArbitrary(\n this.chainId,\n address,\n message\n );\n\n return {\n signature: sig.signature,\n pubkey: sig.pub_key.value,\n };\n }\n\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n\n if (!account) {\n throw new Error(`Address ${address} not found in wallet`);\n }\n\n if (isOfflineDirectSigner(signer)) {\n // Direct\n const signDoc: SignDoc = {\n bodyBytes: new TextEncoder().encode(message),\n authInfoBytes: new Uint8Array(),\n chainId: this.chainId,\n accountNumber: BigInt(0),\n };\n\n const { signature } = await signer.signDirect(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n } else {\n // Amino\n const signDoc: StdSignDoc = {\n chain_id: this.chainId,\n account_number: '0',\n sequence: '0',\n fee: {\n gas: '0',\n amount: [],\n },\n msgs: [],\n memo: message,\n };\n\n const { signature } = await signer.signAmino(address, signDoc);\n\n return {\n signature: signature.signature,\n pubkey: account.pubkey,\n };\n }\n }\n\n async genKeypairFromSign(signer: OfflineSigner, address: string) {\n const sig = await this.signMessage(\n signer,\n address,\n 'Generate_MACI_Private_Key'\n );\n\n const sign = BigInt(\n '0x' + Buffer.from(sig.signature, 'base64').toString('hex')\n );\n\n return genKeypair(sign);\n }\n}\n","import { randomBytes } from 'crypto';\nimport {\n babyJub,\n eddsa,\n poseidon,\n poseidonEncrypt,\n Tree,\n} from '@dorafactory/circomlib';\nimport { Scalar, utils } from 'ffjavascript';\nimport createBlakeHash from 'blake-hash';\nimport { solidityPackedSha256 } from 'ethers';\n\ntype MixedData<T> = T | Array<MixedData<T>> | { [key: string]: MixedData<T> };\n\nexport type PrivateKey = bigint;\nexport type PublicKey = [bigint, bigint];\n\nexport interface Account {\n privKey: PrivateKey;\n pubKey: PublicKey;\n formatedPrivKey: PrivateKey;\n}\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\nconst bigInt2Buffer = (i: bigint) => {\n let hex = i.toString(16);\n if (hex.length % 2 === 1) {\n hex = '0' + hex;\n }\n return Buffer.from(hex, 'hex');\n};\n\nconst genRandomKey = () => {\n // Prevent modulo bias\n // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n const min =\n 6350874878119819312338956282401532410528162663560392320966563075034087161851n;\n\n let rand;\n while (true) {\n rand = BigInt('0x' + randomBytes(32).toString('hex'));\n\n if (rand >= min) {\n break;\n }\n }\n\n const privKey = rand % SNARK_FIELD_SIZE;\n return privKey;\n};\n\nconst genPubKey = (privKey: bigint) => {\n return eddsa.prv2pub(bigInt2Buffer(privKey));\n};\n\nexport const stringizing = (\n o: MixedData<bigint>,\n path: MixedData<bigint>[] = []\n): MixedData<string> => {\n if (path.includes(o)) {\n throw new Error('loop nesting!');\n }\n const newPath = [...path, o];\n\n if (Array.isArray(o)) {\n return o.map((item) => stringizing(item, newPath));\n } else if (typeof o === 'object') {\n const output: { [key: string]: MixedData<string> } = {};\n for (const key in o) {\n output[key] = stringizing(o[key], newPath);\n }\n return output;\n } else {\n return o.toString();\n }\n};\n\nexport const genKeypair = (pkey?: PrivateKey): Account => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genRandomKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n return { privKey, pubKey, formatedPrivKey };\n};\n\nconst formatPrivKeyForBabyJub = (privKey: PrivateKey) => {\n const sBuff = eddsa.pruneBuffer(\n createBlakeHash('blake512')\n .update(bigInt2Buffer(privKey))\n .digest()\n .slice(0, 32)\n );\n const s = utils.leBuff2int(sBuff);\n return Scalar.shr(s, 3);\n};\n\nexport const genEcdhSharedKey = (\n privKey: PrivateKey,\n pubKey: PublicKey\n): PublicKey => {\n const sharedKey = babyJub.mulPointEscalar(\n pubKey,\n formatPrivKeyForBabyJub(privKey)\n );\n if (sharedKey[0] === 0n) {\n return [0n, 1n];\n } else {\n return sharedKey;\n }\n};\n\nexport const genMessageFactory =\n (\n stateIdx: number,\n signPriKey: PrivateKey,\n signPubKey: PublicKey,\n coordPubKey: PublicKey\n ) =>\n (\n encPriKey: PrivateKey,\n nonce: number,\n voIdx: number,\n newVotes: number,\n isLastCmd: boolean,\n salt?: bigint\n ): bigint[] => {\n if (!salt) {\n // uint56\n salt = BigInt('0x' + randomBytes(7).toString('hex'));\n }\n\n const packaged =\n BigInt(nonce) +\n (BigInt(stateIdx) << 32n) +\n (BigInt(voIdx) << 64n) +\n (BigInt(newVotes) << 96n) +\n (BigInt(salt) << 192n);\n\n let newPubKey = [...signPubKey];\n if (isLastCmd) {\n newPubKey = [0n, 0n];\n }\n\n const hash = poseidon([packaged, ...newPubKey]);\n const signature = eddsa.signPoseidon(bigInt2Buffer(signPriKey), hash);\n\n const command = [packaged, ...newPubKey, ...signature.R8, signature.S];\n\n const message = poseidonEncrypt(\n command,\n genEcdhSharedKey(encPriKey, coordPubKey),\n 0n\n );\n\n return message;\n };\n\n// Batch generate encrypted commands.\n// output format just like (with commands 1 ~ N):\n// [\n// [msg_N, msg_N-1, ... msg_3, msg_2, msg_1],\n// [pubkey_N, pubkey_N-1, ... pubkey_3, pubkey_2, pubkey_1]\n// ]\n// and change the public key at command_N\nexport const batchGenMessage = (\n stateIdx: number,\n account: Account,\n coordPubKey: PublicKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n account.privKey,\n account.pubKey,\n coordPubKey\n );\n\n const payload = [];\n for (let i = plan.length - 1; i >= 0; i--) {\n const p = plan[i];\n const encAccount = genKeypair();\n const msg = genMessage(\n encAccount.privKey,\n i + 1,\n p[0],\n p[1],\n i === plan.length - 1\n );\n\n payload.push({\n msg,\n encPubkeys: encAccount.pubKey,\n });\n }\n\n return payload;\n};\n\nexport const privateKeyFromTxt = (txt: string) => {\n if (typeof txt !== 'string') {\n return;\n }\n const key = txt.split('\\n')[1] || '';\n if (key.length !== 512) {\n return;\n }\n const keys = key.match(/[0-9a-f]{128}/g);\n if (!keys || keys.length !== 4) {\n return;\n }\n const priKey = poseidon(keys.map((k) => BigInt('0x' + k)));\n return genKeypair(priKey % SNARK_FIELD_SIZE);\n};\n\nconst rerandomize = (\n pubKey: bigint[],\n ciphertext: { c1: bigint[]; c2: bigint[] },\n randomVal = genRandomKey()\n) => {\n const d1 = babyJub.addPoint(\n babyJub.mulPointEscalar(babyJub.Base8, randomVal),\n ciphertext.c1\n );\n\n const d2 = babyJub.addPoint(\n babyJub.mulPointEscalar(pubKey, randomVal),\n ciphertext.c2\n );\n\n return {\n d1,\n d2,\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyProof = async (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates,\n }: {\n coordPubKey: PublicKey;\n oldKey: Account;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomKey();\n const deactivateIdx = deactivates.findIndex((d) => d[4] === sharedKeyHash);\n if (deactivateIdx < 0) {\n return null;\n }\n\n const deactivateLeaf = deactivates[deactivateIdx];\n\n const c1 = [deactivateLeaf[0], deactivateLeaf[1]];\n const c2 = [deactivateLeaf[2], deactivateLeaf[3]];\n\n const { d1, d2 } = rerandomize(coordPubKey, { c1, c2 }, randomVal);\n\n const nullifier = poseidon([oldKey.formatedPrivKey, 1444992409218394441042n]);\n\n const tree = new Tree(5, depth, 0n);\n const leaves = deactivates.map((d) => poseidon(d));\n tree.initLeaves(leaves);\n\n const deactivateRoot = tree.root;\n const deactivateLeafPathElements = tree.pathElementOf(deactivateIdx);\n\n const inputHash =\n BigInt(\n solidityPackedSha256(\n new Array(7).fill('uint256'),\n stringizing([\n deactivateRoot,\n poseidon(coordPubKey),\n nullifier,\n d1[0],\n d1[1],\n d2[0],\n d2[1],\n ]) as string[]\n )\n ) % SNARK_FIELD_SIZE;\n\n const input = {\n inputHash,\n coordPubKey,\n deactivateRoot,\n deactivateIndex: deactivateIdx,\n deactivateLeaf: poseidon(deactivateLeaf),\n c1,\n c2,\n randomVal,\n d1,\n d2,\n deactivateLeafPathElements,\n nullifier,\n oldPrivateKey: oldKey.formatedPrivKey,\n };\n\n return input;\n};\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Account,\n batchGenMessage,\n Circom,\n PublicKey,\n stringizing,\n} from '../circom';\nimport { Contract } from '../contract';\nimport { Indexer } from '../indexer';\nimport { OracleCertificate } from '../oracle-certificate';\nimport {\n MsgExecuteContractEncodeObject,\n SigningCosmWasmClient,\n} from '@cosmjs/cosmwasm-stargate';\nimport { GasPrice, calculateFee, StdFee } from '@cosmjs/stargate';\nimport { MsgExecuteContract } from 'cosmjs-types/cosmwasm/wasm/v1/tx.js';\nimport { CertificateEcosystem, ErrorResponse } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\n\nexport function isErrorResponse(response: unknown): response is ErrorResponse {\n return (\n typeof response === 'object' &&\n response !== null &&\n 'error' in response &&\n typeof (response as ErrorResponse).error === 'object' &&\n 'message' in (response as ErrorResponse).error\n );\n}\n\nexport class MACI {\n public circom: Circom;\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n constructor({\n circom,\n contract,\n indexer,\n oracleCertificate,\n }: {\n circom: Circom;\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n }) {\n this.circom = circom;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const stateIdx = await client.getStateIdxInc({ address });\n return stateIdx;\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n }: {\n signer: OfflineSigner;\n stateIdx: number;\n contractAddress: string;\n }) {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const voiceCredit = await client.getVoiceCreditBalance({\n index: stateIdx.toString(),\n });\n return voiceCredit;\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey: bigint[];\n }) {\n const response = await this.indexer.getSignUpEventByPubKey(\n contractAddress,\n pubKey\n );\n\n if (isErrorResponse(response)) {\n return -1;\n }\n return response.data.signUpEvents[0].stateIdx;\n }\n\n async feegrantAllowance({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }) {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response;\n } catch (error) {\n return {\n granter: contractAddress,\n grantee: address,\n spend_limit: [],\n };\n }\n }\n\n // only for maci and oracle maci, amaci will set the voice credit when deploy the contract\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n mode = 'maci',\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n certificate?: string;\n mode?: 'maci' | 'amaci';\n }): Promise<string> {\n if (mode === 'amaci') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundById(contractAddress);\n\n if (!isErrorResponse(round)) {\n return round.data.round.voiceCreditAmount;\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n return '0';\n }\n }\n\n if (certificate) {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n amount: address,\n certificate,\n sender: address,\n });\n\n return balance;\n } else {\n const client = await this.contract.maciClient({\n signer,\n contractAddress,\n });\n\n const balance = await client.whiteBalanceOf({\n sender: address,\n });\n\n return balance;\n }\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n const isWhitelisted = await client.isWhiteList({\n sender: address,\n });\n\n return isWhitelisted;\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n const client = await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n\n const snapshotHeight = await client.queryOracleWhitelistConfig();\n return snapshotHeight;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.indexer.getRoundById(contractAddress);\n\n if (isErrorResponse(roundInfo)) {\n throw new Error(\n `Failed to get round info: ${roundInfo.error.type} ${roundInfo.error.message}`\n );\n }\n\n return roundInfo.data.round;\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.circuitType; // 0: 1p1v, 1: qv\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n const circuitType = await this.getRoundCircuitType({ contractAddress });\n\n return circuitType === '1';\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n try {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n if (roundInfo.maciType !== 'aMACI') {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const votingEndTime = new Date(Number(roundInfo.votingEnd) / 10 ** 6);\n const currentTime = new Date();\n const threeDaysInMs = 3 * 24 * 60 * 60 * 1000;\n\n if (currentTime.getTime() - votingEndTime.getTime() <= threeDaysInMs) {\n return {\n claimable: null,\n balance: null,\n };\n }\n\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n if (\n roundBalance.data.balance &&\n roundBalance.data.balance !== '0' &&\n roundBalance.data.balance !== ''\n ) {\n return {\n claimable: true,\n balance: roundBalance.data.balance,\n };\n }\n\n return {\n claimable: false,\n balance: roundBalance.data.balance,\n };\n } catch (error) {\n console.error('Error in queryRoundClaimable:', error);\n return {\n claimable: null,\n balance: null,\n };\n }\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n const roundInfo = await this.getRoundInfo({ contractAddress });\n\n return roundInfo.gasStationEnable;\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n const startTime = new Date(votingStart / 10 ** 6);\n const endTime = new Date(votingEnd / 10 ** 6);\n\n // Inherit logic from Maci Explorer\n if (Number(votingStart) === 0) {\n return 'Created';\n }\n\n if (Number(votingEnd) === 0) {\n if (startTime < currentTime) {\n return 'Ongoing';\n }\n } else {\n if (startTime < currentTime && currentTime < endTime) {\n return 'Ongoing';\n }\n if (currentTime > endTime) {\n if (status !== 'Closed') {\n return 'Tallying';\n }\n }\n }\n\n return status;\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n const roundBalance = await this.indexer.balanceOf(contractAddress);\n if (isErrorResponse(roundBalance)) {\n throw new Error(\n `Failed to query round balance: ${roundBalance.error.type} ${roundBalance.error.message}`\n );\n }\n\n return roundBalance.data.balance;\n }\n\n async requestOracleCertificate({\n signer,\n ecosystem,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n ecosystem: CertificateEcosystem;\n address: string;\n contractAddress: string;\n }): Promise<SignatureResponse> {\n const oracleWhitelistConfig = await this.getOracleWhitelistConfig({\n signer,\n contractAddress,\n });\n\n const signResponse = await this.oracleCertificate.sign({\n ecosystem,\n address,\n contractAddress,\n height: oracleWhitelistConfig.snapshot_height,\n });\n\n return signResponse;\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciAccount,\n oracleCertificate,\n gasStation = false,\n }: {\n signer: OfflineSigner;\n address: string;\n contractAddress: string;\n maciAccount?: Account;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n }) {\n try {\n if (maciAccount === undefined) {\n maciAccount = await this.circom.genKeypairFromSign(signer, address);\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (oracleCertificate) {\n return await this.signupOracle({\n client,\n address,\n pubKey: maciAccount.pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n });\n } else {\n return await this.signupSimple({\n client,\n address,\n pubKey: maciAccount.pubKey,\n contractAddress,\n gasStation,\n });\n }\n } catch (error) {\n throw Error(`Signup failed! ${error}`);\n }\n }\n\n private async processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n }: {\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n contractAddress: string;\n voiceCreditBalance: string;\n }) {\n // Check for duplicate options\n const idxSet = new Set();\n for (const option of selectedOptions) {\n if (idxSet.has(option.idx)) {\n throw new Error(\n `Duplicate option index (${option.idx}) is not allowed`\n );\n }\n idxSet.add(option.idx);\n }\n\n // Filter and sort options\n const options = selectedOptions\n .filter((o) => !!o.vc)\n .sort((a, b) => a.idx - b.idx);\n\n // Calculate used voice credits\n const isQv = await this.queryRoundIsQv({ contractAddress });\n const usedVc = options.reduce((s, o) => s + (isQv ? o.vc * o.vc : o.vc), 0);\n\n if (Number(voiceCreditBalance) < usedVc) {\n throw new Error('Insufficient voice credit balance');\n }\n\n return options;\n }\n\n async vote({\n signer,\n address,\n stateIdx,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciAccount,\n gasStation = false,\n }: {\n signer: OfflineSigner;\n address: string;\n stateIdx: number;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PublicKey;\n maciAccount?: Account;\n gasStation?: boolean;\n }) {\n if (stateIdx === -1) {\n throw new Error('State index is not set, Please signup first');\n }\n\n try {\n const voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n\n if (maciAccount === undefined) {\n maciAccount = await this.circom.genKeypairFromSign(signer, address);\n }\n\n const plan = options.map((o) => {\n return [o.idx, o.vc] as [number, number];\n });\n\n const payload = batchGenMessage(\n stateIdx,\n maciAccount,\n operatorCoordPubKey,\n plan\n );\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n return await this.publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n });\n } catch (error) {\n throw Error(`Vote failed! ${error}`);\n }\n }\n\n async publishMessage({\n client,\n address,\n payload,\n contractAddress,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PublicKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n }) {\n const msgs: MsgExecuteContractEncodeObject[] = payload.map(\n ({ msg, encPubkeys }) => ({\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: MsgExecuteContract.fromPartial({\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(\n JSON.stringify(\n stringizing({\n publish_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n })\n )\n ),\n }),\n })\n );\n\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(20000000 * msgs.length, gasPrice);\n\n if (gasStation) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PublicKey;\n contractAddress: string;\n gasStation?: boolean;\n }) {\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(60000000, gasPrice);\n\n if (gasStation === true) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n },\n grantFee\n );\n }\n\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n },\n fee\n );\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PublicKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n }) {\n const gasPrice = GasPrice.fromString('100000000000peaka');\n const fee = calculateFee(60000000, gasPrice);\n\n if (gasStation === true) {\n const grantFee: StdFee = {\n amount: fee.amount,\n gas: fee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n },\n grantFee\n );\n }\n\n return client.execute(\n address,\n contractAddress,\n {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n amount: oracleCertificate.amount,\n certificate: oracleCertificate.signature,\n },\n },\n fee\n );\n }\n}\n","import {\n BalanceResponse,\n ClientParams,\n RoundResponse,\n RoundsResponse,\n OperatorResponse,\n OperatorsResponse,\n CircuitResponse,\n TransactionResponse,\n TransactionsResponse,\n CircuitsResponse,\n ProofResponse,\n} from './types';\nimport {\n Http,\n Indexer,\n Contract,\n OracleCertificate,\n Circom,\n MACI,\n} from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public circom: Circom;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n maciCodeId,\n oracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n }: ClientParams) {\n const defaultParams = getDefaultParams(network);\n\n this.rpcEndpoint = rpcEndpoint || defaultParams.rpcEndpoint;\n this.restEndpoint = restEndpoint || defaultParams.restEndpoint;\n this.apiEndpoint = apiEndpoint || defaultParams.apiEndpoint;\n this.certificateApiEndpoint =\n certificateApiEndpoint || defaultParams.certificateApiEndpoint;\n this.registryAddress = registryAddress || defaultParams.registryAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n\n this.http = new Http(\n this.apiEndpoint,\n this.restEndpoint,\n customFetch,\n defaultOptions\n );\n this.indexer = new Indexer({\n restEndpoint: this.restEndpoint,\n apiEndpoint: this.apiEndpoint,\n registryAddress: this.registryAddress,\n http: this.http,\n });\n this.contract = new Contract({\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.circom = new Circom({ network });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n circom: this.circom,\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n });\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.oracleMaciClient({\n signer,\n contractAddress,\n });\n }\n\n async registryClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.registryClient({ signer, contractAddress });\n }\n\n async maciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.maciClient({ signer, contractAddress });\n }\n\n async amaciClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound(params);\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound(params);\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound(params);\n }\n\n /**\n * @method balanceOf\n * @description Get the balance of a specific address.\n * @param {string} address - The address to check the balance for.\n * @returns {Promise<BalanceResponse>} The balance response.\n */\n async balanceOf(address: string): Promise<BalanceResponse> {\n return await this.indexer.account.balanceOf(address);\n }\n\n /**\n * @method getRoundById\n * @description Get a round by its ID.\n * @param {string} id - The ID of the round.\n * @returns {Promise<RoundResponse>} The round response.\n */\n async getRoundById(id: string): Promise<RoundResponse> {\n return await this.indexer.round.getRoundById(id);\n }\n\n /**\n * @method getRounds\n * @description Get multiple rounds.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRounds(after: string, limit?: number): Promise<RoundsResponse> {\n return await this.indexer.round.getRounds(after, limit);\n }\n\n /**\n * @method getRoundsByStatus\n * @description Get rounds by their status.\n * @param {string} status - The status of the rounds to retrieve.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByStatus(\n status: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByStatus(status, after, limit);\n }\n\n /**\n * @method getRoundsByCircuitName\n * @description Get rounds by their circuit name.\n * @param {string} name - The name of the circuit.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByCircuitName(\n name: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByCircuitName(name, after, limit);\n }\n\n /**\n * @method getRoundsByOperator\n * @description Get rounds by their operator address.\n * @param {string} address - The address of the operator.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of rounds to retrieve.\n * @returns {Promise<RoundsResponse>} The rounds response.\n */\n async getRoundsByOperator(\n address: string,\n after: string,\n limit?: number\n ): Promise<RoundsResponse> {\n return await this.indexer.round.getRoundsByOperator(address, after, limit);\n }\n\n /**\n * @method getOperatorByAddress\n * @description Get an operator by their address.\n * @param {string} address - The address of the operator.\n * @returns {Promise<OperatorResponse>} The operator response.\n */\n async getOperatorByAddress(address: string): Promise<OperatorResponse> {\n return await this.indexer.operator.getOperatorByAddress(address);\n }\n\n /**\n * @method getOperators\n * @description Get multiple operators.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of operators to retrieve.\n * @returns {Promise<OperatorsResponse>} The operators response.\n */\n async getOperators(\n after: string,\n limit?: number\n ): Promise<OperatorsResponse> {\n return await this.indexer.operator.getOperators(after, limit);\n }\n\n /**\n * @method getCircuitByName\n * @description Get a circuit by its name.\n * @param {string} name - The name of the circuit.\n * @returns {Promise<CircuitResponse>} The circuit response.\n */\n async getCircuitByName(name: string): Promise<CircuitResponse> {\n return await this.indexer.circuit.getCircuitByName(name);\n }\n\n /**\n * @method getCircuits\n * @description Get all available circuits.\n * @returns {Promise<CircuitsResponse>} The circuits response.\n */\n async getCircuits(): Promise<CircuitsResponse> {\n return await this.indexer.circuit.getCircuits();\n }\n\n /**\n * @method getTransactionByHash\n * @description Get a transaction by its hash.\n * @param {string} hash - The hash of the transaction.\n * @returns {Promise<TransactionResponse>} The transaction response.\n */\n async getTransactionByHash(hash: string): Promise<TransactionResponse> {\n return await this.indexer.transaction.getTransactionByHash(hash);\n }\n\n /**\n * @method getTransactions\n * @description Get multiple transactions.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactions(\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.indexer.transaction.getTransactions(after, limit);\n }\n\n /**\n * @method getTransactionsByContractAddress\n * @description Get transactions by contract address.\n * @param {string} address - The contract address.\n * @param {string} after - The cursor to start after.\n * @param {number} [limit] - The number of transactions to retrieve.\n * @returns {Promise<TransactionsResponse>} The transactions response.\n */\n async getTransactionsByContractAddress(\n address: string,\n after: string,\n limit?: number\n ): Promise<TransactionsResponse> {\n return await this.indexer.transaction.getTransactionsByContractAddress(\n address,\n after,\n limit\n );\n }\n\n /**\n * @method getProofByContractAddress\n * @description Get proof data by contract address.\n * @param {string} address - The contract address.\n * @returns {Promise<ProofResponse>} The proof response.\n */\n async getProofByContractAddress(address: string): Promise<ProofResponse> {\n return await this.indexer.proof.getProofByContractAddress(address);\n }\n}\n"],"mappings":"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","names":["MaciClient","MaciCircuitType","MaciCertSystemType","MaciRoundType","createBlakeHash","import_stargate","MaciClient","import_ffjavascript","import_blake_hash"]}
|