@dorafactory/maci-sdk 0.1.2-pre.0 β†’ 0.1.2-pre.2

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/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/crypto/keys.ts","../src/libs/crypto/bigintUtils.ts","../src/libs/crypto/hashing.ts","../src/libs/crypto/constants.ts","../src/libs/crypto/tree.ts","../src/libs/crypto/babyjub.ts","../src/libs/crypto/sign.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/libs/contract/ts/Saas.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/maci/maci.ts","../src/maci.ts"],"sourcesContent":["// Core\nexport { MaciClient } from './maci';\nexport { Http } from './libs/http';\n\n// Query Types\nexport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n} from './libs/query';\n\n// Crypto\nexport * from './libs/crypto';\n\n// Types\nexport * from './types';\nexport type * from './types';\n\n// Constants\nexport { circuits, getDefaultParams, type NetworkConfig } from './libs/const';\n\n// Utils\nexport { stringizing, bigInt2Buffer } from './libs/crypto/bigintUtils';\nexport { isValidAddress } from './utils';\nexport { getAMaciRoundCircuitFee } from './libs/contract/utils';\n","export class BaseError extends Error {\n constructor(\n message: string,\n public code: number,\n public type: string\n ) {\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 async fetchAllGraphqlPages<T>(query: string, variables: any): Promise<T[]> {\n let hasNextPage = true;\n let offset = 0;\n const limit = 100; // Adjust the limit as needed\n const allData: T[] = [];\n\n while (hasNextPage) {\n const response = await this.fetch(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: { ...variables, limit, offset },\n }),\n }).then((res) => res.json());\n\n const key = Object.keys(response.data)[0];\n\n const { nodes, pageInfo } = response.data[key];\n allData.push(...nodes);\n hasNextPage = pageInfo.hasNextPage;\n offset += limit;\n }\n\n return allData;\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 ERROR_INVALID_FIELDS: 'ERROR_INVALID_FIELDS',\n ERROR_CLAIM_INFOS_NOT_FOUND: 'ERROR_CLAIM_INFOS_NOT_FOUND',\n} as const;\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 saasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n saasCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n oracleCodeIds: string[];\n saasCodeIds: 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 saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 119, // 6-3-3-125\n saasCodeId: 152,\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n oracleCodeIds: ['101', '116', '117', '119'],\n saasCodeIds: ['152'],\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 saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n maciCodeId: 134,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 123, // 6-3-3-125\n saasCodeId: 152,\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n oracleCodeIds: ['102', '105', '108', '110', '113', '115', '123'],\n saasCodeIds: ['152'],\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';\nimport { packPubKey, PubKey } from 'src/libs/crypto';\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\n/**\n * Converts a hexadecimal string to a BigInt.\n * @param hexString - The hexadecimal string to convert.\n * @returns The BigInt representation of the input.\n */\nexport function hexToBigInt(hexString: string) {\n return BigInt('0x' + hexString);\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\nexport function transformPubkey(oldPubkey: string) {\n const x = oldPubkey.slice(0, 64);\n const y = oldPubkey.slice(64);\n\n const pubkey: PubKey = [hexToBigInt(x), hexToBigInt(y)];\n console.log(pubkey);\n console.log([hexToDecimalString(x), hexToDecimalString(y)]);\n const packedPubkey = packPubKey(pubkey);\n return packedPubkey;\n}\n","import CryptoJS from 'crypto-js';\nimport { bigInt2Buffer, stringizing } from './bigintUtils';\nimport { poseidonEncrypt } from '@zk-kit/poseidon-cipher';\nimport * as BabyJub from '@zk-kit/baby-jubjub';\nimport { Point } from '@zk-kit/baby-jubjub';\nimport {\n derivePublicKey,\n signMessage,\n deriveSecretScalar,\n} from '@zk-kit/eddsa-poseidon';\n\nimport { solidityPackedSha256 } from 'ethers';\n\nimport { mulPointEscalar } from '@zk-kit/baby-jubjub';\nimport { packPublicKey, unpackPublicKey } from '@zk-kit/eddsa-poseidon';\n\nimport { EcdhSharedKey, Keypair, PrivKey, PubKey } from './types';\nimport { poseidon } from './hashing';\nimport { Tree } from './tree';\nimport { genRandomBabyJubValue } from './babyjub';\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\n/**\n * Generate a private key\n * @returns A random seed for a private key.\n */\nexport const genPrivKey = (): bigint =>\n BigInt(`0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`);\n\n/**\n * Generate a random value\n * @returns A BabyJub-compatible salt.\n */\nexport const genRandomSalt = (): bigint => genRandomBabyJubValue();\n\n/**\n * An internal function which formats a random private key to be compatible\n * with the BabyJub curve. This is the format which should be passed into the\n * PubKey and other circuits.\n * @param privKey A private key generated using genPrivKey()\n * @returns A BabyJub-compatible private key.\n */\nexport const formatPrivKeyForBabyJub = (privKey: PrivKey): bigint =>\n BigInt(deriveSecretScalar(bigInt2Buffer(privKey)));\n\n/**\n * Losslessly reduces the size of the representation of a public key\n * @param pubKey The public key to pack\n * @returns A packed public key\n */\nexport const packPubKey = (pubKey: PubKey): bigint =>\n BigInt(packPublicKey(pubKey));\n\n/**\n * Restores the original PubKey from its packed representation\n * @param packed The value to unpack\n * @returns The unpacked public key\n */\nexport const unpackPubKey = (packed: bigint): PubKey => {\n const pubKey = unpackPublicKey(packed);\n return pubKey.map((x) => BigInt(x)) as PubKey;\n};\n\n/**\n * @param privKey A private key generated using genPrivKey()\n * @returns A public key associated with the private key\n */\nexport const genPubKey = (privKey: PrivKey): PubKey => {\n const key = derivePublicKey(bigInt2Buffer(privKey));\n return [BigInt(key[0]), BigInt(key[1])];\n};\n\n/**\n * Generates a keypair.\n * @returns a keypair\n */\nexport const genKeypair = (pkey?: PrivKey): Keypair => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genPrivKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n const keypair: Keypair = { privKey, pubKey, formatedPrivKey };\n\n return keypair;\n};\n\n/**\n * Generates an Elliptic-Curve Diffie–Hellman (ECDH) shared key given a private\n * key and a public key.\n * @param privKey A private key generated using genPrivKey()\n * @param pubKey A public key generated using genPubKey()\n * @returns The ECDH shared key.\n */\nexport const genEcdhSharedKey = (\n privKey: PrivKey,\n pubKey: PubKey\n): EcdhSharedKey =>\n mulPointEscalar(pubKey as Point<bigint>, formatPrivKeyForBabyJub(privKey));\n\nexport const genMessageFactory =\n (\n stateIdx: number,\n signPriKey: PrivKey,\n signPubKey: PubKey,\n coordPubKey: PubKey\n ) =>\n (\n encPriKey: PrivKey,\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(\n `0x${CryptoJS.lib.WordArray.random(7).toString(CryptoJS.enc.Hex)}`\n );\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 = signMessage(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 keypair: Keypair,\n coordPubKey: PubKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n BigInt(keypair.privKey),\n keypair.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 BigInt(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 = genRandomSalt()\n) => {\n const d1 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(BabyJub.Base8, randomVal),\n ciphertext.c1 as Point<bigint>\n );\n\n const d2 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(pubKey as Point<bigint>, randomVal),\n ciphertext.c2 as Point<bigint>\n );\n\n return {\n d1,\n d2,\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyInput = (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates,\n }: {\n coordPubKey: PubKey;\n oldKey: Keypair;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomSalt();\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([\n BigInt(oldKey.formatedPrivKey),\n 1444992409218394441042n,\n ]);\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\n// LIB\nfunction randomUint256() {\n const buffer = [];\n for (let i = 0; i < 64; i++) {\n buffer.push(\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0')\n );\n }\n return buffer.join('');\n}\n\nexport const genRandomKey = () => {\n const key = [\n randomUint256(),\n randomUint256(),\n randomUint256(),\n randomUint256(),\n ].join('');\n return ['-----BEGIN MACI KEY-----', key, '-----END MACI KEY-----'].join('\\n');\n};\n","type 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 const 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","import { poseidonPerm } from '@zk-kit/poseidon-cipher';\nimport { solidityPackedSha256 } from 'ethers';\n\nimport assert from 'assert';\n\nimport type { Plaintext, PoseidonFuncs } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * Hash an array of uint256 values the same way that the EVM does.\n * @param input - the array of values to hash\n * @returns a EVM compatible sha256 hash\n */\nexport const sha256Hash = (input: bigint[]): bigint => {\n const types: string[] = [];\n\n input.forEach(() => {\n types.push('uint256');\n });\n\n return (\n BigInt(\n solidityPackedSha256(\n types,\n input.map((x) => x.toString())\n )\n ) % SNARK_FIELD_SIZE\n );\n};\n\n/**\n * Generate the poseidon hash of the inputs provided\n * @param inputs The inputs to hash\n * @returns the hash of the inputs\n */\nexport const poseidon = (inputs: bigint[]): bigint =>\n poseidonPerm([BigInt(0), ...inputs.map((x) => BigInt(x))])[0];\n\n/**\n * Hash up to 2 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT3 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 2);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 3 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT4 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 3);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 4 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT5 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 4);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 5 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT6 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 5);\n return poseidon(inputs);\n};\n\n/**\n * Hash two BigInts with the Poseidon hash function\n * @param left The left-hand element to hash\n * @param right The right-hand element to hash\n * @returns The hash of the two elements\n */\nexport const hashLeftRight = (left: bigint, right: bigint): bigint =>\n poseidonT3([left, right]);\n\n// hash functions\nconst funcs: PoseidonFuncs = {\n 2: poseidonT3,\n 3: poseidonT4,\n 4: poseidonT5,\n 5: poseidonT6,\n};\n\n/**\n * Hash up to N elements\n * @param numElements The number of elements to hash\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hashN = (numElements: number, elements: Plaintext): bigint => {\n const elementLength = elements.length;\n\n if (elements.length > numElements) {\n throw new TypeError(\n `the length of the elements array should be at most ${numElements}; got ${elements.length}`\n );\n }\n const elementsPadded = elements.slice();\n\n if (elementLength < numElements) {\n for (let i = elementLength; i < numElements; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return funcs[numElements](elementsPadded);\n};\n\n// hash functions\nexport const hashLeanIMT = (a: bigint, b: bigint): bigint => hashN(2, [a, b]);\nexport const hash2 = (elements: Plaintext): bigint => hashN(2, elements);\nexport const hash3 = (elements: Plaintext): bigint => hashN(3, elements);\nexport const hash4 = (elements: Plaintext): bigint => hashN(4, elements);\nexport const hash5 = (elements: Plaintext): bigint => hashN(5, elements);\n\n/**\n * A convenience function to use Poseidon to hash a Plaintext with\n * no more than 13 elements\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hash12 = (elements: Plaintext): bigint => {\n const max = 12;\n const elementLength = elements.length;\n\n if (elementLength > max) {\n throw new TypeError(\n `the length of the elements array should be at most ${max}; got ${elements.length}`\n );\n }\n\n const elementsPadded = elements.slice();\n\n if (elementLength < max) {\n for (let i = elementLength; i < max; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return poseidonT5([\n poseidonT6(elementsPadded.slice(0, 5)),\n poseidonT6(elementsPadded.slice(5, 10)),\n elementsPadded[10],\n elementsPadded[11],\n ]);\n};\n\n/**\n * Hash a single BigInt with the Poseidon hash function\n * @param preImage The element to hash\n * @returns The hash of the element\n */\nexport const hashOne = (preImage: bigint): bigint =>\n poseidonT3([preImage, BigInt(0)]);\n","import { r } from '@zk-kit/baby-jubjub';\nimport { keccak256, toUtf8Bytes } from 'ethers';\n\nimport assert from 'assert';\n\nexport const SNARK_FIELD_SIZE = r;\n\n// A nothing-up-my-sleeve zero value\n// Should be equal to 8370432830353022751713833565135785980866757267633941821328460903436894336785\nexport const NOTHING_UP_MY_SLEEVE =\n BigInt(keccak256(toUtf8Bytes('Maci'))) % SNARK_FIELD_SIZE;\n\nassert(\n NOTHING_UP_MY_SLEEVE ===\n BigInt(\n '8370432830353022751713833565135785980866757267633941821328460903436894336785'\n )\n);\n\nexport const PAD_KEY_HASH = BigInt(\n '1309255631273308531193241901289907343161346846555918942743921933037802809814'\n);\n","import { poseidon } from './hashing';\n\nexport class Tree {\n public readonly DEPTH: number;\n public readonly HEIGHT: number;\n public readonly DEGREE: number;\n public readonly LEAVES_COUNT: number;\n public readonly LEAVES_IDX_0: number;\n public readonly NODES_COUNT: number;\n\n protected nodes: bigint[] = [];\n protected zeros: bigint[] = [];\n\n constructor(degree: number, depth: number, zero: bigint) {\n this.DEPTH = depth;\n this.HEIGHT = depth + 1;\n this.DEGREE = degree;\n\n this.LEAVES_COUNT = degree ** depth;\n this.LEAVES_IDX_0 = (degree ** depth - 1) / (degree - 1);\n this.NODES_COUNT = (degree ** (depth + 1) - 1) / (degree - 1);\n\n this.initZero(zero);\n this.initNodes();\n }\n\n get root() {\n return this.nodes[0];\n }\n\n initZero(zero: bigint) {\n const zeros = new Array(this.HEIGHT);\n zeros[0] = zero;\n for (let i = 1; i < zeros.length; i++) {\n const children = new Array(this.DEGREE).fill(zeros[i - 1]);\n zeros[i] = poseidon(children);\n }\n this.zeros = zeros;\n }\n\n initNodes() {\n const DEGREE = this.DEGREE;\n\n const nodes = new Array(this.NODES_COUNT);\n\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = 0; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n }\n\n this.nodes = nodes;\n }\n\n initLeaves(leaves: bigint[]) {\n const DEGREE = this.DEGREE;\n for (let i = 0; i < leaves.length; i++) {\n if (i >= this.LEAVES_COUNT) {\n console.error('OVERFLOW');\n break;\n }\n this.nodes[this.LEAVES_IDX_0 + i] = BigInt(leaves[i]);\n }\n\n for (let d = this.DEPTH - 1; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n for (let i = 0; i < size / DEGREE; i++) {\n const start = (idx0 + i) * DEGREE + 1;\n const children = this.nodes.slice(start, start + DEGREE);\n this.nodes[idx0 + i] = poseidon(children);\n }\n }\n }\n\n leaf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n return this.nodes[nodeIdx];\n }\n\n leaves() {\n return this.nodes.slice(this.LEAVES_IDX_0);\n }\n\n updateLeaf(leafIdx: number, leaf: bigint) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n this.nodes[nodeIdx] = leaf;\n\n this._update(nodeIdx);\n }\n\n pathIdxOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathIdx: bigint[] = [];\n\n for (let i = 0; i < this.DEPTH; i++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n pathIdx.push(BigInt(idx - childrenIdx0));\n\n idx = parentIdx;\n }\n\n return pathIdx;\n }\n\n pathElementOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathElement: bigint[][] = [];\n\n for (let h = 0; h < this.DEPTH; h++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n const el: bigint[] = [];\n for (let i = childrenIdx0; i < childrenIdx0 + this.DEGREE; i++) {\n if (i === idx) continue;\n el.push(this.nodes[i]);\n }\n\n pathElement.push(el);\n\n idx = parentIdx;\n }\n\n return pathElement;\n }\n\n subTree(length: number) {\n const subTree = new Tree(this.DEGREE, this.DEPTH, this.zeros[0]);\n const nodes = [...this.nodes];\n\n const DEGREE = this.DEGREE;\n let tail = length;\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = tail; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n tail = Math.ceil(tail / DEGREE);\n }\n\n subTree.nodes = nodes;\n subTree._update(this.LEAVES_IDX_0 + length - 1);\n\n return subTree;\n }\n\n protected _update(nodeIdx: number) {\n let idx = nodeIdx;\n while (idx > 0) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n this.nodes[parentIdx] = poseidon(\n this.nodes.slice(childrenIdx0, childrenIdx0 + 5)\n );\n\n idx = parentIdx;\n }\n }\n}\n","import assert from 'assert';\nimport CryptoJS from 'crypto-js';\n\nimport type { PrivKey } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * @notice A class representing a point on the first group (G1)\n * of the Jubjub curve\n */\nexport class G1Point {\n x: bigint;\n\n y: bigint;\n\n /**\n * Create a new instance of G1Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint, y: bigint) {\n assert(x < SNARK_FIELD_SIZE && x >= 0, 'G1Point x out of range');\n assert(y < SNARK_FIELD_SIZE && y >= 0, 'G1Point y out of range');\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G1Point): boolean {\n return this.x === pt.x && this.y === pt.y;\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string; y: string } {\n return {\n x: this.x.toString(),\n y: this.y.toString(),\n };\n }\n}\n\n/**\n * @notice A class representing a point on the second group (G2)\n * of the Jubjub curve. This is usually an extension field of the\n * base field of the curve.\n */\nexport class G2Point {\n x: bigint[];\n\n y: bigint[];\n\n /**\n * Create a new instance of G2Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint[], y: bigint[]) {\n this.checkPointsRange(x, 'x');\n this.checkPointsRange(y, 'y');\n\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G2Point): boolean {\n return (\n this.x[0] === pt.x[0] &&\n this.x[1] === pt.x[1] &&\n this.y[0] === pt.y[0] &&\n this.y[1] === pt.y[1]\n );\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string[]; y: string[] } {\n return {\n x: this.x.map((n) => n.toString()),\n y: this.y.map((n) => n.toString()),\n };\n }\n\n /**\n * Check whether the points are in range\n * @param x the x coordinate\n * @param type the type of the coordinate\n */\n private checkPointsRange(x: bigint[], type: 'x' | 'y') {\n assert(\n x.every((n) => n < SNARK_FIELD_SIZE && n >= 0),\n `G2Point ${type} out of range`\n );\n }\n}\n\n// /**\n// * Returns a BabyJub-compatible random value. We create it by first generating\n// * a random value (initially 256 bits large) modulo the snark field size as\n// * described in EIP197. This results in a key size of roughly 253 bits and no\n// * more than 254 bits. To prevent modulo bias, we then use this efficient\n// * algorithm:\n// * http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/crypt/arc4random_uniform.c\n// * @returns A BabyJub-compatible random value.\n// */\n// export const genRandomBabyJubValue = (): bigint => {\n// // Prevent modulo bias\n// // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n// // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n// const min = BigInt(\n// '6350874878119819312338956282401532410528162663560392320966563075034087161851'\n// );\n\n// let privKey: PrivKey = SNARK_FIELD_SIZE;\n\n// do {\n// const rand = BigInt(\n// `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n// );\n\n// if (rand >= min) {\n// privKey = rand % SNARK_FIELD_SIZE;\n// }\n// } while (privKey >= SNARK_FIELD_SIZE);\n// privKey =\n// return privKey;\n// };\n\nexport const genRandomBabyJubValue = () => {\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(\n `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n );\n\n if (rand >= min) {\n break;\n }\n }\n\n // const privKey = rand % SNARK_FIELD_SIZE;\n const privKey = rand % 2n ** 253n;\n return privKey;\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 { genKeypair } from './keys';\nimport { SignResult } from './types';\n\nexport async function signMessage(\n signer: OfflineSigner,\n address: string,\n message: string,\n network: 'mainnet' | 'testnet'\n): Promise<SignResult> {\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n const chainId = getDefaultParams(network).chainId;\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,\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: 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\nexport async function genKeypairFromSignature(signature: string) {\n const sign = BigInt('0x' + Buffer.from(signature, 'base64').toString('hex'));\n\n return genKeypair(sign);\n}\n\nexport async function genKeypairFromSign({\n signer,\n address,\n network,\n}: {\n signer: OfflineSigner;\n address?: string;\n network: 'mainnet' | 'testnet';\n}) {\n if (!address) {\n [{ address }] = await signer.getAccounts();\n }\n\n const sig = await signMessage(\n signer,\n address,\n 'Generate_MACI_Private_Key',\n network\n );\n\n return genKeypairFromSignature(sig.signature);\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 SelectiveRoundResponse,\n SelectiveRoundGraphqlResponse,\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 /**\n * Get round information with selective fields\n * @param address Round address\n * @param fields Array of fields to return, returns all fields if empty\n * @returns Round information response\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\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 defaultFields = [\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 // 'funds',\n ];\n\n if (fields && fields.length > 0) {\n const invalidFields = fields.filter(\n (field) => !defaultFields.includes(field)\n );\n if (invalidFields.length > 0) {\n return {\n code: 400,\n error: {\n message: `Invalid fields: ${invalidFields.join(', ')}`,\n type: ERROR.ERROR_INVALID_FIELDS,\n },\n };\n }\n }\n\n const selectedFields =\n fields && fields.length > 0 ? fields : defaultFields;\n\n const fieldString = selectedFields.join('\\n ');\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n ${fieldString}\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<SelectiveRoundGraphqlResponse>(\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 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 {\n DeactivateMessage,\n SignUpEventsGraphqlResponse,\n SignUpEventsResponse,\n} 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 async fetchAllDeactivateLogs(contractAddress: string) {\n const DEACTIVATE_MESSAGE_QUERY = `query ($limit: Int, $offset: Int) {\n deactivateMessages(\n first: $limit,\n offset: $offset,\n orderBy: [BLOCK_HEIGHT_ASC],\n filter: {\n maciContractAddress: { \n equalTo: \"${contractAddress}\" \n },\n }\n ) {\n\t totalCount\n\t pageInfo {\n endCursor\n hasNextPage\n\t }\n nodes {\n id\n blockHeight\n timestamp\n txHash\n deactivateMessage\n maciContractAddress\n maciOperator\n }\n }\n}`;\n const ds = await this.http.fetchAllGraphqlPages<DeactivateMessage>(\n DEACTIVATE_MESSAGE_QUERY,\n {}\n );\n\n return ds.reduce(\n (s, c) => [...s, ...JSON.parse(c.deactivateMessage)],\n [] as string[][]\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 SelectiveRoundResponse,\n DeactivateMessage,\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 getRoundWithFields\n * @description Get a round by its address with selective fields.\n * @param {string} address - The address of the round.\n * @param {string[]} [fields] - The fields to retrieve.\n * @returns {Promise<SelectiveRoundResponse>} The round response.\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n return await this.round.getRoundWithFields(address, fields);\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 async fetchAllDeactivateLogs(\n contractAddress: string\n ): Promise<DeactivateMessage[]> {\n return await this.event.fetchAllDeactivateLogs(contractAddress);\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 { SigningCosmWasmClient } 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';\nimport { SaasClient } from './ts/Saas.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 64_000,\n gasPrice: GasPrice.fromString('10000000000peaka'),\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 createSaasClientBy({\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 SaasClient(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 WhitelistBase,\n WhitelistBaseConfig,\n ExecuteMsg,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n Boolean,\n DelayType,\n DelayRecords,\n DelayRecord,\n PeriodStatus,\n Period,\n Uint128,\n ArrayOfString,\n Whitelist,\n WhitelistConfig,\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 canSignUp: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isRegister: ({ 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 getDelayRecords: () => Promise<DelayRecords>;\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.canSignUp = this.canSignUp.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.isRegister = this.isRegister.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 this.getDelayRecords = this.getDelayRecords.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 canSignUp = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up: {\n sender,\n },\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 isRegister = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_register: {\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 getDelayRecords = async (): Promise<DelayRecords> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_delay_records: {},\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: WhitelistBase;\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 claim: (\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.claim = this.claim.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: WhitelistBase;\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 claim = 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 claim: {},\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","/**\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 Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n QueryMsg,\n Config,\n Boolean,\n NullableMaciContractInfo,\n MaciContractInfo,\n ArrayOfMaciContractInfo,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './Saas.types';\nexport interface SaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciContracts: ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n operatorMaciContracts: ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n maciContract: ({\n contractId,\n }: {\n contractId: number;\n }) => Promise<NullableMaciContractInfo>;\n oracleMaciCodeId: () => Promise<Uint64>;\n}\nexport class SaasQueryClient implements SaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciContracts = this.maciContracts.bind(this);\n this.operatorMaciContracts = this.operatorMaciContracts.bind(this);\n this.maciContract = this.maciContract.bind(this);\n this.oracleMaciCodeId = this.oracleMaciCodeId.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciContracts = async ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contracts: {\n limit,\n start_after: startAfter,\n },\n });\n };\n operatorMaciContracts = async ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator_maci_contracts: {\n limit,\n operator,\n start_after: startAfter,\n },\n });\n };\n maciContract = async ({\n contractId,\n }: {\n contractId: number;\n }): Promise<NullableMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contract: {\n contract_id: contractId,\n },\n });\n };\n oracleMaciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n oracle_maci_code_id: {},\n });\n };\n}\nexport interface SaasInterface extends SaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateOracleMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createOracleMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grantToVoter: (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class SaasClient extends SaasQueryClient implements SaasInterface {\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.updateConfig = this.updateConfig.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.updateOracleMaciCodeId = this.updateOracleMaciCodeId.bind(this);\n this.createOracleMaciRound = this.createOracleMaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.grantToVoter = this.grantToVoter.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: 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 update_config: {\n admin,\n denom,\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = 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 add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = 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 remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = 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 deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: 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 withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateOracleMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: 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_oracle_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createOracleMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: 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 create_oracle_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\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 contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\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 contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grantToVoter = async (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\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_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddr,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { Keypair } from '../libs/crypto';\nimport { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\nexport type * from '../libs/crypto/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 signer?: OfflineSigner;\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n saasAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n saasOracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n maciKeypair?: Keypair;\n secretKey?: string;\n mnemonic?: string;\n};\n\nexport type ContractParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n saasOracleCodeId: 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 // funds: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type SelectiveRoundType = Partial<RoundType>;\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 SelectiveRoundResponse =\n | SuccessResponse<{\n round: SelectiveRoundType;\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\n/**\n * GraphQL response type for selective round fields\n */\nexport type SelectiveRoundGraphqlResponse = {\n data: {\n round: SelectiveRoundType;\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\nexport type DeactivateMessage = {\n id: string;\n blockHeight: string;\n timestamp: string;\n txHash: string;\n deactivateMessage: string; // '[[\"0\", \"1\", \"2\", \"3\", \"4\"]]'\n maciContractAddress: string;\n maciOperator: string;\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\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(\n network: 'mainnet' | 'testnet',\n maxVoter: number,\n maxOption: number\n) {\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 if (network === 'mainnet') {\n requiredFee.amount = '20000000000000000000';\n } else {\n requiredFee.amount = '20000000000000000000';\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n if (network === 'mainnet') {\n requiredFee.amount = '750000000000000000000';\n } else {\n requiredFee.amount = '750000000000000000000';\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n\n return requiredFee;\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n createSaasClientBy,\n} from './config';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './types';\nimport { getAMaciRoundCircuitFee, getContractParams } from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { unpackPubKey } from '../crypto';\nimport { StdFee, GasPrice, calculateFee } from '@cosmjs/stargate';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public registryAddress: string;\n public saasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public saasOracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n network,\n rpcEndpoint,\n registryAddress,\n saasAddress,\n maciCodeId,\n oracleCodeId,\n saasOracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.network = network;\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.saasAddress = saasAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.saasOracleCodeId = saasOracleCodeId;\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 fee = 'auto',\n }: CreateAMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n const requiredFee = getAMaciRoundCircuitFee(\n this.network,\n maxVoter,\n maxOption\n );\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 fee,\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 {\n ...res,\n contractAddress,\n };\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 fee = 'auto',\n }: CreateMaciRoundParams & { signer: OfflineSigner }) {\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 [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\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\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\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.toString(),\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n fee\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 maxVoter,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n whitelistBackendPubkey,\n feegrantOperator,\n fee = 'auto',\n }: CreateOracleMaciRoundParams & { signer: OfflineSigner }) {\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 [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n 0,\n 0\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n max_voters: maxVoter.toString(),\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey\n ? whitelistBackendPubkey\n : 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: feegrantOperator\n ? feegrantOperator\n : this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createSaasOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const createResponse = await client.createOracleMaciRound({\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n });\n\n let contractAddress = '';\n createResponse.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_oracle_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setSaasOracleMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setSaasOracleMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async addSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async depositSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const funds = [\n {\n denom: 'peaka',\n amount: amount,\n },\n ];\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n deposit: {},\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n funds,\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n }\n\n return client.deposit(fee, undefined, funds);\n }\n\n async withdrawSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n withdraw: {\n amount,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n }\n\n return client.withdraw({ amount }, fee);\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 saasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createSaasClientBy({\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 EcosystemsResponse,\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 async listEcosystems(): Promise<EcosystemsResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/list`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Keypair,\n batchGenMessage,\n PubKey,\n stringizing,\n genAddKeyInput,\n} from '../crypto';\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, RoundType } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\nimport { getAMaciRoundCircuitFee } from '../contract/utils';\nimport { Groth16ProofType } from '../contract/ts/Maci.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 network: 'mainnet' | 'testnet';\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n public maciKeypair: Keypair;\n constructor({\n contract,\n indexer,\n oracleCertificate,\n maciKeypair,\n }: {\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n maciKeypair: Keypair;\n }) {\n this.network = contract.network;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n this.maciKeypair = maciKeypair;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\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 async hasFeegrant({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }): Promise<boolean> {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response.spend_limit.length > 0;\n } catch (error) {\n return false;\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 }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n return round.data.round.voiceCreditAmount;\n } else {\n return '0';\n }\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: certificate.amount,\n certificate: certificate.signature,\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 if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\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.getRoundWithFields(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 as RoundType;\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 queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n const fee = getAMaciRoundCircuitFee(this.network, maxVoter, maxOption);\n return fee;\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 if (!address) {\n address = (await signer.getAccounts())[0].address;\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 maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n // maciKeypair = await this.crypto.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: maciKeypair.pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n fee,\n });\n } else {\n return await this.signupSimple({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n gasStation,\n fee,\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 contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n\n if (stateIdx === -1) {\n throw new Error(\n 'State index is not set, Please signup or addNewKey first'\n );\n }\n\n try {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n let voiceCreditBalance;\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n voiceCreditBalance = round.data.round.voiceCreditAmount;\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n }\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n if (!address) {\n address = (await signer.getAccounts())[0].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 maciKeypair,\n operatorCoordPubKey,\n plan\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 fee,\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 fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n fee?: StdFee | 'auto' | number;\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 if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(address, msgs, '');\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\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\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async deactivate({\n signer,\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n maciKeypair?: Keypair;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n const stateIdx = await this.getStateIdxInc({\n signer,\n address,\n contractAddress,\n });\n\n const operatorCoordPubKey = await this.getRoundInfo({\n contractAddress,\n });\n\n const payload = batchGenMessage(\n Number(stateIdx),\n maciKeypair,\n [\n BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n ],\n [[0, 0]]\n );\n\n const { msg, encPubkeys } = payload[0];\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async fetchAllDeactivateLogs({\n contractAddress,\n }: {\n contractAddress: string;\n }) {\n const deactivates =\n await this.indexer.fetchAllDeactivateLogs(contractAddress);\n return deactivates;\n }\n\n async genAddKeyInput({\n maciKeypair,\n contractAddress,\n }: {\n maciKeypair: Keypair;\n contractAddress: string;\n }) {\n const deactivates = await this.fetchAllDeactivateLogs({\n contractAddress,\n });\n\n const roundInfo = await this.getRoundInfo({\n contractAddress,\n });\n\n const circuitPower = roundInfo.circuitPower;\n const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const inputObj = genAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [\n BigInt(roundInfo.coordinatorPubkeyX),\n BigInt(roundInfo.coordinatorPubkeyY),\n ],\n oldKey: maciKeypair,\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n });\n return inputObj;\n\n // 1. generate proof\n\n // 2. compress proof to vote proof\n\n // 3. send addNewKey tx\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newMaciKeypair.pubKey[0].toString(),\n y: newMaciKeypair.pubKey[1].toString(),\n },\n },\n fee\n );\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return client.claim(fee);\n }\n\n async getOracleCertificateConfig() {\n const ecosystems = await this.oracleCertificate.listEcosystems();\n return ecosystems;\n }\n\n /**\n * Batch grant with bond (for maci)\n * @param signer\n * @param contractAddress\n * @param address\n * @param amount\n * @returns\n */\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n amount: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\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 grant: {\n max_amount: BigInt('100000000000000000000000'),\n },\n })\n )\n ),\n }),\n },\n {\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 bond: {},\n })\n )\n ),\n funds: [\n {\n denom: 'peaka',\n amount,\n },\n ],\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n\n /**\n * Batch revoke with withdraw (for maci)\n * @param client\n * @param contractAddress\n * @param address\n * @returns\n */\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\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 withdraw: {},\n })\n )\n ),\n }),\n },\n {\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 revoke: {},\n })\n )\n ),\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n}\n","import { ClientParams, CertificateEcosystem } from './types';\nimport { Http, Indexer, Contract, OracleCertificate, MACI } from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n genKeypair,\n genKeypairFromSign,\n Keypair,\n packPubKey,\n PubKey,\n unpackPubKey,\n} from './libs/crypto';\nimport { OracleWhitelistConfig } from './libs/contract/ts/OracleMaci.types';\nimport { SignatureResponse } from './libs/oracle-certificate/types';\nimport { StdFee } from '@cosmjs/amino';\nimport { Groth16ProofType } from './libs/contract/ts/Maci.types';\nimport { isErrorResponse } from './libs/maci/maci';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public saasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public saasOracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n public maciKeypair: Keypair;\n\n public signer?: OfflineSigner;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n signer,\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n saasAddress,\n maciCodeId,\n oracleCodeId,\n saasOracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n maciKeypair,\n }: ClientParams) {\n this.signer = signer;\n this.network = network;\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.saasAddress = saasAddress || defaultParams.saasAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.saasOracleCodeId = saasOracleCodeId || defaultParams.saasCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n this.maciKeypair = maciKeypair ?? genKeypair();\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 network: this.network,\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n saasAddress: this.saasAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n saasOracleCodeId: this.saasOracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n maciKeypair: this.maciKeypair,\n });\n }\n\n getSigner(signer?: OfflineSigner) {\n if (signer) {\n return signer;\n }\n if (this.signer) {\n return this.signer;\n }\n throw new Error('No signer provided, please provide a signer');\n }\n\n getMaciKeypair() {\n return this.maciKeypair;\n }\n\n getMaciPubkey() {\n return this.packMaciPubkey(this.maciKeypair.pubKey);\n }\n\n packMaciPubkey(pubkey?: PubKey) {\n return packPubKey(pubkey || this.maciKeypair.pubKey);\n }\n\n unpackMaciPubkey(pubkey: bigint | string) {\n return unpackPubKey(BigInt(pubkey));\n }\n\n async getAddress(signer?: OfflineSigner) {\n const [{ address }] = await this.getSigner(signer).getAccounts();\n return address;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createSaasOracleMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createSaasOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async genKeypairFromSign({\n signer,\n address,\n }: {\n signer?: OfflineSigner;\n address?: string;\n } = {}) {\n return await genKeypairFromSign({\n signer: this.getSigner(signer),\n address,\n network: this.network,\n });\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n return await this.maci.getStateIdxInc({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n });\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n maciKeypair,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n stateIdx?: number;\n maciKeypair?: Keypair;\n contractAddress: string;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n if (stateIdx === undefined) {\n stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n }\n\n return await this.maci.getVoiceCreditBalance({\n signer: this.getSigner(signer),\n stateIdx,\n contractAddress,\n });\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey?: bigint[];\n }) {\n return await this.maci.getStateIdxByPubKey({\n contractAddress,\n pubKey: pubKey || this.maciKeypair.pubKey,\n });\n }\n\n async feegrantAllowance({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n address = await this.getAddress(signer);\n return await this.maci.feegrantAllowance({\n address,\n contractAddress,\n });\n }\n\n async hasFeegrant({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }): Promise<boolean> {\n address = await this.getAddress(signer);\n return await this.maci.hasFeegrant({\n address,\n contractAddress,\n });\n }\n\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n });\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n return await this.maci.getOracleWhitelistConfig({\n signer: this.getSigner(signer),\n contractAddress,\n });\n }\n\n async getRounds(after?: string, limit?: number) {\n const rounds = await this.indexer.getRounds(after || '', limit || 10);\n\n if (isErrorResponse(rounds)) {\n throw new Error(\n `Failed to get rounds: ${rounds.code} ${rounds.error.message}`\n );\n }\n\n return rounds;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundInfo({ contractAddress });\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundCircuitType({ contractAddress });\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundIsQv({ contractAddress });\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n return await this.maci.queryRoundClaimable({ contractAddress });\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n return await this.maci.queryAMaciChargeFee({\n maxVoter,\n maxOption,\n });\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundGasStation({ contractAddress });\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n return this.maci.parseRoundStatus(\n votingStart,\n votingEnd,\n status,\n currentTime\n );\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundBalance({ contractAddress });\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 return await this.maci.requestOracleCertificate({\n signer: this.getSigner(signer),\n ecosystem,\n address,\n contractAddress,\n });\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee;\n }) {\n return await this.maci.signup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation,\n fee,\n });\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n }) {\n return await this.maci.vote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation,\n });\n }\n\n async deactivate({\n signer,\n address,\n contractAddress,\n gasStation = false,\n maciKeypair,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n gasStation?: boolean;\n maciKeypair?: Keypair;\n fee?: StdFee;\n }) {\n return await this.maci.deactivate({\n signer: this.getSigner(signer),\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee,\n });\n }\n\n async genAddKeyInput({\n contractAddress,\n maciKeypair,\n }: {\n contractAddress: string;\n maciKeypair?: Keypair;\n }) {\n return await this.maci.genAddKeyInput({\n maciKeypair: maciKeypair || this.maciKeypair,\n contractAddress,\n });\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.addNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee,\n });\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.claimAMaciRound({\n signer: this.getSigner(signer),\n contractAddress,\n fee,\n });\n }\n\n async getOracleCertificateConfig() {\n return await this.maci.getOracleCertificateConfig();\n }\n\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n amount: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchGrantWithBond({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n amount,\n fee,\n });\n }\n\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchRevokeWithdraw({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n fee,\n });\n }\n}\n"],"mappings":"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","names":["MaciClient","signMessage","import_crypto_js","import_poseidon_cipher","import_ethers","import_baby_jubjub","import_eddsa_poseidon","import_ethers","import_assert","assert","assert","import_assert","assert","CryptoJS","SNARK_FIELD_SIZE","CryptoJS","signMessage","r","MaciCircuitType","MaciCertSystemType","MaciRoundType","import_stargate","import_stargate","round","MaciClient"]}
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/crypto/keys.ts","../src/libs/crypto/bigintUtils.ts","../src/libs/crypto/hashing.ts","../src/libs/crypto/constants.ts","../src/libs/crypto/tree.ts","../src/libs/crypto/babyjub.ts","../src/libs/crypto/sign.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/libs/contract/ts/Saas.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/maci/maci.ts","../src/maci.ts"],"sourcesContent":["// Core\nexport { MaciClient } from './maci';\nexport { Http } from './libs/http';\n\n// Query Types\nexport {\n Round,\n UserAccount,\n Circuit,\n Operator,\n Proof,\n Transaction,\n} from './libs/query';\n\n// Crypto\nexport * from './libs/crypto';\n\n// Types\nexport * from './types';\nexport type * from './types';\n\n// Constants\nexport { circuits, getDefaultParams, type NetworkConfig } from './libs/const';\n\n// Utils\nexport { stringizing, bigInt2Buffer } from './libs/crypto/bigintUtils';\nexport { isValidAddress } from './utils';\nexport { getAMaciRoundCircuitFee } from './libs/contract/utils';\n","export class BaseError extends Error {\n constructor(\n message: string,\n public code: number,\n public type: string\n ) {\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 async fetchAllGraphqlPages<T>(query: string, variables: any): Promise<T[]> {\n let hasNextPage = true;\n let offset = 0;\n const limit = 100; // Adjust the limit as needed\n const allData: T[] = [];\n\n while (hasNextPage) {\n const response = await this.fetch(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: { ...variables, limit, offset },\n }),\n }).then((res) => res.json());\n\n const key = Object.keys(response.data)[0];\n\n const { nodes, pageInfo } = response.data[key];\n allData.push(...nodes);\n hasNextPage = pageInfo.hasNextPage;\n offset += limit;\n }\n\n return allData;\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 ERROR_INVALID_FIELDS: 'ERROR_INVALID_FIELDS',\n ERROR_CLAIM_INFOS_NOT_FOUND: 'ERROR_CLAIM_INFOS_NOT_FOUND',\n} as const;\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 saasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n saasCodeId: number;\n oracleWhitelistBackendPubkey: string;\n oracleFeegrantOperator: string;\n oracleCodeIds: string[];\n saasCodeIds: 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 saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n maciCodeId: 106,\n // oracleCodeId: 116,// 9-4-3-625\n oracleCodeId: 119, // 6-3-3-125\n saasCodeId: 152,\n oracleWhitelistBackendPubkey:\n 'A61YtCv2ibMZmDeM02nEElil8wlHx1tLKogBk5dPgf/Q',\n oracleFeegrantOperator: 'dora16s9tljk8dy9ae335yvyzlm8gvkypx9228q8pq8',\n oracleCodeIds: ['101', '116', '117', '119'],\n saasCodeIds: ['152'],\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 saasAddress:\n 'dora1dgnszrwnwxgr5djprrr6w4q45z8s3ghsew869g6tlp4ruqah39nqnemjya',\n maciCodeId: 134,\n // oracleCodeId: 113, // 9-4-3-625\n oracleCodeId: 123, // 6-3-3-125\n saasCodeId: 152,\n oracleWhitelistBackendPubkey:\n 'AoYo/zENN/JquagPdG0/NMbWBBYxOM8BVN677mBXJKJQ',\n oracleFeegrantOperator: 'dora1xp0twdzsdeq4qg3c64v66552deax8zmvq4zw78',\n oracleCodeIds: ['102', '105', '108', '110', '113', '115', '123'],\n saasCodeIds: ['152'],\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';\nimport { packPubKey, PubKey } from 'src/libs/crypto';\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\n/**\n * Converts a hexadecimal string to a BigInt.\n * @param hexString - The hexadecimal string to convert.\n * @returns The BigInt representation of the input.\n */\nexport function hexToBigInt(hexString: string) {\n return BigInt('0x' + hexString);\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\nexport function transformPubkey(oldPubkey: string) {\n const x = oldPubkey.slice(0, 64);\n const y = oldPubkey.slice(64);\n\n const pubkey: PubKey = [hexToBigInt(x), hexToBigInt(y)];\n console.log(pubkey);\n console.log([hexToDecimalString(x), hexToDecimalString(y)]);\n const packedPubkey = packPubKey(pubkey);\n return packedPubkey;\n}\n","import CryptoJS from 'crypto-js';\nimport { bigInt2Buffer, stringizing } from './bigintUtils';\nimport { poseidonEncrypt } from '@zk-kit/poseidon-cipher';\nimport * as BabyJub from '@zk-kit/baby-jubjub';\nimport { Point } from '@zk-kit/baby-jubjub';\nimport {\n derivePublicKey,\n signMessage,\n deriveSecretScalar,\n} from '@zk-kit/eddsa-poseidon';\n\nimport { solidityPackedSha256 } from 'ethers';\n\nimport { mulPointEscalar } from '@zk-kit/baby-jubjub';\nimport { packPublicKey, unpackPublicKey } from '@zk-kit/eddsa-poseidon';\n\nimport { EcdhSharedKey, Keypair, PrivKey, PubKey } from './types';\nimport { poseidon } from './hashing';\nimport { Tree } from './tree';\nimport { genRandomBabyJubValue } from './babyjub';\n\nconst SNARK_FIELD_SIZE =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\n/**\n * Generate a private key\n * @returns A random seed for a private key.\n */\nexport const genPrivKey = (): bigint =>\n BigInt(`0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`);\n\n/**\n * Generate a random value\n * @returns A BabyJub-compatible salt.\n */\nexport const genRandomSalt = (): bigint => genRandomBabyJubValue();\n\n/**\n * An internal function which formats a random private key to be compatible\n * with the BabyJub curve. This is the format which should be passed into the\n * PubKey and other circuits.\n * @param privKey A private key generated using genPrivKey()\n * @returns A BabyJub-compatible private key.\n */\nexport const formatPrivKeyForBabyJub = (privKey: PrivKey): bigint =>\n BigInt(deriveSecretScalar(bigInt2Buffer(privKey)));\n\n/**\n * Losslessly reduces the size of the representation of a public key\n * @param pubKey The public key to pack\n * @returns A packed public key\n */\nexport const packPubKey = (pubKey: PubKey): bigint =>\n BigInt(packPublicKey(pubKey));\n\n/**\n * Restores the original PubKey from its packed representation\n * @param packed The value to unpack\n * @returns The unpacked public key\n */\nexport const unpackPubKey = (packed: bigint): PubKey => {\n const pubKey = unpackPublicKey(packed);\n return pubKey.map((x) => BigInt(x)) as PubKey;\n};\n\n/**\n * @param privKey A private key generated using genPrivKey()\n * @returns A public key associated with the private key\n */\nexport const genPubKey = (privKey: PrivKey): PubKey => {\n const key = derivePublicKey(bigInt2Buffer(privKey));\n return [BigInt(key[0]), BigInt(key[1])];\n};\n\n/**\n * Generates a keypair.\n * @returns a keypair\n */\nexport const genKeypair = (pkey?: PrivKey): Keypair => {\n const privKey = pkey ? pkey % SNARK_FIELD_SIZE : genPrivKey();\n const pubKey = genPubKey(privKey);\n const formatedPrivKey = formatPrivKeyForBabyJub(privKey);\n\n const keypair: Keypair = { privKey, pubKey, formatedPrivKey };\n\n return keypair;\n};\n\n/**\n * Generates an Elliptic-Curve Diffie–Hellman (ECDH) shared key given a private\n * key and a public key.\n * @param privKey A private key generated using genPrivKey()\n * @param pubKey A public key generated using genPubKey()\n * @returns The ECDH shared key.\n */\nexport const genEcdhSharedKey = (\n privKey: PrivKey,\n pubKey: PubKey\n): EcdhSharedKey =>\n mulPointEscalar(pubKey as Point<bigint>, formatPrivKeyForBabyJub(privKey));\n\nexport const genMessageFactory =\n (\n stateIdx: number,\n signPriKey: PrivKey,\n signPubKey: PubKey,\n coordPubKey: PubKey\n ) =>\n (\n encPriKey: PrivKey,\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(\n `0x${CryptoJS.lib.WordArray.random(7).toString(CryptoJS.enc.Hex)}`\n );\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 = signMessage(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 keypair: Keypair,\n coordPubKey: PubKey,\n plan: [number, number][]\n) => {\n const genMessage = genMessageFactory(\n stateIdx,\n BigInt(keypair.privKey),\n keypair.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 BigInt(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 = genRandomSalt()\n) => {\n const d1 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(BabyJub.Base8, randomVal),\n ciphertext.c1 as Point<bigint>\n );\n\n const d2 = BabyJub.addPoint(\n BabyJub.mulPointEscalar(pubKey as Point<bigint>, randomVal),\n ciphertext.c2 as Point<bigint>\n );\n\n return {\n d1,\n d2,\n } as { d1: bigint[]; d2: bigint[] };\n};\n\nexport const genAddKeyInput = (\n depth: number,\n {\n coordPubKey,\n oldKey,\n deactivates,\n }: {\n coordPubKey: PubKey;\n oldKey: Keypair;\n deactivates: bigint[][];\n }\n) => {\n const sharedKeyHash = poseidon(genEcdhSharedKey(oldKey.privKey, coordPubKey));\n\n const randomVal = genRandomSalt();\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([\n BigInt(oldKey.formatedPrivKey),\n 1444992409218394441042n,\n ]);\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\n// LIB\nfunction randomUint256() {\n const buffer = [];\n for (let i = 0; i < 64; i++) {\n buffer.push(\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0')\n );\n }\n return buffer.join('');\n}\n\nexport const genRandomKey = () => {\n const key = [\n randomUint256(),\n randomUint256(),\n randomUint256(),\n randomUint256(),\n ].join('');\n return ['-----BEGIN MACI KEY-----', key, '-----END MACI KEY-----'].join('\\n');\n};\n","type 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 const 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","import { poseidonPerm } from '@zk-kit/poseidon-cipher';\nimport { solidityPackedSha256 } from 'ethers';\n\nimport assert from 'assert';\n\nimport type { Plaintext, PoseidonFuncs } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * Hash an array of uint256 values the same way that the EVM does.\n * @param input - the array of values to hash\n * @returns a EVM compatible sha256 hash\n */\nexport const sha256Hash = (input: bigint[]): bigint => {\n const types: string[] = [];\n\n input.forEach(() => {\n types.push('uint256');\n });\n\n return (\n BigInt(\n solidityPackedSha256(\n types,\n input.map((x) => x.toString())\n )\n ) % SNARK_FIELD_SIZE\n );\n};\n\n/**\n * Generate the poseidon hash of the inputs provided\n * @param inputs The inputs to hash\n * @returns the hash of the inputs\n */\nexport const poseidon = (inputs: bigint[]): bigint =>\n poseidonPerm([BigInt(0), ...inputs.map((x) => BigInt(x))])[0];\n\n/**\n * Hash up to 2 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT3 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 2);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 3 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT4 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 3);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 4 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT5 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 4);\n return poseidon(inputs);\n};\n\n/**\n * Hash up to 5 elements\n * @param inputs The elements to hash\n * @returns the hash of the elements\n */\nexport const poseidonT6 = (inputs: bigint[]): bigint => {\n assert(inputs.length === 5);\n return poseidon(inputs);\n};\n\n/**\n * Hash two BigInts with the Poseidon hash function\n * @param left The left-hand element to hash\n * @param right The right-hand element to hash\n * @returns The hash of the two elements\n */\nexport const hashLeftRight = (left: bigint, right: bigint): bigint =>\n poseidonT3([left, right]);\n\n// hash functions\nconst funcs: PoseidonFuncs = {\n 2: poseidonT3,\n 3: poseidonT4,\n 4: poseidonT5,\n 5: poseidonT6,\n};\n\n/**\n * Hash up to N elements\n * @param numElements The number of elements to hash\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hashN = (numElements: number, elements: Plaintext): bigint => {\n const elementLength = elements.length;\n\n if (elements.length > numElements) {\n throw new TypeError(\n `the length of the elements array should be at most ${numElements}; got ${elements.length}`\n );\n }\n const elementsPadded = elements.slice();\n\n if (elementLength < numElements) {\n for (let i = elementLength; i < numElements; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return funcs[numElements](elementsPadded);\n};\n\n// hash functions\nexport const hashLeanIMT = (a: bigint, b: bigint): bigint => hashN(2, [a, b]);\nexport const hash2 = (elements: Plaintext): bigint => hashN(2, elements);\nexport const hash3 = (elements: Plaintext): bigint => hashN(3, elements);\nexport const hash4 = (elements: Plaintext): bigint => hashN(4, elements);\nexport const hash5 = (elements: Plaintext): bigint => hashN(5, elements);\n\n/**\n * A convenience function to use Poseidon to hash a Plaintext with\n * no more than 13 elements\n * @param elements The elements to hash\n * @returns The hash of the elements\n */\nexport const hash12 = (elements: Plaintext): bigint => {\n const max = 12;\n const elementLength = elements.length;\n\n if (elementLength > max) {\n throw new TypeError(\n `the length of the elements array should be at most ${max}; got ${elements.length}`\n );\n }\n\n const elementsPadded = elements.slice();\n\n if (elementLength < max) {\n for (let i = elementLength; i < max; i += 1) {\n elementsPadded.push(BigInt(0));\n }\n }\n\n return poseidonT5([\n poseidonT6(elementsPadded.slice(0, 5)),\n poseidonT6(elementsPadded.slice(5, 10)),\n elementsPadded[10],\n elementsPadded[11],\n ]);\n};\n\n/**\n * Hash a single BigInt with the Poseidon hash function\n * @param preImage The element to hash\n * @returns The hash of the element\n */\nexport const hashOne = (preImage: bigint): bigint =>\n poseidonT3([preImage, BigInt(0)]);\n","import { r } from '@zk-kit/baby-jubjub';\nimport { keccak256, toUtf8Bytes } from 'ethers';\n\nimport assert from 'assert';\n\nexport const SNARK_FIELD_SIZE = r;\n\n// A nothing-up-my-sleeve zero value\n// Should be equal to 8370432830353022751713833565135785980866757267633941821328460903436894336785\nexport const NOTHING_UP_MY_SLEEVE =\n BigInt(keccak256(toUtf8Bytes('Maci'))) % SNARK_FIELD_SIZE;\n\nassert(\n NOTHING_UP_MY_SLEEVE ===\n BigInt(\n '8370432830353022751713833565135785980866757267633941821328460903436894336785'\n )\n);\n\nexport const PAD_KEY_HASH = BigInt(\n '1309255631273308531193241901289907343161346846555918942743921933037802809814'\n);\n","import { poseidon } from './hashing';\n\nexport class Tree {\n public readonly DEPTH: number;\n public readonly HEIGHT: number;\n public readonly DEGREE: number;\n public readonly LEAVES_COUNT: number;\n public readonly LEAVES_IDX_0: number;\n public readonly NODES_COUNT: number;\n\n protected nodes: bigint[] = [];\n protected zeros: bigint[] = [];\n\n constructor(degree: number, depth: number, zero: bigint) {\n this.DEPTH = depth;\n this.HEIGHT = depth + 1;\n this.DEGREE = degree;\n\n this.LEAVES_COUNT = degree ** depth;\n this.LEAVES_IDX_0 = (degree ** depth - 1) / (degree - 1);\n this.NODES_COUNT = (degree ** (depth + 1) - 1) / (degree - 1);\n\n this.initZero(zero);\n this.initNodes();\n }\n\n get root() {\n return this.nodes[0];\n }\n\n initZero(zero: bigint) {\n const zeros = new Array(this.HEIGHT);\n zeros[0] = zero;\n for (let i = 1; i < zeros.length; i++) {\n const children = new Array(this.DEGREE).fill(zeros[i - 1]);\n zeros[i] = poseidon(children);\n }\n this.zeros = zeros;\n }\n\n initNodes() {\n const DEGREE = this.DEGREE;\n\n const nodes = new Array(this.NODES_COUNT);\n\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = 0; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n }\n\n this.nodes = nodes;\n }\n\n initLeaves(leaves: bigint[]) {\n const DEGREE = this.DEGREE;\n for (let i = 0; i < leaves.length; i++) {\n if (i >= this.LEAVES_COUNT) {\n console.error('OVERFLOW');\n break;\n }\n this.nodes[this.LEAVES_IDX_0 + i] = BigInt(leaves[i]);\n }\n\n for (let d = this.DEPTH - 1; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n for (let i = 0; i < size / DEGREE; i++) {\n const start = (idx0 + i) * DEGREE + 1;\n const children = this.nodes.slice(start, start + DEGREE);\n this.nodes[idx0 + i] = poseidon(children);\n }\n }\n }\n\n leaf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n return this.nodes[nodeIdx];\n }\n\n leaves() {\n return this.nodes.slice(this.LEAVES_IDX_0);\n }\n\n updateLeaf(leafIdx: number, leaf: bigint) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n const nodeIdx = this.LEAVES_IDX_0 + leafIdx;\n this.nodes[nodeIdx] = leaf;\n\n this._update(nodeIdx);\n }\n\n pathIdxOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathIdx: bigint[] = [];\n\n for (let i = 0; i < this.DEPTH; i++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n pathIdx.push(BigInt(idx - childrenIdx0));\n\n idx = parentIdx;\n }\n\n return pathIdx;\n }\n\n pathElementOf(leafIdx: number) {\n if (leafIdx > this.LEAVES_COUNT || leafIdx < 0) {\n throw new Error('wrong leaf index');\n }\n let idx = this.LEAVES_IDX_0 + leafIdx;\n const pathElement: bigint[][] = [];\n\n for (let h = 0; h < this.DEPTH; h++) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n\n const el: bigint[] = [];\n for (let i = childrenIdx0; i < childrenIdx0 + this.DEGREE; i++) {\n if (i === idx) continue;\n el.push(this.nodes[i]);\n }\n\n pathElement.push(el);\n\n idx = parentIdx;\n }\n\n return pathElement;\n }\n\n subTree(length: number) {\n const subTree = new Tree(this.DEGREE, this.DEPTH, this.zeros[0]);\n const nodes = [...this.nodes];\n\n const DEGREE = this.DEGREE;\n let tail = length;\n for (let d = this.DEPTH; d >= 0; d--) {\n const size = DEGREE ** d;\n const idx0 = (DEGREE ** d - 1) / (DEGREE - 1);\n const zero = this.zeros[this.DEPTH - d];\n for (let i = tail; i < size; i++) {\n nodes[idx0 + i] = zero;\n }\n tail = Math.ceil(tail / DEGREE);\n }\n\n subTree.nodes = nodes;\n subTree._update(this.LEAVES_IDX_0 + length - 1);\n\n return subTree;\n }\n\n protected _update(nodeIdx: number) {\n let idx = nodeIdx;\n while (idx > 0) {\n const parentIdx = Math.floor((idx - 1) / this.DEGREE);\n const childrenIdx0 = parentIdx * this.DEGREE + 1;\n this.nodes[parentIdx] = poseidon(\n this.nodes.slice(childrenIdx0, childrenIdx0 + 5)\n );\n\n idx = parentIdx;\n }\n }\n}\n","import assert from 'assert';\nimport CryptoJS from 'crypto-js';\n\nimport type { PrivKey } from './types';\n\nimport { SNARK_FIELD_SIZE } from './constants';\n\n/**\n * @notice A class representing a point on the first group (G1)\n * of the Jubjub curve\n */\nexport class G1Point {\n x: bigint;\n\n y: bigint;\n\n /**\n * Create a new instance of G1Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint, y: bigint) {\n assert(x < SNARK_FIELD_SIZE && x >= 0, 'G1Point x out of range');\n assert(y < SNARK_FIELD_SIZE && y >= 0, 'G1Point y out of range');\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G1Point): boolean {\n return this.x === pt.x && this.y === pt.y;\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string; y: string } {\n return {\n x: this.x.toString(),\n y: this.y.toString(),\n };\n }\n}\n\n/**\n * @notice A class representing a point on the second group (G2)\n * of the Jubjub curve. This is usually an extension field of the\n * base field of the curve.\n */\nexport class G2Point {\n x: bigint[];\n\n y: bigint[];\n\n /**\n * Create a new instance of G2Point\n * @param x the x coordinate\n * @param y the y coordinate\n */\n constructor(x: bigint[], y: bigint[]) {\n this.checkPointsRange(x, 'x');\n this.checkPointsRange(y, 'y');\n\n this.x = x;\n this.y = y;\n }\n\n /**\n * Check whether two points are equal\n * @param pt the point to compare with\n * @returns whether they are equal or not\n */\n equals(pt: G2Point): boolean {\n return (\n this.x[0] === pt.x[0] &&\n this.x[1] === pt.x[1] &&\n this.y[0] === pt.y[0] &&\n this.y[1] === pt.y[1]\n );\n }\n\n /**\n * Return the point as a contract param in the form of an object\n * @returns the point as a contract param\n */\n asContractParam(): { x: string[]; y: string[] } {\n return {\n x: this.x.map((n) => n.toString()),\n y: this.y.map((n) => n.toString()),\n };\n }\n\n /**\n * Check whether the points are in range\n * @param x the x coordinate\n * @param type the type of the coordinate\n */\n private checkPointsRange(x: bigint[], type: 'x' | 'y') {\n assert(\n x.every((n) => n < SNARK_FIELD_SIZE && n >= 0),\n `G2Point ${type} out of range`\n );\n }\n}\n\n// /**\n// * Returns a BabyJub-compatible random value. We create it by first generating\n// * a random value (initially 256 bits large) modulo the snark field size as\n// * described in EIP197. This results in a key size of roughly 253 bits and no\n// * more than 254 bits. To prevent modulo bias, we then use this efficient\n// * algorithm:\n// * http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/crypt/arc4random_uniform.c\n// * @returns A BabyJub-compatible random value.\n// */\n// export const genRandomBabyJubValue = (): bigint => {\n// // Prevent modulo bias\n// // const lim = BigInt('0x10000000000000000000000000000000000000000000000000000000000000000')\n// // const min = (lim - SNARK_FIELD_SIZE) % SNARK_FIELD_SIZE\n// const min = BigInt(\n// '6350874878119819312338956282401532410528162663560392320966563075034087161851'\n// );\n\n// let privKey: PrivKey = SNARK_FIELD_SIZE;\n\n// do {\n// const rand = BigInt(\n// `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n// );\n\n// if (rand >= min) {\n// privKey = rand % SNARK_FIELD_SIZE;\n// }\n// } while (privKey >= SNARK_FIELD_SIZE);\n// privKey =\n// return privKey;\n// };\n\nexport const genRandomBabyJubValue = () => {\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(\n `0x${CryptoJS.lib.WordArray.random(32).toString(CryptoJS.enc.Hex)}`\n );\n\n if (rand >= min) {\n break;\n }\n }\n\n // const privKey = rand % SNARK_FIELD_SIZE;\n const privKey = rand % 2n ** 253n;\n return privKey;\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 { genKeypair } from './keys';\nimport { SignResult } from './types';\n\nexport async function signMessage(\n signer: OfflineSigner,\n address: string,\n message: string,\n network: 'mainnet' | 'testnet'\n): Promise<SignResult> {\n const accounts = await signer.getAccounts();\n const account = accounts.find((acc) => acc.address === address);\n const chainId = getDefaultParams(network).chainId;\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,\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: 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\nexport async function genKeypairFromSignature(signature: string) {\n const sign = BigInt('0x' + Buffer.from(signature, 'base64').toString('hex'));\n\n return genKeypair(sign);\n}\n\nexport async function genKeypairFromSign({\n signer,\n address,\n network,\n}: {\n signer: OfflineSigner;\n address?: string;\n network: 'mainnet' | 'testnet';\n}) {\n if (!address) {\n [{ address }] = await signer.getAccounts();\n }\n\n const sig = await signMessage(\n signer,\n address,\n 'Generate_MACI_Private_Key',\n network\n );\n\n return genKeypairFromSignature(sig.signature);\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 SelectiveRoundResponse,\n SelectiveRoundGraphqlResponse,\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 /**\n * Get round information with selective fields\n * @param address Round address\n * @param fields Array of fields to return, returns all fields if empty\n * @returns Round information response\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\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 defaultFields = [\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 // 'funds',\n ];\n\n if (fields && fields.length > 0) {\n const invalidFields = fields.filter(\n (field) => !defaultFields.includes(field)\n );\n if (invalidFields.length > 0) {\n return {\n code: 400,\n error: {\n message: `Invalid fields: ${invalidFields.join(', ')}`,\n type: ERROR.ERROR_INVALID_FIELDS,\n },\n };\n }\n }\n\n const selectedFields =\n fields && fields.length > 0 ? fields : defaultFields;\n\n const fieldString = selectedFields.join('\\n ');\n\n const ROUND_QUERY = `query {\n round(id: \"${address}\") {\n ${fieldString}\n }\n }`;\n\n const response =\n await this.http.fetchGraphql<SelectiveRoundGraphqlResponse>(\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 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 {\n DeactivateMessage,\n SignUpEventsGraphqlResponse,\n SignUpEventsResponse,\n} 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 async fetchAllDeactivateLogs(contractAddress: string) {\n const DEACTIVATE_MESSAGE_QUERY = `query ($limit: Int, $offset: Int) {\n deactivateMessages(\n first: $limit,\n offset: $offset,\n orderBy: [BLOCK_HEIGHT_ASC],\n filter: {\n maciContractAddress: { \n equalTo: \"${contractAddress}\" \n },\n }\n ) {\n\t totalCount\n\t pageInfo {\n endCursor\n hasNextPage\n\t }\n nodes {\n id\n blockHeight\n timestamp\n txHash\n deactivateMessage\n maciContractAddress\n maciOperator\n }\n }\n}`;\n const ds = await this.http.fetchAllGraphqlPages<DeactivateMessage>(\n DEACTIVATE_MESSAGE_QUERY,\n {}\n );\n\n return ds.reduce(\n (s, c) => [...s, ...JSON.parse(c.deactivateMessage)],\n [] as string[][]\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 SelectiveRoundResponse,\n DeactivateMessage,\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 getRoundWithFields\n * @description Get a round by its address with selective fields.\n * @param {string} address - The address of the round.\n * @param {string[]} [fields] - The fields to retrieve.\n * @returns {Promise<SelectiveRoundResponse>} The round response.\n */\n async getRoundWithFields(\n address: string,\n fields?: string[]\n ): Promise<SelectiveRoundResponse> {\n return await this.round.getRoundWithFields(address, fields);\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 async fetchAllDeactivateLogs(\n contractAddress: string\n ): Promise<DeactivateMessage[]> {\n return await this.event.fetchAllDeactivateLogs(contractAddress);\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 { SigningCosmWasmClient } 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';\nimport { SaasClient } from './ts/Saas.client';\n\nconst defaultSigningClientOptions: SigningStargateClientOptions = {\n broadcastPollIntervalMs: 8_000,\n broadcastTimeoutMs: 64_000,\n gasPrice: GasPrice.fromString('10000000000peaka'),\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 createSaasClientBy({\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 SaasClient(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 WhitelistBase,\n WhitelistBaseConfig,\n ExecuteMsg,\n MessageData,\n Groth16ProofType,\n QueryMsg,\n Boolean,\n DelayType,\n DelayRecords,\n DelayRecord,\n PeriodStatus,\n Period,\n Uint128,\n ArrayOfString,\n Whitelist,\n WhitelistConfig,\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 canSignUp: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isWhiteList: ({ sender }: { sender: Addr }) => Promise<Boolean>;\n isRegister: ({ 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 getDelayRecords: () => Promise<DelayRecords>;\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.canSignUp = this.canSignUp.bind(this);\n this.isWhiteList = this.isWhiteList.bind(this);\n this.isRegister = this.isRegister.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 this.getDelayRecords = this.getDelayRecords.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 canSignUp = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n can_sign_up: {\n sender,\n },\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 isRegister = async ({ sender }: { sender: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_register: {\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 getDelayRecords = async (): Promise<DelayRecords> => {\n return this.client.queryContractSmart(this.contractAddress, {\n get_delay_records: {},\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: WhitelistBase;\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 claim: (\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.claim = this.claim.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: WhitelistBase;\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 claim = 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 claim: {},\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","/**\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 Uint128,\n Uint256,\n Timestamp,\n Uint64,\n PubKey,\n RoundInfo,\n QueryMsg,\n Config,\n Boolean,\n NullableMaciContractInfo,\n MaciContractInfo,\n ArrayOfMaciContractInfo,\n ArrayOfOperatorInfo,\n OperatorInfo,\n} from './Saas.types';\nexport interface SaasReadOnlyInterface {\n contractAddress: string;\n config: () => Promise<Config>;\n operators: () => Promise<ArrayOfOperatorInfo>;\n isOperator: ({ address }: { address: Addr }) => Promise<Boolean>;\n balance: () => Promise<Uint128>;\n maciContracts: ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n operatorMaciContracts: ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }) => Promise<ArrayOfMaciContractInfo>;\n maciContract: ({\n contractId,\n }: {\n contractId: number;\n }) => Promise<NullableMaciContractInfo>;\n oracleMaciCodeId: () => Promise<Uint64>;\n}\nexport class SaasQueryClient implements SaasReadOnlyInterface {\n client: CosmWasmClient;\n contractAddress: string;\n constructor(client: CosmWasmClient, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n this.config = this.config.bind(this);\n this.operators = this.operators.bind(this);\n this.isOperator = this.isOperator.bind(this);\n this.balance = this.balance.bind(this);\n this.maciContracts = this.maciContracts.bind(this);\n this.operatorMaciContracts = this.operatorMaciContracts.bind(this);\n this.maciContract = this.maciContract.bind(this);\n this.oracleMaciCodeId = this.oracleMaciCodeId.bind(this);\n }\n config = async (): Promise<Config> => {\n return this.client.queryContractSmart(this.contractAddress, {\n config: {},\n });\n };\n operators = async (): Promise<ArrayOfOperatorInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operators: {},\n });\n };\n isOperator = async ({ address }: { address: Addr }): Promise<Boolean> => {\n return this.client.queryContractSmart(this.contractAddress, {\n is_operator: {\n address,\n },\n });\n };\n balance = async (): Promise<Uint128> => {\n return this.client.queryContractSmart(this.contractAddress, {\n balance: {},\n });\n };\n maciContracts = async ({\n limit,\n startAfter,\n }: {\n limit?: number;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contracts: {\n limit,\n start_after: startAfter,\n },\n });\n };\n operatorMaciContracts = async ({\n limit,\n operator,\n startAfter,\n }: {\n limit?: number;\n operator: Addr;\n startAfter?: number;\n }): Promise<ArrayOfMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n operator_maci_contracts: {\n limit,\n operator,\n start_after: startAfter,\n },\n });\n };\n maciContract = async ({\n contractId,\n }: {\n contractId: number;\n }): Promise<NullableMaciContractInfo> => {\n return this.client.queryContractSmart(this.contractAddress, {\n maci_contract: {\n contract_id: contractId,\n },\n });\n };\n oracleMaciCodeId = async (): Promise<Uint64> => {\n return this.client.queryContractSmart(this.contractAddress, {\n oracle_maci_code_id: {},\n });\n };\n}\nexport interface SaasInterface extends SaasReadOnlyInterface {\n contractAddress: string;\n sender: string;\n updateConfig: (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n addOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n removeOperator: (\n {\n operator,\n }: {\n operator: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n deposit: (\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n withdraw: (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n updateOracleMaciCodeId: (\n {\n codeId,\n }: {\n codeId: number;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n createOracleMaciRound: (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: string;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setRoundInfo: (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\n roundInfo: RoundInfo;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n setVoteOptionsMap: (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\n voteOptionMap: string[];\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n grantToVoter: (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\n grantee: Addr;\n },\n fee?: number | StdFee | 'auto',\n memo?: string,\n _funds?: Coin[]\n ) => Promise<ExecuteResult>;\n}\nexport class SaasClient extends SaasQueryClient implements SaasInterface {\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.updateConfig = this.updateConfig.bind(this);\n this.addOperator = this.addOperator.bind(this);\n this.removeOperator = this.removeOperator.bind(this);\n this.deposit = this.deposit.bind(this);\n this.withdraw = this.withdraw.bind(this);\n this.updateOracleMaciCodeId = this.updateOracleMaciCodeId.bind(this);\n this.createOracleMaciRound = this.createOracleMaciRound.bind(this);\n this.setRoundInfo = this.setRoundInfo.bind(this);\n this.setVoteOptionsMap = this.setVoteOptionsMap.bind(this);\n this.grantToVoter = this.grantToVoter.bind(this);\n }\n updateConfig = async (\n {\n admin,\n denom,\n registryContract,\n }: {\n admin?: Addr;\n denom?: string;\n registryContract?: 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 update_config: {\n admin,\n denom,\n registry_contract: registryContract,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n addOperator = 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 add_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n removeOperator = 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 remove_operator: {\n operator,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n deposit = 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 deposit: {},\n },\n fee,\n memo,\n _funds\n );\n };\n withdraw = async (\n {\n amount,\n recipient,\n }: {\n amount: Uint128;\n recipient?: 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 withdraw: {\n amount,\n recipient,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n updateOracleMaciCodeId = async (\n {\n codeId,\n }: {\n codeId: 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_oracle_maci_code_id: {\n code_id: codeId,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n createOracleMaciRound = async (\n {\n certificationSystem,\n circuitType,\n coordinator,\n endTime,\n maxVoters,\n roundInfo,\n startTime,\n voteOptionMap,\n whitelistBackendPubkey,\n }: {\n certificationSystem: Uint256;\n circuitType: Uint256;\n coordinator: PubKey;\n endTime: Timestamp;\n maxVoters: number;\n roundInfo: RoundInfo;\n startTime: Timestamp;\n voteOptionMap: string[];\n whitelistBackendPubkey: 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 create_oracle_maci_round: {\n certification_system: certificationSystem,\n circuit_type: circuitType,\n coordinator,\n end_time: endTime,\n max_voters: maxVoters.toString(),\n round_info: roundInfo,\n start_time: startTime,\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setRoundInfo = async (\n {\n contractAddr,\n roundInfo,\n }: {\n contractAddr: string;\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 contract_addr: contractAddr,\n round_info: roundInfo,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n setVoteOptionsMap = async (\n {\n contractAddr,\n voteOptionMap,\n }: {\n contractAddr: string;\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 contract_addr: contractAddr,\n vote_option_map: voteOptionMap,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n grantToVoter = async (\n {\n baseAmount,\n contractAddr,\n grantee,\n }: {\n baseAmount: Uint128;\n contractAddr: string;\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_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddr,\n grantee,\n },\n },\n fee,\n memo,\n _funds\n );\n };\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { Keypair } from '../libs/crypto';\nimport { FetchOptions } from '../libs/http/http';\nexport type * from '../libs/contract/types';\nexport type * from '../libs/crypto/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 signer?: OfflineSigner;\n network: 'mainnet' | 'testnet';\n rpcEndpoint?: string;\n restEndpoint?: string;\n apiEndpoint?: string;\n certificateApiEndpoint?: string;\n registryAddress?: string;\n saasAddress?: string;\n maciCodeId?: number;\n oracleCodeId?: number;\n saasOracleCodeId?: number;\n customFetch?: typeof fetch;\n defaultOptions?: FetchOptions;\n feegrantOperator?: string;\n whitelistBackendPubkey?: string;\n maciKeypair?: Keypair;\n secretKey?: string;\n mnemonic?: string;\n};\n\nexport type ContractParams = {\n network: 'mainnet' | 'testnet';\n rpcEndpoint: string;\n registryAddress: string;\n saasAddress: string;\n maciCodeId: number;\n oracleCodeId: number;\n saasOracleCodeId: 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 // funds: string;\n operatorLogoUrl?: string;\n operatorMoniker?: string;\n resultsList?: {\n v: number;\n v2: number;\n }[];\n};\n\nexport type SelectiveRoundType = Partial<RoundType>;\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 SelectiveRoundResponse =\n | SuccessResponse<{\n round: SelectiveRoundType;\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\n/**\n * GraphQL response type for selective round fields\n */\nexport type SelectiveRoundGraphqlResponse = {\n data: {\n round: SelectiveRoundType;\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\nexport type DeactivateMessage = {\n id: string;\n blockHeight: string;\n timestamp: string;\n txHash: string;\n deactivateMessage: string; // '[[\"0\", \"1\", \"2\", \"3\", \"4\"]]'\n maciContractAddress: string;\n maciOperator: string;\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\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(\n network: 'mainnet' | 'testnet',\n maxVoter: number,\n maxOption: number\n) {\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 if (network === 'mainnet') {\n requiredFee.amount = '20000000000000000000';\n } else {\n requiredFee.amount = '20000000000000000000';\n }\n } else if (maxVoter <= 625 && maxOption <= 25) {\n // state_tree_depth: 4\n // vote_option_tree_depth: 2\n if (network === 'mainnet') {\n requiredFee.amount = '750000000000000000000';\n } else {\n requiredFee.amount = '750000000000000000000';\n }\n } else {\n throw new Error('Number of voters or options is too large.');\n }\n\n return requiredFee;\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport { ContractParams } from '../../types';\nimport {\n createAMaciClientBy,\n createContractClientByWallet,\n createMaciClientBy,\n createOracleMaciClientBy,\n createRegistryClientBy,\n createSaasClientBy,\n} from './config';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './types';\nimport { getAMaciRoundCircuitFee, getContractParams } from './utils';\nimport { QTR_LIB } from './vars';\nimport { MaciRoundType, MaciCertSystemType } from '../../types';\nimport { unpackPubKey } from '../crypto';\nimport { StdFee, GasPrice, calculateFee } from '@cosmjs/stargate';\n\nexport const prefix = 'dora';\n\nexport class Contract {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public registryAddress: string;\n public saasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public saasOracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n constructor({\n network,\n rpcEndpoint,\n registryAddress,\n saasAddress,\n maciCodeId,\n oracleCodeId,\n saasOracleCodeId,\n feegrantOperator,\n whitelistBackendPubkey,\n }: ContractParams) {\n this.network = network;\n this.rpcEndpoint = rpcEndpoint;\n this.registryAddress = registryAddress;\n this.saasAddress = saasAddress;\n this.maciCodeId = maciCodeId;\n this.oracleCodeId = oracleCodeId;\n this.saasOracleCodeId = saasOracleCodeId;\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 fee = 'auto',\n }: CreateAMaciRoundParams & { signer: OfflineSigner }) {\n const start_time = (startVoting.getTime() * 10 ** 6).toString();\n const end_time = (endVoting.getTime() * 10 ** 6).toString();\n const client = await createRegistryClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.registryAddress,\n });\n\n const requiredFee = getAMaciRoundCircuitFee(\n this.network,\n maxVoter,\n maxOption\n );\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 fee,\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 {\n ...res,\n contractAddress,\n };\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 fee = 'auto',\n }: CreateMaciRoundParams & { signer: OfflineSigner }) {\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 [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\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\n const instantiateResponse = await client.instantiate(\n address,\n this.maciCodeId,\n {\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n parameters,\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\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.toString(),\n whitelist,\n circuit_type: maciVoteType,\n certification_system: maciCertSystem,\n qtr_lib: QTR_LIB,\n },\n `[MACI] ${title}`,\n fee\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 maxVoter,\n voteOptionMap,\n circuitType,\n whitelistEcosystem,\n whitelistSnapshotHeight,\n whitelistVotingPowerArgs,\n whitelistBackendPubkey,\n feegrantOperator,\n fee = 'auto',\n }: CreateOracleMaciRoundParams & { signer: OfflineSigner }) {\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 [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n const { maciVoteType, maciCertSystem } = getContractParams(\n MaciRoundType.ORACLE_MACI,\n circuitType,\n MaciCertSystemType.GROTH16,\n 0,\n 0\n );\n\n const instantiateResponse = await client.instantiate(\n address,\n this.oracleCodeId,\n {\n max_voters: maxVoter.toString(),\n round_info: { title, description: description || '', link: link || '' },\n voting_time: {\n start_time,\n end_time,\n },\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n vote_option_map: voteOptionMap,\n whitelist_backend_pubkey: whitelistBackendPubkey\n ? whitelistBackendPubkey\n : 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: feegrantOperator\n ? feegrantOperator\n : this.feegrantOperator,\n },\n `[Oracle MACI] ${title}`,\n fee\n );\n\n return instantiateResponse;\n }\n\n async createSaasOracleMaciRound({\n signer,\n operatorPubkey,\n startVoting,\n endVoting,\n title,\n description,\n link,\n maxVoter,\n voteOptionMap,\n whitelistBackendPubkey,\n }: CreateSaasOracleMaciRoundParams & { signer: OfflineSigner }) {\n const startTime = (startVoting.getTime() * 1_000_000).toString();\n const endTime = (endVoting.getTime() * 1_000_000).toString();\n\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n const [operatorPubkeyX, operatorPubkeyY] = unpackPubKey(\n BigInt(operatorPubkey)\n );\n\n const createResponse = await client.createOracleMaciRound({\n certificationSystem: '0',\n circuitType: '0',\n coordinator: {\n x: operatorPubkeyX.toString(),\n y: operatorPubkeyY.toString(),\n },\n maxVoters: maxVoter,\n roundInfo: {\n title,\n description: description || '',\n link: link || '',\n },\n startTime,\n endTime,\n voteOptionMap,\n whitelistBackendPubkey:\n whitelistBackendPubkey || this.whitelistBackendPubkey,\n });\n\n let contractAddress = '';\n createResponse.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_oracle_maci_round') {\n contractAddress = event.attributes\n .find((attr) => attr.key === 'round_addr')!\n .value.toString();\n }\n }\n });\n return {\n ...createResponse,\n contractAddress,\n };\n }\n\n async setSaasOracleMaciRoundInfo({\n signer,\n contractAddress,\n title,\n description,\n link,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n title: string;\n description: string;\n link: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const roundInfo = {\n title,\n description,\n link,\n };\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_round_info: {\n contract_addr: contractAddress,\n round_info: roundInfo,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n grantFee\n );\n }\n\n return client.setRoundInfo(\n {\n contractAddr: contractAddress,\n roundInfo,\n },\n fee\n );\n }\n\n async setSaasOracleMaciRoundVoteOptions({\n signer,\n contractAddress,\n voteOptionMap,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n voteOptionMap: string[];\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n set_vote_options_map: {\n contract_addr: contractAddress,\n vote_option_map: voteOptionMap,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n grantFee\n );\n }\n\n return client.setVoteOptionsMap(\n {\n contractAddr: contractAddress,\n voteOptionMap,\n },\n fee\n );\n }\n\n async saasGrantToVoter({\n signer,\n baseAmount,\n contractAddress,\n grantee,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n baseAmount: string;\n contractAddress: string;\n grantee: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n grant_to_voter: {\n base_amount: baseAmount,\n contract_addr: contractAddress,\n grantee,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n grantFee\n );\n }\n\n return client.grantToVoter(\n {\n baseAmount,\n contractAddr: contractAddress,\n grantee,\n },\n fee\n );\n }\n\n async addSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n add_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.addOperator({ operator }, grantFee);\n }\n\n return client.addOperator({ operator }, fee);\n }\n\n async removeSaasOperator({\n signer,\n operator,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n operator: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n remove_operator: {\n operator,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.removeOperator({ operator }, grantFee);\n }\n\n return client.removeOperator({ operator }, fee);\n }\n\n async isSaasOperator({\n signer,\n operator,\n }: {\n signer: OfflineSigner;\n operator: string;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n return client.isOperator({ address: operator });\n }\n\n async depositSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n const funds = [\n {\n denom: 'peaka',\n amount: amount,\n },\n ];\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n deposit: {},\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n funds,\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.deposit(grantFee, undefined, funds);\n }\n\n return client.deposit(fee, undefined, funds);\n }\n\n async withdrawSaas({\n signer,\n amount,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n amount: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const client = await createSaasClientBy({\n rpcEndpoint: this.rpcEndpoint,\n wallet: signer,\n contractAddress: this.saasAddress,\n });\n\n if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const [{ address }] = await signer.getAccounts();\n const contractClient = await this.contractClient({ signer });\n const msg = {\n withdraw: {\n amount,\n },\n };\n const gasEstimation = await contractClient.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: this.saasAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: this.saasAddress,\n };\n return client.withdraw({ amount }, grantFee);\n }\n\n return client.withdraw({ amount }, fee);\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 saasClient({\n signer,\n contractAddress,\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n }) {\n return createSaasClientBy({\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 EcosystemsResponse,\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 async listEcosystems(): Promise<EcosystemsResponse> {\n const response = await this.http.fetch(\n `${this.certificateApiEndpoint}/list`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n const signatureData = await response.json();\n\n return signatureData;\n }\n}\n","import { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n Keypair,\n batchGenMessage,\n PubKey,\n stringizing,\n genAddKeyInput,\n} from '../crypto';\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, RoundType } from '../../types';\nimport { SignatureResponse } from '../oracle-certificate/types';\nimport { OracleWhitelistConfig } from '../contract/ts/OracleMaci.types';\nimport { getAMaciRoundCircuitFee } from '../contract/utils';\nimport { Groth16ProofType } from '../contract/ts/Maci.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 network: 'mainnet' | 'testnet';\n public contract: Contract;\n public indexer: Indexer;\n public oracleCertificate: OracleCertificate;\n public maciKeypair: Keypair;\n constructor({\n contract,\n indexer,\n oracleCertificate,\n maciKeypair,\n }: {\n contract: Contract;\n indexer: Indexer;\n oracleCertificate: OracleCertificate;\n maciKeypair: Keypair;\n }) {\n this.network = contract.network;\n this.contract = contract;\n this.indexer = indexer;\n this.oracleCertificate = oracleCertificate;\n this.maciKeypair = maciKeypair;\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\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 async hasFeegrant({\n address,\n contractAddress,\n }: {\n address: string;\n contractAddress: string;\n }): Promise<boolean> {\n try {\n const response = await this.oracleCertificate.feegrantAllowance(\n contractAddress,\n address\n );\n return response.spend_limit.length > 0;\n } catch (error) {\n return false;\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 }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n return round.data.round.voiceCreditAmount;\n } else {\n return '0';\n }\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: certificate.amount,\n certificate: certificate.signature,\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 if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\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.getRoundWithFields(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 as RoundType;\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 queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n const fee = getAMaciRoundCircuitFee(this.network, maxVoter, maxOption);\n return fee;\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 if (!address) {\n address = (await signer.getAccounts())[0].address;\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 maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n // maciKeypair = await this.crypto.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: maciKeypair.pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n fee,\n });\n } else {\n return await this.signupSimple({\n client,\n address,\n pubKey: maciKeypair.pubKey,\n contractAddress,\n gasStation,\n fee,\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 contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n\n if (stateIdx === -1) {\n throw new Error(\n 'State index is not set, Please signup or addNewKey first'\n );\n }\n\n try {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'maciType',\n 'voiceCreditAmount',\n ]);\n\n if (isErrorResponse(round)) {\n throw new Error(\n `Failed to get round info: ${round.error.type} ${round.error.message}`\n );\n }\n\n let voiceCreditBalance;\n if (round.data.round.maciType === 'aMACI') {\n const isWhiteListed = await this.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n\n if (isWhiteListed) {\n const round = await this.indexer.getRoundWithFields(contractAddress, [\n 'voiceCreditAmount',\n ]);\n\n if (!isErrorResponse(round)) {\n if (round.data.round.voiceCreditAmount) {\n voiceCreditBalance = round.data.round.voiceCreditAmount;\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n throw new Error(\n `Failed to query amaci voice credit: ${round.error.type} ${round.error.message}`\n );\n }\n } else {\n voiceCreditBalance = '0';\n }\n } else {\n voiceCreditBalance = await this.getVoiceCreditBalance({\n signer,\n stateIdx,\n contractAddress,\n });\n }\n\n const options = await this.processVoteOptions({\n selectedOptions,\n contractAddress,\n voiceCreditBalance,\n });\n if (!address) {\n address = (await signer.getAccounts())[0].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 maciKeypair,\n operatorCoordPubKey,\n plan\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 fee,\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 fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n payload: {\n msg: bigint[];\n encPubkeys: PubKey;\n }[];\n contractAddress: string;\n gasStation: boolean;\n fee?: StdFee | 'auto' | number;\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 if (gasStation && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(address, msgs, '');\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n } else if (gasStation && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.signAndBroadcast(address, msgs, grantFee);\n }\n\n return client.signAndBroadcast(address, msgs, fee);\n }\n\n async signupSimple({\n client,\n address,\n pubKey,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\n sign_up: {\n pubkey: {\n x: pubKey[0].toString(),\n y: pubKey[1].toString(),\n },\n },\n };\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async signupOracle({\n client,\n address,\n pubKey,\n contractAddress,\n oracleCertificate,\n gasStation,\n fee = 1.8,\n }: {\n client: SigningCosmWasmClient;\n address: string;\n pubKey: PubKey;\n contractAddress: string;\n oracleCertificate: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n const msg = {\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\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(msg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(address, contractAddress, msg, grantFee);\n }\n\n return client.execute(address, contractAddress, msg, fee);\n }\n\n async deactivate({\n signer,\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee = 1.8,\n }: {\n signer: OfflineSigner;\n address?: string;\n maciKeypair?: Keypair;\n contractAddress: string;\n gasStation?: boolean;\n fee?: StdFee | 'auto' | number;\n }) {\n try {\n address = address || (await signer.getAccounts())[0].address;\n\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n const client = await this.contract.contractClient({\n signer,\n });\n\n const stateIdx = await this.getStateIdxInc({\n signer,\n address,\n contractAddress,\n });\n\n const operatorCoordPubKey = await this.getRoundInfo({\n contractAddress,\n });\n\n const payload = batchGenMessage(\n Number(stateIdx),\n maciKeypair,\n [\n BigInt(operatorCoordPubKey.coordinatorPubkeyX),\n BigInt(operatorCoordPubKey.coordinatorPubkeyY),\n ],\n [[0, 0]]\n );\n\n const { msg, encPubkeys } = payload[0];\n\n const deactivateMsg = stringizing({\n publish_deactivate_message: {\n enc_pub_key: {\n x: encPubkeys[0],\n y: encPubkeys[1],\n },\n message: {\n data: msg,\n },\n },\n });\n\n if (gasStation === true && typeof fee !== 'object') {\n // When gasStation is true and fee is not StdFee, we need to simulate first then add granter\n const gasEstimation = await client.simulate(\n address,\n [\n {\n typeUrl: '/cosmwasm.wasm.v1.MsgExecuteContract',\n value: {\n sender: address,\n contract: contractAddress,\n msg: new TextEncoder().encode(JSON.stringify(deactivateMsg)),\n },\n },\n ],\n ''\n );\n const multiplier = typeof fee === 'number' ? fee : 1.8;\n const gasPrice = GasPrice.fromString('10000000000peaka');\n const calculatedFee = calculateFee(\n Math.round(gasEstimation * multiplier),\n gasPrice\n );\n const grantFee: StdFee = {\n amount: calculatedFee.amount,\n gas: calculatedFee.gas,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n } else if (gasStation === true && typeof fee === 'object') {\n // When gasStation is true and fee is StdFee, add granter\n const grantFee: StdFee = {\n ...fee,\n granter: contractAddress,\n };\n return client.execute(\n address,\n contractAddress,\n deactivateMsg,\n grantFee\n );\n }\n\n return client.execute(address, contractAddress, deactivateMsg, fee);\n } catch (error) {\n throw Error(`Submit deactivate failed! ${error}`);\n }\n }\n\n async fetchAllDeactivateLogs({\n contractAddress,\n }: {\n contractAddress: string;\n }) {\n const deactivates =\n await this.indexer.fetchAllDeactivateLogs(contractAddress);\n return deactivates;\n }\n\n async genAddKeyInput({\n maciKeypair,\n contractAddress,\n }: {\n maciKeypair: Keypair;\n contractAddress: string;\n }) {\n const deactivates = await this.fetchAllDeactivateLogs({\n contractAddress,\n });\n\n const roundInfo = await this.getRoundInfo({\n contractAddress,\n });\n\n const circuitPower = roundInfo.circuitPower;\n const stateTreeDepth = Number(circuitPower.split('-')[0]);\n const inputObj = genAddKeyInput(stateTreeDepth + 2, {\n coordPubKey: [\n BigInt(roundInfo.coordinatorPubkeyX),\n BigInt(roundInfo.coordinatorPubkeyY),\n ],\n oldKey: maciKeypair,\n deactivates: deactivates.map((d: any) => d.map(BigInt)),\n });\n return inputObj;\n\n // 1. generate proof\n\n // 2. compress proof to vote proof\n\n // 3. send addNewKey tx\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return await client.addNewKey(\n {\n d,\n groth16Proof: proof,\n nullifier: nullifier.toString(),\n pubkey: {\n x: newMaciKeypair.pubKey[0].toString(),\n y: newMaciKeypair.pubKey[1].toString(),\n },\n },\n fee\n );\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.amaciClient({\n signer,\n contractAddress,\n });\n\n return client.claim(fee);\n }\n\n async getOracleCertificateConfig() {\n const ecosystems = await this.oracleCertificate.listEcosystems();\n return ecosystems;\n }\n\n /**\n * Batch grant with bond (for maci)\n * @param signer\n * @param contractAddress\n * @param address\n * @param amount\n * @returns\n */\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n amount: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\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 grant: {\n max_amount: BigInt('100000000000000000000000'),\n },\n })\n )\n ),\n }),\n },\n {\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 bond: {},\n })\n )\n ),\n funds: [\n {\n denom: 'peaka',\n amount,\n },\n ],\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n\n /**\n * Batch revoke with withdraw (for maci)\n * @param client\n * @param contractAddress\n * @param address\n * @returns\n */\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n const client = await this.contract.contractClient({\n signer,\n });\n\n if (!address) {\n address = (await signer.getAccounts())[0].address;\n }\n\n const msgs: MsgExecuteContractEncodeObject[] = [\n {\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 withdraw: {},\n })\n )\n ),\n }),\n },\n {\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 revoke: {},\n })\n )\n ),\n }),\n },\n ];\n\n try {\n const result = await client.signAndBroadcast(address, msgs, fee);\n return result;\n } catch (err) {\n throw err;\n }\n }\n}\n","import { ClientParams, CertificateEcosystem } from './types';\nimport { Http, Indexer, Contract, OracleCertificate, MACI } from './libs';\nimport { getDefaultParams } from './libs/const';\nimport {\n CreateAMaciRoundParams,\n CreateMaciRoundParams,\n CreateOracleMaciRoundParams,\n CreateSaasOracleMaciRoundParams,\n} from './libs/contract/types';\nimport { OfflineSigner } from '@cosmjs/proto-signing';\nimport {\n genKeypair,\n genKeypairFromSign,\n Keypair,\n packPubKey,\n PubKey,\n unpackPubKey,\n} from './libs/crypto';\nimport { OracleWhitelistConfig } from './libs/contract/ts/OracleMaci.types';\nimport { SignatureResponse } from './libs/oracle-certificate/types';\nimport { StdFee } from '@cosmjs/amino';\nimport { Groth16ProofType } from './libs/contract/ts/Maci.types';\nimport { isErrorResponse } from './libs/maci/maci';\n\n/**\n * @class MaciClient\n * @description This class is used to interact with Maci Client.\n */\nexport class MaciClient {\n public network: 'mainnet' | 'testnet';\n public rpcEndpoint: string;\n public restEndpoint: string;\n public apiEndpoint: string;\n public certificateApiEndpoint: string;\n\n public registryAddress: string;\n public saasAddress: string;\n public maciCodeId: number;\n public oracleCodeId: number;\n public saasOracleCodeId: number;\n public feegrantOperator: string;\n public whitelistBackendPubkey: string;\n\n public http: Http;\n public indexer: Indexer;\n public contract: Contract;\n public oracleCertificate: OracleCertificate;\n public maci: MACI;\n public maciKeypair: Keypair;\n\n public signer?: OfflineSigner;\n\n /**\n * @constructor\n * @param {ClientParams} params - The parameters for the Maci Client instance.\n */\n constructor({\n signer,\n network,\n rpcEndpoint,\n restEndpoint,\n apiEndpoint,\n registryAddress,\n saasAddress,\n maciCodeId,\n oracleCodeId,\n saasOracleCodeId,\n customFetch,\n defaultOptions,\n feegrantOperator,\n whitelistBackendPubkey,\n certificateApiEndpoint,\n maciKeypair,\n }: ClientParams) {\n this.signer = signer;\n this.network = network;\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.saasAddress = saasAddress || defaultParams.saasAddress;\n this.maciCodeId = maciCodeId || defaultParams.maciCodeId;\n this.oracleCodeId = oracleCodeId || defaultParams.oracleCodeId;\n this.saasOracleCodeId = saasOracleCodeId || defaultParams.saasCodeId;\n this.feegrantOperator =\n feegrantOperator || defaultParams.oracleFeegrantOperator;\n this.whitelistBackendPubkey =\n whitelistBackendPubkey || defaultParams.oracleWhitelistBackendPubkey;\n this.maciKeypair = maciKeypair ?? genKeypair();\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 network: this.network,\n rpcEndpoint: this.rpcEndpoint,\n registryAddress: this.registryAddress,\n saasAddress: this.saasAddress,\n maciCodeId: this.maciCodeId,\n oracleCodeId: this.oracleCodeId,\n saasOracleCodeId: this.saasOracleCodeId,\n feegrantOperator: this.feegrantOperator,\n whitelistBackendPubkey: this.whitelistBackendPubkey,\n });\n this.oracleCertificate = new OracleCertificate({\n certificateApiEndpoint: this.certificateApiEndpoint,\n http: this.http,\n });\n this.maci = new MACI({\n contract: this.contract,\n indexer: this.indexer,\n oracleCertificate: this.oracleCertificate,\n maciKeypair: this.maciKeypair,\n });\n }\n\n getSigner(signer?: OfflineSigner) {\n if (signer) {\n return signer;\n }\n if (this.signer) {\n return this.signer;\n }\n throw new Error('No signer provided, please provide a signer');\n }\n\n getMaciKeypair() {\n return this.maciKeypair;\n }\n\n getMaciPubkey() {\n return this.packMaciPubkey(this.maciKeypair.pubKey);\n }\n\n packMaciPubkey(pubkey?: PubKey) {\n return packPubKey(pubkey || this.maciKeypair.pubKey);\n }\n\n unpackMaciPubkey(pubkey: bigint | string) {\n return unpackPubKey(BigInt(pubkey));\n }\n\n async getAddress(signer?: OfflineSigner) {\n const [{ address }] = await this.getSigner(signer).getAccounts();\n return address;\n }\n\n async oracleMaciClient({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\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 signer = this.getSigner(signer);\n return await this.contract.amaciClient({ signer, contractAddress });\n }\n\n async createAMaciRound(params: CreateAMaciRoundParams) {\n return await this.contract.createAMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createMaciRound(params: CreateMaciRoundParams) {\n return await this.contract.createMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createOracleMaciRound(params: CreateOracleMaciRoundParams) {\n return await this.contract.createOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async createSaasOracleMaciRound(params: CreateSaasOracleMaciRoundParams) {\n return await this.contract.createSaasOracleMaciRound({\n signer: this.getSigner(params.signer),\n ...params,\n });\n }\n\n async genKeypairFromSign({\n signer,\n address,\n }: {\n signer?: OfflineSigner;\n address?: string;\n } = {}) {\n return await genKeypairFromSign({\n signer: this.getSigner(signer),\n address,\n network: this.network,\n });\n }\n\n async getStateIdxInc({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n return await this.maci.getStateIdxInc({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n });\n }\n\n async getVoiceCreditBalance({\n signer,\n stateIdx,\n maciKeypair,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n stateIdx?: number;\n maciKeypair?: Keypair;\n contractAddress: string;\n }) {\n if (maciKeypair === undefined) {\n maciKeypair = this.maciKeypair;\n }\n\n if (stateIdx === undefined) {\n stateIdx = await this.getStateIdxByPubKey({\n contractAddress,\n pubKey: maciKeypair.pubKey,\n });\n }\n\n return await this.maci.getVoiceCreditBalance({\n signer: this.getSigner(signer),\n stateIdx,\n contractAddress,\n });\n }\n\n async getStateIdxByPubKey({\n contractAddress,\n pubKey,\n }: {\n contractAddress: string;\n pubKey?: bigint[];\n }) {\n return await this.maci.getStateIdxByPubKey({\n contractAddress,\n pubKey: pubKey || this.maciKeypair.pubKey,\n });\n }\n\n async feegrantAllowance({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n address = await this.getAddress(signer);\n return await this.maci.feegrantAllowance({\n address,\n contractAddress,\n });\n }\n\n async hasFeegrant({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }): Promise<boolean> {\n address = await this.getAddress(signer);\n return await this.maci.hasFeegrant({\n address,\n contractAddress,\n });\n }\n\n async queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n certificate?: {\n signature: string;\n amount: string;\n };\n }): Promise<string> {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.queryWhitelistBalanceOf({\n signer,\n address,\n contractAddress,\n certificate,\n });\n }\n\n async isWhitelisted({\n signer,\n address,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n }) {\n signer = this.getSigner(signer);\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.isWhitelisted({\n signer,\n address,\n contractAddress,\n });\n }\n\n async getOracleWhitelistConfig({\n signer,\n contractAddress,\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n }): Promise<OracleWhitelistConfig> {\n return await this.maci.getOracleWhitelistConfig({\n signer: this.getSigner(signer),\n contractAddress,\n });\n }\n\n async getRounds(after?: string, limit?: number) {\n const rounds = await this.indexer.getRounds(after || '', limit || 10);\n\n if (isErrorResponse(rounds)) {\n throw new Error(\n `Failed to get rounds: ${rounds.code} ${rounds.error.message}`\n );\n }\n\n return rounds;\n }\n\n async getRoundInfo({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundInfo({ contractAddress });\n }\n\n async getRoundCircuitType({ contractAddress }: { contractAddress: string }) {\n return await this.maci.getRoundCircuitType({ contractAddress });\n }\n\n async queryRoundIsQv({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundIsQv({ contractAddress });\n }\n\n async queryRoundClaimable({\n contractAddress,\n }: {\n contractAddress: string;\n }): Promise<{\n claimable: boolean | null;\n balance: string | null;\n }> {\n return await this.maci.queryRoundClaimable({ contractAddress });\n }\n\n async queryAMaciChargeFee({\n maxVoter,\n maxOption,\n }: {\n maxVoter: number;\n maxOption: number;\n }) {\n return await this.maci.queryAMaciChargeFee({\n maxVoter,\n maxOption,\n });\n }\n\n async queryRoundGasStation({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundGasStation({ contractAddress });\n }\n\n parseRoundStatus(\n votingStart: number,\n votingEnd: number,\n status: string,\n currentTime: Date\n ): string {\n return this.maci.parseRoundStatus(\n votingStart,\n votingEnd,\n status,\n currentTime\n );\n }\n\n async queryRoundBalance({ contractAddress }: { contractAddress: string }) {\n return await this.maci.queryRoundBalance({ contractAddress });\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 return await this.maci.requestOracleCertificate({\n signer: this.getSigner(signer),\n ecosystem,\n address,\n contractAddress,\n });\n }\n\n async signup({\n signer,\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation = false,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n maciKeypair?: Keypair;\n oracleCertificate?: {\n amount: string;\n signature: string;\n };\n gasStation?: boolean;\n fee?: StdFee;\n }) {\n return await this.maci.signup({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n maciKeypair,\n oracleCertificate,\n gasStation,\n fee,\n });\n }\n\n async vote({\n signer,\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation = false,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n selectedOptions: {\n idx: number;\n vc: number;\n }[];\n operatorCoordPubKey: PubKey;\n maciKeypair?: Keypair;\n gasStation?: boolean;\n }) {\n return await this.maci.vote({\n signer: this.getSigner(signer),\n address,\n contractAddress,\n selectedOptions,\n operatorCoordPubKey,\n maciKeypair,\n gasStation,\n });\n }\n\n async deactivate({\n signer,\n address,\n contractAddress,\n gasStation = false,\n maciKeypair,\n fee,\n }: {\n signer?: OfflineSigner;\n address?: string;\n contractAddress: string;\n gasStation?: boolean;\n maciKeypair?: Keypair;\n fee?: StdFee;\n }) {\n return await this.maci.deactivate({\n signer: this.getSigner(signer),\n address,\n maciKeypair,\n contractAddress,\n gasStation,\n fee,\n });\n }\n\n async genAddKeyInput({\n contractAddress,\n maciKeypair,\n }: {\n contractAddress: string;\n maciKeypair?: Keypair;\n }) {\n return await this.maci.genAddKeyInput({\n maciKeypair: maciKeypair || this.maciKeypair,\n contractAddress,\n });\n }\n\n async addNewKey({\n signer,\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n d: string[];\n proof: Groth16ProofType;\n nullifier: bigint;\n newMaciKeypair: Keypair;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.addNewKey({\n signer: this.getSigner(signer),\n contractAddress,\n d,\n proof,\n nullifier,\n newMaciKeypair,\n fee,\n });\n }\n\n async claimAMaciRound({\n signer,\n contractAddress,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n fee?: number | StdFee | 'auto';\n }) {\n return await this.maci.claimAMaciRound({\n signer: this.getSigner(signer),\n contractAddress,\n fee,\n });\n }\n\n async getOracleCertificateConfig() {\n return await this.maci.getOracleCertificateConfig();\n }\n\n async batchGrantWithBond({\n signer,\n contractAddress,\n address,\n amount,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n amount: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchGrantWithBond({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n amount,\n fee,\n });\n }\n\n async batchRevokeWithdraw({\n signer,\n contractAddress,\n address,\n fee = 'auto',\n }: {\n signer?: OfflineSigner;\n contractAddress: string;\n address?: string;\n fee?: number | StdFee | 'auto';\n }) {\n if (!address) {\n address = await this.getAddress(signer);\n }\n return await this.maci.batchRevokeWithdraw({\n signer: this.getSigner(signer),\n contractAddress,\n address,\n fee,\n });\n }\n}\n"],"mappings":"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","names":["MaciClient","signMessage","import_crypto_js","import_poseidon_cipher","import_ethers","import_baby_jubjub","import_eddsa_poseidon","import_ethers","import_assert","assert","assert","import_assert","assert","CryptoJS","SNARK_FIELD_SIZE","CryptoJS","signMessage","r","MaciCircuitType","MaciCertSystemType","MaciRoundType","import_stargate","import_stargate","round","MaciClient"]}