UNPKG

@celo/contractkit

Version:

Celo's ContractKit to interact with Celo network

205 lines (204 loc) 9.04 kB
import { Election } from '@celo/abis/web3/Election'; import { StrongAddress } from '@celo/base/lib/address'; import { Address, CeloTransactionObject } from '@celo/connect'; import BigNumber from 'bignumber.js'; import { BaseWrapperForGoverning } from './BaseWrapperForGoverning'; import { ValidatorGroup } from './Validators'; export interface ValidatorGroupVote { address: Address; name: string; votes: BigNumber; capacity: BigNumber; eligible: boolean; } export interface Voter { address: Address; votes: GroupVote[]; } export interface VoterReward { address: Address; addressPayment: BigNumber; group: ValidatorGroup; epochNumber: number; } export interface GroupVote { group: Address; pending: BigNumber; active: BigNumber; } export interface GroupVoterReward { group: ValidatorGroup; groupVoterPayment: BigNumber; epochNumber: number; } export interface ElectableValidators { min: BigNumber; max: BigNumber; } export interface ElectionConfig { electableValidators: ElectableValidators; electabilityThreshold: BigNumber; maxNumGroupsVotedFor: BigNumber; totalVotes: BigNumber; currentThreshold: BigNumber; } /** * Contract for voting for validators and managing validator groups. */ export declare class ElectionWrapper extends BaseWrapperForGoverning<Election> { /** * Returns the minimum and maximum number of validators that can be elected. * @returns The minimum and maximum number of validators that can be elected. */ electableValidators(): Promise<ElectableValidators>; /** * Returns the current election threshold. * @returns Election threshold. */ electabilityThreshold: () => Promise<BigNumber>; /** * Gets a validator address from the validator set at the given block number. * @param index Index of requested validator in the validator set. * @param blockNumber Block number to retrieve the validator set from. * @return Address of validator at the requested index. */ validatorSignerAddressFromSet: (signerIndex: number, blockNumber: number) => Promise<StrongAddress>; /** * Gets a validator address from the current validator set. * @param index Index of requested validator in the validator set. * @return Address of validator at the requested index. */ validatorSignerAddressFromCurrentSet: (index: number) => Promise<StrongAddress>; /** * Gets the size of the validator set that must sign the given block number. * @param blockNumber Block number to retrieve the validator set from. * @return Size of the validator set. */ numberValidatorsInSet: (blockNumber: number) => Promise<number>; /** * Gets the size of the current elected validator set. * @return Size of the current elected validator set. */ numberValidatorsInCurrentSet: () => Promise<number>; /** * Returns the total votes received across all groups. * @return The total votes received across all groups. */ getTotalVotes: () => Promise<BigNumber>; /** * Returns the current validator signers using the precompiles. * @return List of current validator signers. * @deprecated use EpochManagerWrapper.getElectedSigners instead. see see https://specs.celo.org/smart_contract_updates_from_l1.html */ getCurrentValidatorSigners: () => Promise<Address[]>; /** * Returns the validator signers for block `blockNumber`. * @param blockNumber Block number to retrieve signers for. * @return Address of each signer in the validator set. * @deprecated see https://specs.celo.org/smart_contract_updates_from_l1.html */ getValidatorSigners(blockNumber: number): Promise<Address[]>; /** * Returns a list of elected validators with seats allocated to groups via the D'Hondt method. * @return The list of elected validators. * @dev See https://en.wikipedia.org/wiki/D%27Hondt_method#Allocation for more information. */ electValidatorSigners(min?: number, max?: number): Promise<Address[]>; /** * Returns the total votes for `group`. * @param group The address of the validator group. * @return The total votes for `group`. */ getTotalVotesForGroup(group: Address, blockNumber?: number): Promise<BigNumber>; /** * Returns the total votes for `group` made by `account`. * @param group The address of the validator group. * @param account The address of the voting account. * @return The total votes for `group` made by `account`. */ getTotalVotesForGroupByAccount: (group: string, account: string) => Promise<BigNumber>; /** * Returns the active votes for `group`. * @param group The address of the validator group. * @return The active votes for `group`. */ getActiveVotesForGroup(group: Address, blockNumber?: number): Promise<BigNumber>; /** * Returns the groups that `account` has voted for. * @param account The address of the account casting votes. * @return The groups that `account` has voted for. */ getGroupsVotedForByAccount: (account: Address) => Promise<Address[]>; getVotesForGroupByAccount(account: Address, group: Address, blockNumber?: number): Promise<GroupVote>; getVoter(account: Address, blockNumber?: number): Promise<Voter>; getTotalVotesByAccount: (account: string) => Promise<BigNumber>; /** * Returns whether or not the account has any pending votes. * @param account The address of the account casting votes. * @return The groups that `account` has voted for. */ hasPendingVotes(account: Address): Promise<boolean>; hasActivatablePendingVotes(account: Address): Promise<boolean>; /** * Returns current configuration parameters. */ getConfig(): Promise<ElectionConfig>; getValidatorGroupVotes(address: Address): Promise<ValidatorGroupVote>; /** * Returns the current registered validator groups and their total votes and eligibility. */ getValidatorGroupsVotes(): Promise<ValidatorGroupVote[]>; private _activate; private _activateForAccount; /** * Activates any activatable pending votes. * @param account The account with pending votes to activate. */ activate(account: Address, onBehalfOfAccount?: boolean): Promise<CeloTransactionObject<boolean>[]>; revokePending(account: Address, group: Address, value: BigNumber): Promise<CeloTransactionObject<boolean>>; /** * Creates a transaction object for revoking active votes. * @param account Account to revoke votes for. * @param group Validator group to revoke votes from. * @param value Amount to be removed from active votes. * @param lesserAfterVote First group address with less vote than `account`. * @param greaterAfterVote First group address with more vote than `account`. * @dev Must pass both `lesserAfterVote` and `greaterAfterVote` or neither. */ revokeActive(account: Address, group: Address, value: BigNumber, lesserAfterVote?: Address, greaterAfterVote?: Address): Promise<CeloTransactionObject<boolean>>; revoke(account: Address, group: Address, value: BigNumber): Promise<CeloTransactionObject<boolean>[]>; /** * Increments the number of total and pending votes for `group`. * @param validatorGroup The validator group to vote for. * @param value The amount of gold to use to vote. */ vote(validatorGroup: Address, value: BigNumber): Promise<CeloTransactionObject<boolean>>; /** * Returns the current eligible validator groups and their total votes. */ getEligibleValidatorGroupsVotes(): Promise<ValidatorGroupVote[]>; findLesserAndGreaterAfterVote(votedGroup: Address, voteWeight: BigNumber): Promise<{ lesser: Address; greater: Address; }>; /** * Retrieves GroupVoterRewards at epochNumber. * @param epochNumber The epoch to retrieve GroupVoterRewards at. */ getGroupVoterRewards(epochNumber: number, useBlockNumber?: boolean): Promise<GroupVoterReward[]>; /** * Retrieves VoterRewards for address at epochNumber. * @param address The address to retrieve VoterRewards for. * @param epochNumber The epoch to retrieve VoterRewards at. * @param voterShare Optionally address' share of group rewards. */ getVoterRewards(address: Address, epochNumber: number, useBlockNumber?: boolean, voterShare?: Record<Address, BigNumber>): Promise<VoterReward[]>; /** * Retrieves a voter's share of active votes. * @param address The voter to retrieve share for. * @param blockNumber The block to retrieve the voter's share at. */ getVoterShare(address: Address, blockNumber?: number): Promise<Record<Address, BigNumber>>; getGroupEpochRewards(group: Address, totalEpochRewards: BigNumber, groupScore: BigNumber): Promise<BigNumber>; } export type ElectionWrapperType = ElectionWrapper;