UNPKG

cive

Version:

Cive is an interface for the Conflux Core Space, built on Viem.

156 lines (140 loc) 3.57 kB
import type { Hash, Hex } from 'viem' import type { Address } from '../accounts/types.js' export type Decision<TQuantity = bigint> = { height: TQuantity blockHash: Hash } export type PoSStatus<TQuantity = bigint> = { epoch: TQuantity latestCommitted: TQuantity latestVoted: TQuantity pivotDecision: Decision<TQuantity> } export type PoSVotesInQueue<TQuantity = bigint> = { endBlockNumber: TQuantity power: TQuantity } export type PoSAccountStatus<TQuantity = bigint> = { availableVotes: TQuantity forfeited: TQuantity forceRetired: TQuantity inQueue: PoSVotesInQueue<TQuantity>[] locked: TQuantity outQueue: PoSVotesInQueue<TQuantity>[] unlocked: TQuantity } export type PoSAccount<TQuantity = bigint> = { address: Address blockNumber: TQuantity status: PoSAccountStatus<TQuantity> } export type PoSCommitteeNode<TQuantity = bigint> = { address: Address votingPower: TQuantity } export type PoSElection<TQuantity = bigint> = { isFinalized: boolean startBlockNumber: TQuantity topElectingNodes: PoSCommitteeNode<TQuantity>[] } export type PoSCurrentCommittee<TQuantity = bigint> = { epochNumber: TQuantity nodes: PoSCommitteeNode<TQuantity>[] quorumVotingPower: TQuantity totalVotingPower: TQuantity } export type PoSCommittee<TQuantity = bigint> = { currentCommittee: PoSCurrentCommittee elections: PoSElection<TQuantity>[] } export type PoSSignature<TQuantity = bigint> = { account: Address votes: TQuantity } export type PoSBlock<TQuantity = bigint> = { hash: Hash hight: TQuantity epoch: TQuantity round: TQuantity miner: Address | null lastTxNumber: TQuantity parentHash: Hash pivotDecision: Decision<TQuantity> timestamp: TQuantity signatures: PoSSignature<TQuantity>[] } export type PoSAccountRewards<TQuantity = bigint> = { posAddress: Address powAddress: Address reward: TQuantity } export type PoSRewards<TQuantity = bigint> = { accountRewards: PoSAccountRewards<TQuantity>[] powEpochHash: Hash } export type PoSTransactionRegisterType = { type: 'Register' payload: { publicKey: Hex vrfPublicKey: Hex } } export type PoSTransactionElectionType<TQuantity = bigint> = { type: 'Election' payload: { publicKey: Hex targetTerm: TQuantity vrfProof: Hex vrfPublicKey: Hex } } export type PoSTransactionUpdateVotingPowerType<TQuantity = bigint> = { type: 'UpdateVotingPower' payload: { address: Hex votingPower: TQuantity } } export type PoSTransactionRetireType<TQuantity = bigint> = { type: 'Retire' payload: { address: Hex votingPower: TQuantity } } export type PoSTransactionPivotDecisionType<TQuantity = bigint> = { type: 'PivotDecision' payload: { blockHash: Hash height: TQuantity } } export type PoSTransactionDisputeType = { type: 'Dispute' payload: { address: Hex blsPublicKey: Hex vrfPublicKey: Hex conflictingVotes: { conflictVoteType: Hex first: Hex second: Hex } } } export type PoSTransactionTypeAndPayload<TQuantity = bigint> = | PoSTransactionRegisterType | PoSTransactionElectionType<TQuantity> | PoSTransactionUpdateVotingPowerType<TQuantity> | PoSTransactionRetireType<TQuantity> | PoSTransactionPivotDecisionType<TQuantity> | PoSTransactionDisputeType export type PoSTransaction<TQuantity = bigint> = { hash: Hash from: Address number: TQuantity blockHash: Hash blockNumber: TQuantity timestamp: TQuantity status: 'Executed' | 'Failed' | 'Discard' } & PoSTransactionTypeAndPayload<TQuantity>