import * as $ from '@manahippo/move-to-ts'; import { AptosDataCache, AptosParserRepo, DummyCache, AptosLocalCache } from '@manahippo/move-to-ts'; import { U8, U64, U128 } from '@manahippo/move-to-ts'; import { u8, u64, u128 } from '@manahippo/move-to-ts'; import { TypeParamDeclType, FieldDeclType } from '@manahippo/move-to-ts'; import { AtomicTypeTag, StructTag, TypeTag, VectorTag, SimpleStructTag } from '@manahippo/move-to-ts'; import { OptionTransaction } from '@manahippo/move-to-ts'; import { HexString, AptosClient, AptosAccount, TxnBuilderTypes, Types } from 'aptos'; import * as Account from './account'; import * as Bls12381 from './bls12381'; import * as Coin from './coin'; import * as Error from './error'; import * as Event from './event'; import * as Math64 from './math64'; import * as Option from './option'; import * as Signer from './signer'; import * as Staking_config from './staking_config'; import * as System_addresses from './system_addresses'; import * as Timestamp from './timestamp'; import * as Vector from './vector'; export const packageName = 'AptosFramework'; export const moduleAddress = new HexString('0x1'); export const moduleName = 'stake'; export const EALREADY_ACTIVE_VALIDATOR: U64 = u64('4'); export const EALREADY_REGISTERED: U64 = u64('8'); export const EINELIGIBLE_VALIDATOR: U64 = u64('17'); export const EINVALID_LOCKUP: U64 = u64('18'); export const EINVALID_PUBLIC_KEY: U64 = u64('11'); export const ELAST_VALIDATOR: U64 = u64('6'); export const ENOT_OPERATOR: U64 = u64('9'); export const ENOT_VALIDATOR: U64 = u64('5'); export const ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED: U64 = u64('10'); export const EOWNER_CAP_ALREADY_EXISTS: U64 = u64('16'); export const EOWNER_CAP_NOT_FOUND: U64 = u64('15'); export const ESTAKE_EXCEEDS_MAX: U64 = u64('7'); export const ESTAKE_POOL_DOES_NOT_EXIST: U64 = u64('14'); export const ESTAKE_TOO_HIGH: U64 = u64('3'); export const ESTAKE_TOO_LOW: U64 = u64('2'); export const EVALIDATOR_CONFIG: U64 = u64('1'); export const EVALIDATOR_SET_TOO_LARGE: U64 = u64('12'); export const EVOTING_POWER_INCREASE_EXCEEDS_LIMIT: U64 = u64('13'); export const MAX_REWARDS_RATE: U64 = u64('1000000'); export const MAX_VALIDATOR_SET_SIZE: U64 = u64('65536'); export const VALIDATOR_STATUS_ACTIVE: U64 = u64('2'); export const VALIDATOR_STATUS_INACTIVE: U64 = u64('4'); export const VALIDATOR_STATUS_PENDING_ACTIVE: U64 = u64('1'); export const VALIDATOR_STATUS_PENDING_INACTIVE: U64 = u64('3'); export class AddStakeEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'AddStakeEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'amount_added', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; amount_added: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.amount_added = proto['amount_added'] as U64; } static AddStakeEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): AddStakeEvent { const proto = $.parseStructProto(data, typeTag, repo, AddStakeEvent); return new AddStakeEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'AddStakeEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class AllowedValidators { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'AllowedValidators'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'accounts', typeTag: new VectorTag(AtomicTypeTag.Address) }]; accounts: HexString[]; constructor(proto: any, public typeTag: TypeTag) { this.accounts = proto['accounts'] as HexString[]; } static AllowedValidatorsParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): AllowedValidators { const proto = $.parseStructProto(data, typeTag, repo, AllowedValidators); return new AllowedValidators(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, AllowedValidators, typeParams); return result as unknown as AllowedValidators; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, AllowedValidators, typeParams); await result.loadFullState(app); return result as unknown as AllowedValidators; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'AllowedValidators', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class AptosCoinCapabilities { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'AptosCoinCapabilities'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'mint_cap', typeTag: new StructTag(new HexString('0x1'), 'coin', 'MintCapability', [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]) } ]; mint_cap: Coin.MintCapability; constructor(proto: any, public typeTag: TypeTag) { this.mint_cap = proto['mint_cap'] as Coin.MintCapability; } static AptosCoinCapabilitiesParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): AptosCoinCapabilities { const proto = $.parseStructProto(data, typeTag, repo, AptosCoinCapabilities); return new AptosCoinCapabilities(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, AptosCoinCapabilities, typeParams); return result as unknown as AptosCoinCapabilities; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, AptosCoinCapabilities, typeParams); await result.loadFullState(app); return result as unknown as AptosCoinCapabilities; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'AptosCoinCapabilities', []); } async loadFullState(app: $.AppType) { await this.mint_cap.loadFullState(app); this.__app = app; } } export class DistributeRewardsEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'DistributeRewardsEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'rewards_amount', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; rewards_amount: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.rewards_amount = proto['rewards_amount'] as U64; } static DistributeRewardsEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): DistributeRewardsEvent { const proto = $.parseStructProto(data, typeTag, repo, DistributeRewardsEvent); return new DistributeRewardsEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'DistributeRewardsEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class IncreaseLockupEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'IncreaseLockupEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'old_locked_until_secs', typeTag: AtomicTypeTag.U64 }, { name: 'new_locked_until_secs', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; old_locked_until_secs: U64; new_locked_until_secs: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.old_locked_until_secs = proto['old_locked_until_secs'] as U64; this.new_locked_until_secs = proto['new_locked_until_secs'] as U64; } static IncreaseLockupEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): IncreaseLockupEvent { const proto = $.parseStructProto(data, typeTag, repo, IncreaseLockupEvent); return new IncreaseLockupEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'IncreaseLockupEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class IndividualValidatorPerformance { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'IndividualValidatorPerformance'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'successful_proposals', typeTag: AtomicTypeTag.U64 }, { name: 'failed_proposals', typeTag: AtomicTypeTag.U64 } ]; successful_proposals: U64; failed_proposals: U64; constructor(proto: any, public typeTag: TypeTag) { this.successful_proposals = proto['successful_proposals'] as U64; this.failed_proposals = proto['failed_proposals'] as U64; } static IndividualValidatorPerformanceParser( data: any, typeTag: TypeTag, repo: AptosParserRepo ): IndividualValidatorPerformance { const proto = $.parseStructProto(data, typeTag, repo, IndividualValidatorPerformance); return new IndividualValidatorPerformance(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'IndividualValidatorPerformance', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class JoinValidatorSetEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'JoinValidatorSetEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'pool_address', typeTag: AtomicTypeTag.Address }]; pool_address: HexString; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; } static JoinValidatorSetEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): JoinValidatorSetEvent { const proto = $.parseStructProto(data, typeTag, repo, JoinValidatorSetEvent); return new JoinValidatorSetEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'JoinValidatorSetEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class LeaveValidatorSetEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'LeaveValidatorSetEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'pool_address', typeTag: AtomicTypeTag.Address }]; pool_address: HexString; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; } static LeaveValidatorSetEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): LeaveValidatorSetEvent { const proto = $.parseStructProto(data, typeTag, repo, LeaveValidatorSetEvent); return new LeaveValidatorSetEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'LeaveValidatorSetEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class OwnerCapability { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'OwnerCapability'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'pool_address', typeTag: AtomicTypeTag.Address }]; pool_address: HexString; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; } static OwnerCapabilityParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): OwnerCapability { const proto = $.parseStructProto(data, typeTag, repo, OwnerCapability); return new OwnerCapability(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, OwnerCapability, typeParams); return result as unknown as OwnerCapability; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, OwnerCapability, typeParams); await result.loadFullState(app); return result as unknown as OwnerCapability; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'OwnerCapability', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class ReactivateStakeEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'ReactivateStakeEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'amount', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; amount: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.amount = proto['amount'] as U64; } static ReactivateStakeEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): ReactivateStakeEvent { const proto = $.parseStructProto(data, typeTag, repo, ReactivateStakeEvent); return new ReactivateStakeEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'ReactivateStakeEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class RegisterValidatorCandidateEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'RegisterValidatorCandidateEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'pool_address', typeTag: AtomicTypeTag.Address }]; pool_address: HexString; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; } static RegisterValidatorCandidateEventParser( data: any, typeTag: TypeTag, repo: AptosParserRepo ): RegisterValidatorCandidateEvent { const proto = $.parseStructProto(data, typeTag, repo, RegisterValidatorCandidateEvent); return new RegisterValidatorCandidateEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'RegisterValidatorCandidateEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class RotateConsensusKeyEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'RotateConsensusKeyEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'old_consensus_pubkey', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'new_consensus_pubkey', typeTag: new VectorTag(AtomicTypeTag.U8) } ]; pool_address: HexString; old_consensus_pubkey: U8[]; new_consensus_pubkey: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.old_consensus_pubkey = proto['old_consensus_pubkey'] as U8[]; this.new_consensus_pubkey = proto['new_consensus_pubkey'] as U8[]; } static RotateConsensusKeyEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): RotateConsensusKeyEvent { const proto = $.parseStructProto(data, typeTag, repo, RotateConsensusKeyEvent); return new RotateConsensusKeyEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'RotateConsensusKeyEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class SetOperatorEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'SetOperatorEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'old_operator', typeTag: AtomicTypeTag.Address }, { name: 'new_operator', typeTag: AtomicTypeTag.Address } ]; pool_address: HexString; old_operator: HexString; new_operator: HexString; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.old_operator = proto['old_operator'] as HexString; this.new_operator = proto['new_operator'] as HexString; } static SetOperatorEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): SetOperatorEvent { const proto = $.parseStructProto(data, typeTag, repo, SetOperatorEvent); return new SetOperatorEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'SetOperatorEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class StakePool { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'StakePool'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'active', typeTag: new StructTag(new HexString('0x1'), 'coin', 'Coin', [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]) }, { name: 'inactive', typeTag: new StructTag(new HexString('0x1'), 'coin', 'Coin', [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]) }, { name: 'pending_active', typeTag: new StructTag(new HexString('0x1'), 'coin', 'Coin', [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]) }, { name: 'pending_inactive', typeTag: new StructTag(new HexString('0x1'), 'coin', 'Coin', [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]) }, { name: 'locked_until_secs', typeTag: AtomicTypeTag.U64 }, { name: 'operator_address', typeTag: AtomicTypeTag.Address }, { name: 'delegated_voter', typeTag: AtomicTypeTag.Address }, { name: 'initialize_validator_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'RegisterValidatorCandidateEvent', []) ]) }, { name: 'set_operator_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'SetOperatorEvent', []) ]) }, { name: 'add_stake_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'AddStakeEvent', []) ]) }, { name: 'reactivate_stake_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'ReactivateStakeEvent', []) ]) }, { name: 'rotate_consensus_key_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'RotateConsensusKeyEvent', []) ]) }, { name: 'update_network_and_fullnode_addresses_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'UpdateNetworkAndFullnodeAddressesEvent', []) ]) }, { name: 'increase_lockup_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'IncreaseLockupEvent', []) ]) }, { name: 'join_validator_set_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'JoinValidatorSetEvent', []) ]) }, { name: 'distribute_rewards_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'DistributeRewardsEvent', []) ]) }, { name: 'unlock_stake_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'UnlockStakeEvent', []) ]) }, { name: 'withdraw_stake_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'WithdrawStakeEvent', []) ]) }, { name: 'leave_validator_set_events', typeTag: new StructTag(new HexString('0x1'), 'event', 'EventHandle', [ new StructTag(new HexString('0x1'), 'stake', 'LeaveValidatorSetEvent', []) ]) } ]; active: Coin.Coin; inactive: Coin.Coin; pending_active: Coin.Coin; pending_inactive: Coin.Coin; locked_until_secs: U64; operator_address: HexString; delegated_voter: HexString; initialize_validator_events: Event.EventHandle; set_operator_events: Event.EventHandle; add_stake_events: Event.EventHandle; reactivate_stake_events: Event.EventHandle; rotate_consensus_key_events: Event.EventHandle; update_network_and_fullnode_addresses_events: Event.EventHandle; increase_lockup_events: Event.EventHandle; join_validator_set_events: Event.EventHandle; distribute_rewards_events: Event.EventHandle; unlock_stake_events: Event.EventHandle; withdraw_stake_events: Event.EventHandle; leave_validator_set_events: Event.EventHandle; constructor(proto: any, public typeTag: TypeTag) { this.active = proto['active'] as Coin.Coin; this.inactive = proto['inactive'] as Coin.Coin; this.pending_active = proto['pending_active'] as Coin.Coin; this.pending_inactive = proto['pending_inactive'] as Coin.Coin; this.locked_until_secs = proto['locked_until_secs'] as U64; this.operator_address = proto['operator_address'] as HexString; this.delegated_voter = proto['delegated_voter'] as HexString; this.initialize_validator_events = proto['initialize_validator_events'] as Event.EventHandle; this.set_operator_events = proto['set_operator_events'] as Event.EventHandle; this.add_stake_events = proto['add_stake_events'] as Event.EventHandle; this.reactivate_stake_events = proto['reactivate_stake_events'] as Event.EventHandle; this.rotate_consensus_key_events = proto['rotate_consensus_key_events'] as Event.EventHandle; this.update_network_and_fullnode_addresses_events = proto[ 'update_network_and_fullnode_addresses_events' ] as Event.EventHandle; this.increase_lockup_events = proto['increase_lockup_events'] as Event.EventHandle; this.join_validator_set_events = proto['join_validator_set_events'] as Event.EventHandle; this.distribute_rewards_events = proto['distribute_rewards_events'] as Event.EventHandle; this.unlock_stake_events = proto['unlock_stake_events'] as Event.EventHandle; this.withdraw_stake_events = proto['withdraw_stake_events'] as Event.EventHandle; this.leave_validator_set_events = proto['leave_validator_set_events'] as Event.EventHandle; } static StakePoolParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): StakePool { const proto = $.parseStructProto(data, typeTag, repo, StakePool); return new StakePool(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, StakePool, typeParams); return result as unknown as StakePool; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, StakePool, typeParams); await result.loadFullState(app); return result as unknown as StakePool; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'StakePool', []); } async loadFullState(app: $.AppType) { await this.active.loadFullState(app); await this.inactive.loadFullState(app); await this.pending_active.loadFullState(app); await this.pending_inactive.loadFullState(app); await this.initialize_validator_events.loadFullState(app); await this.set_operator_events.loadFullState(app); await this.add_stake_events.loadFullState(app); await this.reactivate_stake_events.loadFullState(app); await this.rotate_consensus_key_events.loadFullState(app); await this.update_network_and_fullnode_addresses_events.loadFullState(app); await this.increase_lockup_events.loadFullState(app); await this.join_validator_set_events.loadFullState(app); await this.distribute_rewards_events.loadFullState(app); await this.unlock_stake_events.loadFullState(app); await this.withdraw_stake_events.loadFullState(app); await this.leave_validator_set_events.loadFullState(app); this.__app = app; } } export class UnlockStakeEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'UnlockStakeEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'amount_unlocked', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; amount_unlocked: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.amount_unlocked = proto['amount_unlocked'] as U64; } static UnlockStakeEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): UnlockStakeEvent { const proto = $.parseStructProto(data, typeTag, repo, UnlockStakeEvent); return new UnlockStakeEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'UnlockStakeEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class UpdateNetworkAndFullnodeAddressesEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'UpdateNetworkAndFullnodeAddressesEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'old_network_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'new_network_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'old_fullnode_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'new_fullnode_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) } ]; pool_address: HexString; old_network_addresses: U8[]; new_network_addresses: U8[]; old_fullnode_addresses: U8[]; new_fullnode_addresses: U8[]; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.old_network_addresses = proto['old_network_addresses'] as U8[]; this.new_network_addresses = proto['new_network_addresses'] as U8[]; this.old_fullnode_addresses = proto['old_fullnode_addresses'] as U8[]; this.new_fullnode_addresses = proto['new_fullnode_addresses'] as U8[]; } static UpdateNetworkAndFullnodeAddressesEventParser( data: any, typeTag: TypeTag, repo: AptosParserRepo ): UpdateNetworkAndFullnodeAddressesEvent { const proto = $.parseStructProto(data, typeTag, repo, UpdateNetworkAndFullnodeAddressesEvent); return new UpdateNetworkAndFullnodeAddressesEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'UpdateNetworkAndFullnodeAddressesEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class ValidatorConfig { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'ValidatorConfig'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'consensus_pubkey', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'network_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'fullnode_addresses', typeTag: new VectorTag(AtomicTypeTag.U8) }, { name: 'validator_index', typeTag: AtomicTypeTag.U64 } ]; consensus_pubkey: U8[]; network_addresses: U8[]; fullnode_addresses: U8[]; validator_index: U64; constructor(proto: any, public typeTag: TypeTag) { this.consensus_pubkey = proto['consensus_pubkey'] as U8[]; this.network_addresses = proto['network_addresses'] as U8[]; this.fullnode_addresses = proto['fullnode_addresses'] as U8[]; this.validator_index = proto['validator_index'] as U64; } static ValidatorConfigParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): ValidatorConfig { const proto = $.parseStructProto(data, typeTag, repo, ValidatorConfig); return new ValidatorConfig(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, ValidatorConfig, typeParams); return result as unknown as ValidatorConfig; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, ValidatorConfig, typeParams); await result.loadFullState(app); return result as unknown as ValidatorConfig; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'ValidatorConfig', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class ValidatorInfo { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'ValidatorInfo'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'addr', typeTag: AtomicTypeTag.Address }, { name: 'voting_power', typeTag: AtomicTypeTag.U64 }, { name: 'config', typeTag: new StructTag(new HexString('0x1'), 'stake', 'ValidatorConfig', []) } ]; addr: HexString; voting_power: U64; config: ValidatorConfig; constructor(proto: any, public typeTag: TypeTag) { this.addr = proto['addr'] as HexString; this.voting_power = proto['voting_power'] as U64; this.config = proto['config'] as ValidatorConfig; } static ValidatorInfoParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): ValidatorInfo { const proto = $.parseStructProto(data, typeTag, repo, ValidatorInfo); return new ValidatorInfo(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'ValidatorInfo', []); } async loadFullState(app: $.AppType) { await this.config.loadFullState(app); this.__app = app; } } export class ValidatorPerformance { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'ValidatorPerformance'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'validators', typeTag: new VectorTag(new StructTag(new HexString('0x1'), 'stake', 'IndividualValidatorPerformance', [])) } ]; validators: IndividualValidatorPerformance[]; constructor(proto: any, public typeTag: TypeTag) { this.validators = proto['validators'] as IndividualValidatorPerformance[]; } static ValidatorPerformanceParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): ValidatorPerformance { const proto = $.parseStructProto(data, typeTag, repo, ValidatorPerformance); return new ValidatorPerformance(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, ValidatorPerformance, typeParams); return result as unknown as ValidatorPerformance; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, ValidatorPerformance, typeParams); await result.loadFullState(app); return result as unknown as ValidatorPerformance; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'ValidatorPerformance', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class ValidatorSet { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'ValidatorSet'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'consensus_scheme', typeTag: AtomicTypeTag.U8 }, { name: 'active_validators', typeTag: new VectorTag(new StructTag(new HexString('0x1'), 'stake', 'ValidatorInfo', [])) }, { name: 'pending_inactive', typeTag: new VectorTag(new StructTag(new HexString('0x1'), 'stake', 'ValidatorInfo', [])) }, { name: 'pending_active', typeTag: new VectorTag(new StructTag(new HexString('0x1'), 'stake', 'ValidatorInfo', [])) }, { name: 'total_voting_power', typeTag: AtomicTypeTag.U128 }, { name: 'total_joining_power', typeTag: AtomicTypeTag.U128 } ]; consensus_scheme: U8; active_validators: ValidatorInfo[]; pending_inactive: ValidatorInfo[]; pending_active: ValidatorInfo[]; total_voting_power: U128; total_joining_power: U128; constructor(proto: any, public typeTag: TypeTag) { this.consensus_scheme = proto['consensus_scheme'] as U8; this.active_validators = proto['active_validators'] as ValidatorInfo[]; this.pending_inactive = proto['pending_inactive'] as ValidatorInfo[]; this.pending_active = proto['pending_active'] as ValidatorInfo[]; this.total_voting_power = proto['total_voting_power'] as U128; this.total_joining_power = proto['total_joining_power'] as U128; } static ValidatorSetParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): ValidatorSet { const proto = $.parseStructProto(data, typeTag, repo, ValidatorSet); return new ValidatorSet(proto, typeTag); } static async load(repo: AptosParserRepo, client: AptosClient, address: HexString, typeParams: TypeTag[]) { const result = await repo.loadResource(client, address, ValidatorSet, typeParams); return result as unknown as ValidatorSet; } static async loadByApp(app: $.AppType, address: HexString, typeParams: TypeTag[]) { const result = await app.repo.loadResource(app.client, address, ValidatorSet, typeParams); await result.loadFullState(app); return result as unknown as ValidatorSet; } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'ValidatorSet', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export class WithdrawStakeEvent { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'WithdrawStakeEvent'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [ { name: 'pool_address', typeTag: AtomicTypeTag.Address }, { name: 'amount_withdrawn', typeTag: AtomicTypeTag.U64 } ]; pool_address: HexString; amount_withdrawn: U64; constructor(proto: any, public typeTag: TypeTag) { this.pool_address = proto['pool_address'] as HexString; this.amount_withdrawn = proto['amount_withdrawn'] as U64; } static WithdrawStakeEventParser(data: any, typeTag: TypeTag, repo: AptosParserRepo): WithdrawStakeEvent { const proto = $.parseStructProto(data, typeTag, repo, WithdrawStakeEvent); return new WithdrawStakeEvent(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'WithdrawStakeEvent', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export function add_stake_(owner: HexString, amount: U64, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); add_stake_with_cap_( ownership_cap, Coin.withdraw_(owner, $.copy(amount), $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), $c ); return; } export function buildPayload_add_stake( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'add_stake', typeParamStrings, [amount], isJSON); } export function add_stake_with_cap_(owner_cap: OwnerCapability, coins: Coin.Coin, $c: AptosDataCache): void { let temp$1, temp$2, temp$3, temp$4, amount, maximum_stake, pool_address, stake_pool, validator_set, voting_power; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); amount = Coin.value_(coins, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); if ($.copy(amount).eq(u64('0'))) { Coin.destroy_zero_(coins, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); return; } else { } validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); temp$1 = find_validator_(validator_set.active_validators, $.copy(pool_address), $c); if (Option.is_some_(temp$1, $c, [AtomicTypeTag.U64])) { temp$3 = true; } else { temp$2 = find_validator_(validator_set.pending_active, $.copy(pool_address), $c); temp$3 = Option.is_some_(temp$2, $c, [AtomicTypeTag.U64]); } if (temp$3) { update_voting_power_increase_($.copy(amount), $c); } else { } stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (is_current_epoch_validator_($.copy(pool_address), $c)) { Coin.merge_(stake_pool.pending_active, coins, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); } else { Coin.merge_(stake_pool.active, coins, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); } temp$4 = Staking_config.get_($c); [, maximum_stake] = Staking_config.get_required_stake_(temp$4, $c); voting_power = get_next_epoch_voting_power_(stake_pool, $c); if (!$.copy(voting_power).le($.copy(maximum_stake))) { throw $.abortCode(Error.invalid_argument_($.copy(ESTAKE_EXCEEDS_MAX), $c)); } Event.emit_event_( stake_pool.add_stake_events, new AddStakeEvent( { pool_address: $.copy(pool_address), amount_added: $.copy(amount) }, new SimpleStructTag(AddStakeEvent) ), $c, [new SimpleStructTag(AddStakeEvent)] ); return; } export function append_(v1: any[], v2: any[], $c: AptosDataCache, $p: TypeTag[] /* */): void { while (!Vector.is_empty_(v2, $c, [$p[0]])) { { Vector.push_back_(v1, Vector.pop_back_(v2, $c, [$p[0]]), $c, [$p[0]]); } } return; } export function assert_owner_cap_exists_(owner: HexString, $c: AptosDataCache): void { if (!$c.exists(new SimpleStructTag(OwnerCapability), $.copy(owner))) { throw $.abortCode(Error.not_found_($.copy(EOWNER_CAP_NOT_FOUND), $c)); } return; } export function assert_stake_pool_exists_(pool_address: HexString, $c: AptosDataCache): void { if (!stake_pool_exists_($.copy(pool_address), $c)) { throw $.abortCode(Error.invalid_argument_($.copy(ESTAKE_POOL_DOES_NOT_EXIST), $c)); } return; } export function calculate_rewards_amount_( stake_amount: U64, num_successful_proposals: U64, num_total_proposals: U64, rewards_rate: U64, rewards_rate_denominator: U64, $c: AptosDataCache ): U64 { let temp$1, rewards_denominator, rewards_numerator; rewards_numerator = u128($.copy(stake_amount)) .mul(u128($.copy(rewards_rate))) .mul(u128($.copy(num_successful_proposals))); rewards_denominator = u128($.copy(rewards_rate_denominator)).mul(u128($.copy(num_total_proposals))); if ($.copy(rewards_denominator).gt(u128('0'))) { temp$1 = u64($.copy(rewards_numerator).div($.copy(rewards_denominator))); } else { temp$1 = u64('0'); } return temp$1; } export function configure_allowed_validators_( aptos_framework: HexString, accounts: HexString[], $c: AptosDataCache ): void { let allowed, aptos_framework_address; aptos_framework_address = Signer.address_of_(aptos_framework, $c); System_addresses.assert_aptos_framework_(aptos_framework, $c); if (!$c.exists(new SimpleStructTag(AllowedValidators), $.copy(aptos_framework_address))) { $c.move_to( new SimpleStructTag(AllowedValidators), aptos_framework, new AllowedValidators({ accounts: $.copy(accounts) }, new SimpleStructTag(AllowedValidators)) ); } else { allowed = $c.borrow_global_mut( new SimpleStructTag(AllowedValidators), $.copy(aptos_framework_address) ); allowed.accounts = $.copy(accounts); } return; } export function deposit_owner_cap_(owner: HexString, owner_cap: OwnerCapability, $c: AptosDataCache): void { if (!!$c.exists(new SimpleStructTag(OwnerCapability), Signer.address_of_(owner, $c))) { throw $.abortCode(Error.not_found_($.copy(EOWNER_CAP_ALREADY_EXISTS), $c)); } $c.move_to(new SimpleStructTag(OwnerCapability), owner, owner_cap); return; } export function destroy_owner_cap_(owner_cap: OwnerCapability, $c: AptosDataCache): void { owner_cap; return; } export function distribute_rewards_( stake: Coin.Coin, num_successful_proposals: U64, num_total_proposals: U64, rewards_rate: U64, rewards_rate_denominator: U64, $c: AptosDataCache ): U64 { let temp$1, mint_cap, rewards, rewards_amount, stake_amount; stake_amount = Coin.value_(stake, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); if ($.copy(stake_amount).gt(u64('0'))) { temp$1 = calculate_rewards_amount_( $.copy(stake_amount), $.copy(num_successful_proposals), $.copy(num_total_proposals), $.copy(rewards_rate), $.copy(rewards_rate_denominator), $c ); } else { temp$1 = u64('0'); } rewards_amount = temp$1; if ($.copy(rewards_amount).gt(u64('0'))) { mint_cap = $c.borrow_global( new SimpleStructTag(AptosCoinCapabilities), new HexString('0x1') ).mint_cap; rewards = Coin.mint_($.copy(rewards_amount), mint_cap, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Coin.merge_(stake, rewards, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); } else { } return $.copy(rewards_amount); } export function extract_owner_cap_(owner: HexString, $c: AptosDataCache): OwnerCapability { let owner_address; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); return $c.move_from(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); } export function find_validator_(v: ValidatorInfo[], addr: HexString, $c: AptosDataCache): Option.Option { let i, len; i = u64('0'); len = Vector.length_(v, $c, [new SimpleStructTag(ValidatorInfo)]); while (true) { { } if (!$.copy(i).lt($.copy(len))) break; { if ( $.copy(Vector.borrow_(v, $.copy(i), $c, [new SimpleStructTag(ValidatorInfo)]).addr).hex() === $.copy(addr).hex() ) { return Option.some_($.copy(i), $c, [AtomicTypeTag.U64]); } else { } i = $.copy(i).add(u64('1')); } } return Option.none_($c, [AtomicTypeTag.U64]); } export function generate_validator_info_( addr: HexString, stake_pool: StakePool, config: ValidatorConfig, $c: AptosDataCache ): ValidatorInfo { let voting_power; voting_power = get_next_epoch_voting_power_(stake_pool, $c); return new ValidatorInfo( { addr: $.copy(addr), voting_power: $.copy(voting_power), config: $.copy(config) }, new SimpleStructTag(ValidatorInfo) ); } export function get_current_epoch_proposal_counts_(validator_index: U64, $c: AptosDataCache): [U64, U64] { let validator_performance, validator_performances; validator_performances = $c.borrow_global( new SimpleStructTag(ValidatorPerformance), new HexString('0x1') ).validators; validator_performance = Vector.borrow_(validator_performances, $.copy(validator_index), $c, [ new SimpleStructTag(IndividualValidatorPerformance) ]); return [$.copy(validator_performance.successful_proposals), $.copy(validator_performance.failed_proposals)]; } export function get_current_epoch_voting_power_(pool_address: HexString, $c: AptosDataCache): U64 { let temp$1, temp$2, active_stake, pending_inactive_stake, validator_state; assert_stake_pool_exists_($.copy(pool_address), $c); validator_state = get_validator_state_($.copy(pool_address), $c); if ($.copy(validator_state).eq($.copy(VALIDATOR_STATUS_ACTIVE))) { temp$1 = true; } else { temp$1 = $.copy(validator_state).eq($.copy(VALIDATOR_STATUS_PENDING_INACTIVE)); } if (temp$1) { active_stake = Coin.value_( $c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).active, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])] ); pending_inactive_stake = Coin.value_( $c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).pending_inactive, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])] ); temp$2 = $.copy(active_stake).add($.copy(pending_inactive_stake)); } else { temp$2 = u64('0'); } return temp$2; } export function get_delegated_voter_(pool_address: HexString, $c: AptosDataCache): HexString { assert_stake_pool_exists_($.copy(pool_address), $c); return $.copy($c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).delegated_voter); } export function get_lockup_secs_(pool_address: HexString, $c: AptosDataCache): U64 { assert_stake_pool_exists_($.copy(pool_address), $c); return $.copy($c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).locked_until_secs); } export function get_next_epoch_voting_power_(stake_pool: StakePool, $c: AptosDataCache): U64 { let value_active, value_pending_active, value_pending_inactive; value_pending_active = Coin.value_(stake_pool.pending_active, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); value_active = Coin.value_(stake_pool.active, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); value_pending_inactive = Coin.value_(stake_pool.pending_inactive, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); return $.copy(value_pending_active).add($.copy(value_active)).add($.copy(value_pending_inactive)); } export function get_operator_(pool_address: HexString, $c: AptosDataCache): HexString { assert_stake_pool_exists_($.copy(pool_address), $c); return $.copy($c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).operator_address); } export function get_owned_pool_address_(owner_cap: OwnerCapability, $c: AptosDataCache): HexString { return $.copy(owner_cap.pool_address); } export function get_remaining_lockup_secs_(pool_address: HexString, $c: AptosDataCache): U64 { let temp$1, lockup_time; assert_stake_pool_exists_($.copy(pool_address), $c); lockup_time = $.copy( $c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)).locked_until_secs ); if ($.copy(lockup_time).le(Timestamp.now_seconds_($c))) { temp$1 = u64('0'); } else { temp$1 = $.copy(lockup_time).sub(Timestamp.now_seconds_($c)); } return temp$1; } export function get_stake_(pool_address: HexString, $c: AptosDataCache): [U64, U64, U64, U64] { let stake_pool; assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global(new SimpleStructTag(StakePool), $.copy(pool_address)); return [ Coin.value_(stake_pool.active, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), Coin.value_(stake_pool.inactive, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), Coin.value_(stake_pool.pending_active, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), Coin.value_(stake_pool.pending_inactive, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]) ]; } export function get_validator_config_(pool_address: HexString, $c: AptosDataCache): [U8[], U8[], U8[]] { let validator_config; assert_stake_pool_exists_($.copy(pool_address), $c); validator_config = $c.borrow_global(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)); return [ $.copy(validator_config.consensus_pubkey), $.copy(validator_config.network_addresses), $.copy(validator_config.fullnode_addresses) ]; } export function get_validator_index_(pool_address: HexString, $c: AptosDataCache): U64 { assert_stake_pool_exists_($.copy(pool_address), $c); return $.copy( $c.borrow_global(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)).validator_index ); } export function get_validator_state_(pool_address: HexString, $c: AptosDataCache): U64 { let temp$1, temp$2, temp$3, temp$4, temp$5, temp$6, validator_set; validator_set = $c.borrow_global(new SimpleStructTag(ValidatorSet), new HexString('0x1')); temp$1 = find_validator_(validator_set.pending_active, $.copy(pool_address), $c); if (Option.is_some_(temp$1, $c, [AtomicTypeTag.U64])) { temp$6 = $.copy(VALIDATOR_STATUS_PENDING_ACTIVE); } else { temp$2 = find_validator_(validator_set.active_validators, $.copy(pool_address), $c); if (Option.is_some_(temp$2, $c, [AtomicTypeTag.U64])) { temp$5 = $.copy(VALIDATOR_STATUS_ACTIVE); } else { temp$3 = find_validator_(validator_set.pending_inactive, $.copy(pool_address), $c); if (Option.is_some_(temp$3, $c, [AtomicTypeTag.U64])) { temp$4 = $.copy(VALIDATOR_STATUS_PENDING_INACTIVE); } else { temp$4 = $.copy(VALIDATOR_STATUS_INACTIVE); } temp$5 = temp$4; } temp$6 = temp$5; } return temp$6; } export function increase_lockup_(owner: HexString, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); increase_lockup_with_cap_(ownership_cap, $c); return; } export function buildPayload_increase_lockup( isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'increase_lockup', typeParamStrings, [], isJSON); } export function increase_lockup_with_cap_(owner_cap: OwnerCapability, $c: AptosDataCache): void { let config, new_locked_until_secs, old_locked_until_secs, pool_address, stake_pool; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); config = Staking_config.get_($c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); old_locked_until_secs = $.copy(stake_pool.locked_until_secs); new_locked_until_secs = Timestamp.now_seconds_($c).add(Staking_config.get_recurring_lockup_duration_(config, $c)); if (!$.copy(old_locked_until_secs).lt($.copy(new_locked_until_secs))) { throw $.abortCode(Error.invalid_argument_($.copy(EINVALID_LOCKUP), $c)); } stake_pool.locked_until_secs = $.copy(new_locked_until_secs); Event.emit_event_( stake_pool.increase_lockup_events, new IncreaseLockupEvent( { pool_address: $.copy(pool_address), old_locked_until_secs: $.copy(old_locked_until_secs), new_locked_until_secs: $.copy(new_locked_until_secs) }, new SimpleStructTag(IncreaseLockupEvent) ), $c, [new SimpleStructTag(IncreaseLockupEvent)] ); return; } export function initialize_(aptos_framework: HexString, $c: AptosDataCache): void { let temp$1, temp$2, temp$3, temp$4, temp$5, temp$6, temp$7; System_addresses.assert_aptos_framework_(aptos_framework, $c); temp$7 = aptos_framework; temp$1 = u8('0'); temp$2 = Vector.empty_($c, [new SimpleStructTag(ValidatorInfo)]); temp$3 = Vector.empty_($c, [new SimpleStructTag(ValidatorInfo)]); temp$4 = Vector.empty_($c, [new SimpleStructTag(ValidatorInfo)]); temp$5 = u128('0'); temp$6 = u128('0'); $c.move_to( new SimpleStructTag(ValidatorSet), temp$7, new ValidatorSet( { consensus_scheme: temp$1, active_validators: temp$2, pending_inactive: temp$4, pending_active: temp$3, total_voting_power: temp$5, total_joining_power: temp$6 }, new SimpleStructTag(ValidatorSet) ) ); $c.move_to( new SimpleStructTag(ValidatorPerformance), aptos_framework, new ValidatorPerformance( { validators: Vector.empty_($c, [new SimpleStructTag(IndividualValidatorPerformance)]) }, new SimpleStructTag(ValidatorPerformance) ) ); return; } export function initialize_owner_(owner: HexString, $c: AptosDataCache): void { let temp$1, temp$10, temp$11, temp$12, temp$13, temp$14, temp$15, temp$16, temp$17, temp$18, temp$19, temp$2, temp$20, temp$3, temp$4, temp$5, temp$6, temp$7, temp$8, temp$9, owner_address; owner_address = Signer.address_of_(owner, $c); if (!is_allowed_($.copy(owner_address), $c)) { throw $.abortCode(Error.not_found_($.copy(EINELIGIBLE_VALIDATOR), $c)); } if (!!stake_pool_exists_($.copy(owner_address), $c)) { throw $.abortCode(Error.already_exists_($.copy(EALREADY_REGISTERED), $c)); } temp$20 = owner; temp$1 = Coin.zero_($c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); temp$2 = Coin.zero_($c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); temp$3 = Coin.zero_($c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); temp$4 = Coin.zero_($c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); temp$5 = u64('0'); temp$6 = $.copy(owner_address); temp$7 = $.copy(owner_address); temp$8 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(RegisterValidatorCandidateEvent)]); temp$9 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(SetOperatorEvent)]); temp$10 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(AddStakeEvent)]); temp$11 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(ReactivateStakeEvent)]); temp$12 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(RotateConsensusKeyEvent)]); temp$13 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(UpdateNetworkAndFullnodeAddressesEvent)]); temp$14 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(IncreaseLockupEvent)]); temp$15 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(JoinValidatorSetEvent)]); temp$16 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(DistributeRewardsEvent)]); temp$17 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(UnlockStakeEvent)]); temp$18 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(WithdrawStakeEvent)]); temp$19 = Account.new_event_handle_(owner, $c, [new SimpleStructTag(LeaveValidatorSetEvent)]); $c.move_to( new SimpleStructTag(StakePool), temp$20, new StakePool( { active: temp$1, inactive: temp$4, pending_active: temp$2, pending_inactive: temp$3, locked_until_secs: temp$5, operator_address: temp$6, delegated_voter: temp$7, initialize_validator_events: temp$8, set_operator_events: temp$9, add_stake_events: temp$10, reactivate_stake_events: temp$11, rotate_consensus_key_events: temp$12, update_network_and_fullnode_addresses_events: temp$13, increase_lockup_events: temp$14, join_validator_set_events: temp$15, distribute_rewards_events: temp$16, unlock_stake_events: temp$17, withdraw_stake_events: temp$18, leave_validator_set_events: temp$19 }, new SimpleStructTag(StakePool) ) ); $c.move_to( new SimpleStructTag(OwnerCapability), owner, new OwnerCapability({ pool_address: $.copy(owner_address) }, new SimpleStructTag(OwnerCapability)) ); return; } export function initialize_stake_owner_( owner: HexString, initial_stake_amount: U64, operator: HexString, voter: HexString, $c: AptosDataCache ): void { let account_address; initialize_owner_(owner, $c); $c.move_to( new SimpleStructTag(ValidatorConfig), owner, new ValidatorConfig( { consensus_pubkey: Vector.empty_($c, [AtomicTypeTag.U8]), network_addresses: Vector.empty_($c, [AtomicTypeTag.U8]), fullnode_addresses: Vector.empty_($c, [AtomicTypeTag.U8]), validator_index: u64('0') }, new SimpleStructTag(ValidatorConfig) ) ); if ($.copy(initial_stake_amount).gt(u64('0'))) { add_stake_(owner, $.copy(initial_stake_amount), $c); } else { } account_address = Signer.address_of_(owner, $c); if ($.copy(account_address).hex() !== $.copy(operator).hex()) { set_operator_(owner, $.copy(operator), $c); } else { } if ($.copy(account_address).hex() !== $.copy(voter).hex()) { set_delegated_voter_(owner, $.copy(voter), $c); } else { } return; } export function buildPayload_initialize_stake_owner( initial_stake_amount: U64, operator: HexString, voter: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload( new HexString('0x1'), 'stake', 'initialize_stake_owner', typeParamStrings, [initial_stake_amount, operator, voter], isJSON ); } export function initialize_validator_( account: HexString, consensus_pubkey: U8[], proof_of_possession: U8[], network_addresses: U8[], fullnode_addresses: U8[], $c: AptosDataCache ): void { let temp$1, temp$2, temp$3, pubkey_from_pop; temp$2 = $.copy(consensus_pubkey); temp$1 = Bls12381.proof_of_possession_from_bytes_($.copy(proof_of_possession), $c); temp$3 = Bls12381.public_key_from_bytes_with_pop_(temp$2, temp$1, $c); pubkey_from_pop = temp$3; if ( !Option.is_some_(pubkey_from_pop, $c, [new StructTag(new HexString('0x1'), 'bls12381', 'PublicKeyWithPoP', [])]) ) { throw $.abortCode(Error.invalid_argument_($.copy(EINVALID_PUBLIC_KEY), $c)); } initialize_owner_(account, $c); $c.move_to( new SimpleStructTag(ValidatorConfig), account, new ValidatorConfig( { consensus_pubkey: $.copy(consensus_pubkey), network_addresses: $.copy(network_addresses), fullnode_addresses: $.copy(fullnode_addresses), validator_index: u64('0') }, new SimpleStructTag(ValidatorConfig) ) ); return; } export function buildPayload_initialize_validator( consensus_pubkey: U8[], proof_of_possession: U8[], network_addresses: U8[], fullnode_addresses: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload( new HexString('0x1'), 'stake', 'initialize_validator', typeParamStrings, [consensus_pubkey, proof_of_possession, network_addresses, fullnode_addresses], isJSON ); } export function is_allowed_(account: HexString, $c: AptosDataCache): boolean { let temp$1, allowed; if (!$c.exists(new SimpleStructTag(AllowedValidators), new HexString('0x1'))) { temp$1 = true; } else { allowed = $c.borrow_global(new SimpleStructTag(AllowedValidators), new HexString('0x1')); temp$1 = Vector.contains_(allowed.accounts, account, $c, [AtomicTypeTag.Address]); } return temp$1; } export function is_current_epoch_validator_(pool_address: HexString, $c: AptosDataCache): boolean { let temp$1, validator_state; assert_stake_pool_exists_($.copy(pool_address), $c); validator_state = get_validator_state_($.copy(pool_address), $c); if ($.copy(validator_state).eq($.copy(VALIDATOR_STATUS_ACTIVE))) { temp$1 = true; } else { temp$1 = $.copy(validator_state).eq($.copy(VALIDATOR_STATUS_PENDING_INACTIVE)); } return temp$1; } export function join_validator_set_(operator: HexString, pool_address: HexString, $c: AptosDataCache): void { let temp$1; temp$1 = Staking_config.get_($c); if (!Staking_config.get_allow_validator_set_change_(temp$1, $c)) { throw $.abortCode(Error.invalid_argument_($.copy(ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED), $c)); } join_validator_set_internal_(operator, $.copy(pool_address), $c); return; } export function buildPayload_join_validator_set( pool_address: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'join_validator_set', typeParamStrings, [pool_address], isJSON); } export function join_validator_set_internal_(operator: HexString, pool_address: HexString, $c: AptosDataCache): void { let temp$1, temp$2, temp$3, temp$4, config, maximum_stake, minimum_stake, stake_pool, validator_config, validator_set, validator_set_size, voting_power; assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (!(Signer.address_of_(operator, $c).hex() === $.copy(stake_pool.operator_address).hex())) { throw $.abortCode(Error.unauthenticated_($.copy(ENOT_OPERATOR), $c)); } if (!get_validator_state_($.copy(pool_address), $c).eq($.copy(VALIDATOR_STATUS_INACTIVE))) { throw $.abortCode(Error.invalid_state_($.copy(EALREADY_ACTIVE_VALIDATOR), $c)); } config = Staking_config.get_($c); [minimum_stake, maximum_stake] = Staking_config.get_required_stake_(config, $c); voting_power = get_next_epoch_voting_power_(stake_pool, $c); if (!$.copy(voting_power).ge($.copy(minimum_stake))) { throw $.abortCode(Error.invalid_argument_($.copy(ESTAKE_TOO_LOW), $c)); } if (!$.copy(voting_power).le($.copy(maximum_stake))) { throw $.abortCode(Error.invalid_argument_($.copy(ESTAKE_TOO_HIGH), $c)); } update_voting_power_increase_($.copy(voting_power), $c); validator_config = $c.borrow_global_mut(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)); if (!!Vector.is_empty_(validator_config.consensus_pubkey, $c, [AtomicTypeTag.U8])) { throw $.abortCode(Error.invalid_argument_($.copy(EINVALID_PUBLIC_KEY), $c)); } validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); temp$4 = validator_set.pending_active; [temp$1, temp$2, temp$3] = [$.copy(pool_address), stake_pool, $.copy(validator_config)]; Vector.push_back_(temp$4, generate_validator_info_(temp$1, temp$2, temp$3, $c), $c, [ new SimpleStructTag(ValidatorInfo) ]); validator_set_size = Vector.length_(validator_set.active_validators, $c, [new SimpleStructTag(ValidatorInfo)]).add( Vector.length_(validator_set.pending_active, $c, [new SimpleStructTag(ValidatorInfo)]) ); if (!$.copy(validator_set_size).le($.copy(MAX_VALIDATOR_SET_SIZE))) { throw $.abortCode(Error.invalid_argument_($.copy(EVALIDATOR_SET_TOO_LARGE), $c)); } Event.emit_event_( stake_pool.join_validator_set_events, new JoinValidatorSetEvent({ pool_address: $.copy(pool_address) }, new SimpleStructTag(JoinValidatorSetEvent)), $c, [new SimpleStructTag(JoinValidatorSetEvent)] ); return; } export function leave_validator_set_(operator: HexString, pool_address: HexString, $c: AptosDataCache): void { let config, maybe_active_index, maybe_pending_active_index, stake_pool, validator_info, validator_set, validator_stake; config = Staking_config.get_($c); if (!Staking_config.get_allow_validator_set_change_(config, $c)) { throw $.abortCode(Error.invalid_argument_($.copy(ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED), $c)); } assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (!(Signer.address_of_(operator, $c).hex() === $.copy(stake_pool.operator_address).hex())) { throw $.abortCode(Error.unauthenticated_($.copy(ENOT_OPERATOR), $c)); } validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); maybe_pending_active_index = find_validator_(validator_set.pending_active, $.copy(pool_address), $c); if (Option.is_some_(maybe_pending_active_index, $c, [AtomicTypeTag.U64])) { Vector.swap_remove_( validator_set.pending_active, Option.extract_(maybe_pending_active_index, $c, [AtomicTypeTag.U64]), $c, [new SimpleStructTag(ValidatorInfo)] ); validator_stake = u128(get_next_epoch_voting_power_(stake_pool, $c)); if ($.copy(validator_set.total_joining_power).gt($.copy(validator_stake))) { validator_set.total_joining_power = $.copy(validator_set.total_joining_power).sub($.copy(validator_stake)); } else { validator_set.total_joining_power = u128('0'); } } else { maybe_active_index = find_validator_(validator_set.active_validators, $.copy(pool_address), $c); if (!Option.is_some_(maybe_active_index, $c, [AtomicTypeTag.U64])) { throw $.abortCode(Error.invalid_state_($.copy(ENOT_VALIDATOR), $c)); } validator_info = Vector.swap_remove_( validator_set.active_validators, Option.extract_(maybe_active_index, $c, [AtomicTypeTag.U64]), $c, [new SimpleStructTag(ValidatorInfo)] ); if (!Vector.length_(validator_set.active_validators, $c, [new SimpleStructTag(ValidatorInfo)]).gt(u64('0'))) { throw $.abortCode(Error.invalid_state_($.copy(ELAST_VALIDATOR), $c)); } Vector.push_back_(validator_set.pending_inactive, $.copy(validator_info), $c, [new SimpleStructTag(ValidatorInfo)]); Event.emit_event_( stake_pool.leave_validator_set_events, new LeaveValidatorSetEvent({ pool_address: $.copy(pool_address) }, new SimpleStructTag(LeaveValidatorSetEvent)), $c, [new SimpleStructTag(LeaveValidatorSetEvent)] ); } return; } export function buildPayload_leave_validator_set( pool_address: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'leave_validator_set', typeParamStrings, [pool_address], isJSON); } export function on_new_epoch_($c: AptosDataCache): void { let temp$1, temp$11, temp$12, temp$13, temp$2, temp$3, temp$7, temp$8, temp$9, config, i, i__10, i__4, len, len__5, minimum_stake, new_validator_info, next_epoch_validators, old_validator_info, pool_address, recurring_lockup_duration_secs, stake_pool, stake_pool__16, total_voting_power, validator, validator__6, validator_config, validator_config__15, validator_index, validator_info, validator_perf, validator_set, vlen, vlen__14; validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); config = Staking_config.get_($c); validator_perf = $c.borrow_global_mut( new SimpleStructTag(ValidatorPerformance), new HexString('0x1') ); i = u64('0'); len = Vector.length_(validator_set.active_validators, $c, [new SimpleStructTag(ValidatorInfo)]); while ($.copy(i).lt($.copy(len))) { { validator = Vector.borrow_(validator_set.active_validators, $.copy(i), $c, [new SimpleStructTag(ValidatorInfo)]); [temp$1, temp$2, temp$3] = [validator_perf, $.copy(validator.addr), config]; update_stake_pool_(temp$1, temp$2, temp$3, $c); i = $.copy(i).add(u64('1')); } } i__4 = u64('0'); len__5 = Vector.length_(validator_set.pending_inactive, $c, [new SimpleStructTag(ValidatorInfo)]); while ($.copy(i__4).lt($.copy(len__5))) { { validator__6 = Vector.borrow_(validator_set.pending_inactive, $.copy(i__4), $c, [ new SimpleStructTag(ValidatorInfo) ]); [temp$7, temp$8, temp$9] = [validator_perf, $.copy(validator__6.addr), config]; update_stake_pool_(temp$7, temp$8, temp$9, $c); i__4 = $.copy(i__4).add(u64('1')); } } append_(validator_set.active_validators, validator_set.pending_active, $c, [new SimpleStructTag(ValidatorInfo)]); validator_set.pending_inactive = Vector.empty_($c, [new SimpleStructTag(ValidatorInfo)]); next_epoch_validators = Vector.empty_($c, [new SimpleStructTag(ValidatorInfo)]); [minimum_stake] = Staking_config.get_required_stake_(config, $c); vlen = Vector.length_(validator_set.active_validators, $c, [new SimpleStructTag(ValidatorInfo)]); total_voting_power = u128('0'); i__10 = u64('0'); while (true) { { } if (!$.copy(i__10).lt($.copy(vlen))) break; { old_validator_info = Vector.borrow_mut_(validator_set.active_validators, $.copy(i__10), $c, [ new SimpleStructTag(ValidatorInfo) ]); pool_address = $.copy(old_validator_info.addr); validator_config = $c.borrow_global_mut( new SimpleStructTag(ValidatorConfig), $.copy(pool_address) ); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); [temp$11, temp$12, temp$13] = [$.copy(pool_address), stake_pool, $.copy(validator_config)]; new_validator_info = generate_validator_info_(temp$11, temp$12, temp$13, $c); if ($.copy(new_validator_info.voting_power).ge($.copy(minimum_stake))) { total_voting_power = $.copy(total_voting_power).add(u128($.copy(new_validator_info.voting_power))); Vector.push_back_(next_epoch_validators, $.copy(new_validator_info), $c, [new SimpleStructTag(ValidatorInfo)]); } else { } i__10 = $.copy(i__10).add(u64('1')); } } validator_set.active_validators = $.copy(next_epoch_validators); validator_set.total_voting_power = $.copy(total_voting_power); validator_set.total_joining_power = u128('0'); validator_perf.validators = Vector.empty_($c, [new SimpleStructTag(IndividualValidatorPerformance)]); recurring_lockup_duration_secs = Staking_config.get_recurring_lockup_duration_(config, $c); vlen__14 = Vector.length_(validator_set.active_validators, $c, [new SimpleStructTag(ValidatorInfo)]); validator_index = u64('0'); while (true) { { } if (!$.copy(validator_index).lt($.copy(vlen__14))) break; { validator_info = Vector.borrow_mut_(validator_set.active_validators, $.copy(validator_index), $c, [ new SimpleStructTag(ValidatorInfo) ]); validator_info.config.validator_index = $.copy(validator_index); validator_config__15 = $c.borrow_global_mut( new SimpleStructTag(ValidatorConfig), $.copy(validator_info.addr) ); validator_config__15.validator_index = $.copy(validator_index); Vector.push_back_( validator_perf.validators, new IndividualValidatorPerformance( { successful_proposals: u64('0'), failed_proposals: u64('0') }, new SimpleStructTag(IndividualValidatorPerformance) ), $c, [new SimpleStructTag(IndividualValidatorPerformance)] ); stake_pool__16 = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(validator_info.addr)); if ($.copy(stake_pool__16.locked_until_secs).le(Timestamp.now_seconds_($c))) { stake_pool__16.locked_until_secs = Timestamp.now_seconds_($c).add($.copy(recurring_lockup_duration_secs)); } else { } validator_index = $.copy(validator_index).add(u64('1')); } } return; } export function reactivate_stake_(owner: HexString, amount: U64, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); reactivate_stake_with_cap_(ownership_cap, $.copy(amount), $c); return; } export function buildPayload_reactivate_stake( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'reactivate_stake', typeParamStrings, [amount], isJSON); } export function reactivate_stake_with_cap_(owner_cap: OwnerCapability, amount: U64, $c: AptosDataCache): void { let pool_address, reactivated_coins, stake_pool, total_pending_inactive; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); total_pending_inactive = Coin.value_(stake_pool.pending_inactive, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); amount = Math64.min_($.copy(amount), $.copy(total_pending_inactive), $c); reactivated_coins = Coin.extract_(stake_pool.pending_inactive, $.copy(amount), $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Coin.merge_(stake_pool.active, reactivated_coins, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Event.emit_event_( stake_pool.reactivate_stake_events, new ReactivateStakeEvent( { pool_address: $.copy(pool_address), amount: $.copy(amount) }, new SimpleStructTag(ReactivateStakeEvent) ), $c, [new SimpleStructTag(ReactivateStakeEvent)] ); return; } export function remove_validators_(aptos_framework: HexString, validators: HexString[], $c: AptosDataCache): void { let temp$1, temp$2, active_validators, i, len, pending_inactive, validator, validator_index, validator_info, validator_set; System_addresses.assert_aptos_framework_(aptos_framework, $c); validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); active_validators = validator_set.active_validators; pending_inactive = validator_set.pending_inactive; len = Vector.length_(validators, $c, [AtomicTypeTag.Address]); i = u64('0'); while (true) { { } if (!$.copy(i).lt($.copy(len))) break; { validator = $.copy(Vector.borrow_(validators, $.copy(i), $c, [AtomicTypeTag.Address])); [temp$1, temp$2] = [active_validators, $.copy(validator)]; validator_index = find_validator_(temp$1, temp$2, $c); if (Option.is_some_(validator_index, $c, [AtomicTypeTag.U64])) { validator_info = Vector.swap_remove_( active_validators, $.copy(Option.borrow_(validator_index, $c, [AtomicTypeTag.U64])), $c, [new SimpleStructTag(ValidatorInfo)] ); Vector.push_back_(pending_inactive, $.copy(validator_info), $c, [new SimpleStructTag(ValidatorInfo)]); } else { } i = $.copy(i).add(u64('1')); } } return; } export function rotate_consensus_key_( operator: HexString, pool_address: HexString, new_consensus_pubkey: U8[], proof_of_possession: U8[], $c: AptosDataCache ): void { let temp$1, temp$2, temp$3, old_consensus_pubkey, pubkey_from_pop, stake_pool, validator_info; assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (!(Signer.address_of_(operator, $c).hex() === $.copy(stake_pool.operator_address).hex())) { throw $.abortCode(Error.unauthenticated_($.copy(ENOT_OPERATOR), $c)); } if (!$c.exists(new SimpleStructTag(ValidatorConfig), $.copy(pool_address))) { throw $.abortCode(Error.not_found_($.copy(EVALIDATOR_CONFIG), $c)); } validator_info = $c.borrow_global_mut(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)); old_consensus_pubkey = $.copy(validator_info.consensus_pubkey); temp$2 = $.copy(new_consensus_pubkey); temp$1 = Bls12381.proof_of_possession_from_bytes_($.copy(proof_of_possession), $c); temp$3 = Bls12381.public_key_from_bytes_with_pop_(temp$2, temp$1, $c); pubkey_from_pop = temp$3; if ( !Option.is_some_(pubkey_from_pop, $c, [new StructTag(new HexString('0x1'), 'bls12381', 'PublicKeyWithPoP', [])]) ) { throw $.abortCode(Error.invalid_argument_($.copy(EINVALID_PUBLIC_KEY), $c)); } validator_info.consensus_pubkey = $.copy(new_consensus_pubkey); Event.emit_event_( stake_pool.rotate_consensus_key_events, new RotateConsensusKeyEvent( { pool_address: $.copy(pool_address), old_consensus_pubkey: $.copy(old_consensus_pubkey), new_consensus_pubkey: $.copy(new_consensus_pubkey) }, new SimpleStructTag(RotateConsensusKeyEvent) ), $c, [new SimpleStructTag(RotateConsensusKeyEvent)] ); return; } export function buildPayload_rotate_consensus_key( pool_address: HexString, new_consensus_pubkey: U8[], proof_of_possession: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload( new HexString('0x1'), 'stake', 'rotate_consensus_key', typeParamStrings, [pool_address, new_consensus_pubkey, proof_of_possession], isJSON ); } export function set_delegated_voter_(owner: HexString, new_voter: HexString, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); set_delegated_voter_with_cap_(ownership_cap, $.copy(new_voter), $c); return; } export function buildPayload_set_delegated_voter( new_voter: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'set_delegated_voter', typeParamStrings, [new_voter], isJSON); } export function set_delegated_voter_with_cap_( owner_cap: OwnerCapability, new_voter: HexString, $c: AptosDataCache ): void { let pool_address, stake_pool; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); stake_pool.delegated_voter = $.copy(new_voter); return; } export function set_operator_(owner: HexString, new_operator: HexString, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); set_operator_with_cap_(ownership_cap, $.copy(new_operator), $c); return; } export function buildPayload_set_operator( new_operator: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'set_operator', typeParamStrings, [new_operator], isJSON); } export function set_operator_with_cap_(owner_cap: OwnerCapability, new_operator: HexString, $c: AptosDataCache): void { let old_operator, pool_address, stake_pool; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); old_operator = $.copy(stake_pool.operator_address); stake_pool.operator_address = $.copy(new_operator); Event.emit_event_( stake_pool.set_operator_events, new SetOperatorEvent( { pool_address: $.copy(pool_address), old_operator: $.copy(old_operator), new_operator: $.copy(new_operator) }, new SimpleStructTag(SetOperatorEvent) ), $c, [new SimpleStructTag(SetOperatorEvent)] ); return; } export function stake_pool_exists_(addr: HexString, $c: AptosDataCache): boolean { return $c.exists(new SimpleStructTag(StakePool), $.copy(addr)); } export function store_aptos_coin_mint_cap_( aptos_framework: HexString, mint_cap: Coin.MintCapability, $c: AptosDataCache ): void { System_addresses.assert_aptos_framework_(aptos_framework, $c); return $c.move_to( new SimpleStructTag(AptosCoinCapabilities), aptos_framework, new AptosCoinCapabilities({ mint_cap: $.copy(mint_cap) }, new SimpleStructTag(AptosCoinCapabilities)) ); } export function unlock_(owner: HexString, amount: U64, $c: AptosDataCache): void { let owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); unlock_with_cap_($.copy(amount), ownership_cap, $c); return; } export function buildPayload_unlock( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'unlock', typeParamStrings, [amount], isJSON); } export function unlock_with_cap_(amount: U64, owner_cap: OwnerCapability, $c: AptosDataCache): void { let amount__1, pool_address, stake_pool, unlocked_stake; if ($.copy(amount).eq(u64('0'))) { return; } else { } pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); amount__1 = Math64.min_( $.copy(amount), Coin.value_(stake_pool.active, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), $c ); unlocked_stake = Coin.extract_(stake_pool.active, $.copy(amount__1), $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Coin.merge_(stake_pool.pending_inactive, unlocked_stake, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Event.emit_event_( stake_pool.unlock_stake_events, new UnlockStakeEvent( { pool_address: $.copy(pool_address), amount_unlocked: $.copy(amount__1) }, new SimpleStructTag(UnlockStakeEvent) ), $c, [new SimpleStructTag(UnlockStakeEvent)] ); return; } export function update_network_and_fullnode_addresses_( operator: HexString, pool_address: HexString, new_network_addresses: U8[], new_fullnode_addresses: U8[], $c: AptosDataCache ): void { let old_fullnode_addresses, old_network_addresses, stake_pool, validator_info; assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (!(Signer.address_of_(operator, $c).hex() === $.copy(stake_pool.operator_address).hex())) { throw $.abortCode(Error.unauthenticated_($.copy(ENOT_OPERATOR), $c)); } if (!$c.exists(new SimpleStructTag(ValidatorConfig), $.copy(pool_address))) { throw $.abortCode(Error.not_found_($.copy(EVALIDATOR_CONFIG), $c)); } validator_info = $c.borrow_global_mut(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)); old_network_addresses = $.copy(validator_info.network_addresses); validator_info.network_addresses = $.copy(new_network_addresses); old_fullnode_addresses = $.copy(validator_info.fullnode_addresses); validator_info.fullnode_addresses = $.copy(new_fullnode_addresses); Event.emit_event_( stake_pool.update_network_and_fullnode_addresses_events, new UpdateNetworkAndFullnodeAddressesEvent( { pool_address: $.copy(pool_address), old_network_addresses: $.copy(old_network_addresses), new_network_addresses: $.copy(new_network_addresses), old_fullnode_addresses: $.copy(old_fullnode_addresses), new_fullnode_addresses: $.copy(new_fullnode_addresses) }, new SimpleStructTag(UpdateNetworkAndFullnodeAddressesEvent) ), $c, [new SimpleStructTag(UpdateNetworkAndFullnodeAddressesEvent)] ); return; } export function buildPayload_update_network_and_fullnode_addresses( pool_address: HexString, new_network_addresses: U8[], new_fullnode_addresses: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload( new HexString('0x1'), 'stake', 'update_network_and_fullnode_addresses', typeParamStrings, [pool_address, new_network_addresses, new_fullnode_addresses], isJSON ); } export function update_performance_statistics_( proposer_index: Option.Option, failed_proposer_indices: U64[], $c: AptosDataCache ): void { let cur_proposer_index, f, f_len, validator, validator__1, validator_index, validator_len, validator_perf; validator_perf = $c.borrow_global_mut( new SimpleStructTag(ValidatorPerformance), new HexString('0x1') ); validator_len = Vector.length_(validator_perf.validators, $c, [new SimpleStructTag(IndividualValidatorPerformance)]); if (Option.is_some_(proposer_index, $c, [AtomicTypeTag.U64])) { cur_proposer_index = Option.extract_(proposer_index, $c, [AtomicTypeTag.U64]); if ($.copy(cur_proposer_index).lt($.copy(validator_len))) { validator = Vector.borrow_mut_(validator_perf.validators, $.copy(cur_proposer_index), $c, [ new SimpleStructTag(IndividualValidatorPerformance) ]); validator.successful_proposals = $.copy(validator.successful_proposals).add(u64('1')); } else { } } else { } f = u64('0'); f_len = Vector.length_(failed_proposer_indices, $c, [AtomicTypeTag.U64]); while (true) { { } if (!$.copy(f).lt($.copy(f_len))) break; { validator_index = $.copy(Vector.borrow_(failed_proposer_indices, $.copy(f), $c, [AtomicTypeTag.U64])); if ($.copy(validator_index).lt($.copy(validator_len))) { validator__1 = Vector.borrow_mut_(validator_perf.validators, $.copy(validator_index), $c, [ new SimpleStructTag(IndividualValidatorPerformance) ]); validator__1.failed_proposals = $.copy(validator__1.failed_proposals).add(u64('1')); } else { } f = $.copy(f).add(u64('1')); } } return; } export function update_stake_pool_( validator_perf: ValidatorPerformance, pool_address: HexString, staking_config: Staking_config.StakingConfig, $c: AptosDataCache ): void { let cur_validator_perf, current_lockup_expiration, num_successful_proposals, num_total_proposals, rewards_active, rewards_amount, rewards_pending_inactive, rewards_rate, rewards_rate_denominator, stake_pool, validator_config; stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); validator_config = $c.borrow_global(new SimpleStructTag(ValidatorConfig), $.copy(pool_address)); cur_validator_perf = Vector.borrow_(validator_perf.validators, $.copy(validator_config.validator_index), $c, [ new SimpleStructTag(IndividualValidatorPerformance) ]); num_successful_proposals = $.copy(cur_validator_perf.successful_proposals); num_total_proposals = $.copy(cur_validator_perf.successful_proposals).add( $.copy(cur_validator_perf.failed_proposals) ); [rewards_rate, rewards_rate_denominator] = Staking_config.get_reward_rate_(staking_config, $c); rewards_active = distribute_rewards_( stake_pool.active, $.copy(num_successful_proposals), $.copy(num_total_proposals), $.copy(rewards_rate), $.copy(rewards_rate_denominator), $c ); rewards_pending_inactive = distribute_rewards_( stake_pool.pending_inactive, $.copy(num_successful_proposals), $.copy(num_total_proposals), $.copy(rewards_rate), $.copy(rewards_rate_denominator), $c ); rewards_amount = $.copy(rewards_active).add($.copy(rewards_pending_inactive)); Coin.merge_( stake_pool.active, Coin.extract_all_(stake_pool.pending_active, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]), $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])] ); current_lockup_expiration = $.copy(stake_pool.locked_until_secs); if (Timestamp.now_seconds_($c).ge($.copy(current_lockup_expiration))) { Coin.merge_( stake_pool.inactive, Coin.extract_all_(stake_pool.pending_inactive, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]), $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])] ); } else { } Event.emit_event_( stake_pool.distribute_rewards_events, new DistributeRewardsEvent( { pool_address: $.copy(pool_address), rewards_amount: $.copy(rewards_amount) }, new SimpleStructTag(DistributeRewardsEvent) ), $c, [new SimpleStructTag(DistributeRewardsEvent)] ); return; } export function update_voting_power_increase_(increase_amount: U64, $c: AptosDataCache): void { let temp$1, validator_set, voting_power_increase_limit; validator_set = $c.borrow_global_mut(new SimpleStructTag(ValidatorSet), new HexString('0x1')); temp$1 = Staking_config.get_($c); voting_power_increase_limit = u128(Staking_config.get_voting_power_increase_limit_(temp$1, $c)); validator_set.total_joining_power = $.copy(validator_set.total_joining_power).add(u128($.copy(increase_amount))); if ($.copy(validator_set.total_voting_power).gt(u128('0'))) { if ( !$.copy(validator_set.total_joining_power).le( $.copy(validator_set.total_voting_power).mul($.copy(voting_power_increase_limit)).div(u128('100')) ) ) { throw $.abortCode(Error.invalid_argument_($.copy(EVOTING_POWER_INCREASE_EXCEEDS_LIMIT), $c)); } } else { } return; } export function withdraw_(owner: HexString, withdraw_amount: U64, $c: AptosDataCache): void { let coins, owner_address, ownership_cap; owner_address = Signer.address_of_(owner, $c); assert_owner_cap_exists_($.copy(owner_address), $c); ownership_cap = $c.borrow_global(new SimpleStructTag(OwnerCapability), $.copy(owner_address)); coins = withdraw_with_cap_(ownership_cap, $.copy(withdraw_amount), $c); Coin.deposit_($.copy(owner_address), coins, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); return; } export function buildPayload_withdraw( withdraw_amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { const typeParamStrings = [] as string[]; return $.buildPayload(new HexString('0x1'), 'stake', 'withdraw', typeParamStrings, [withdraw_amount], isJSON); } export function withdraw_with_cap_(owner_cap: OwnerCapability, withdraw_amount: U64, $c: AptosDataCache): Coin.Coin { let temp$1, pending_inactive_stake, pool_address, stake_pool; pool_address = $.copy(owner_cap.pool_address); assert_stake_pool_exists_($.copy(pool_address), $c); stake_pool = $c.borrow_global_mut(new SimpleStructTag(StakePool), $.copy(pool_address)); if (get_validator_state_($.copy(pool_address), $c).eq($.copy(VALIDATOR_STATUS_INACTIVE))) { temp$1 = Timestamp.now_seconds_($c).ge($.copy(stake_pool.locked_until_secs)); } else { temp$1 = false; } if (temp$1) { pending_inactive_stake = Coin.extract_all_(stake_pool.pending_inactive, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); Coin.merge_(stake_pool.inactive, pending_inactive_stake, $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); } else { } withdraw_amount = Math64.min_( $.copy(withdraw_amount), Coin.value_(stake_pool.inactive, $c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]), $c ); if ($.copy(withdraw_amount).eq(u64('0'))) { return Coin.zero_($c, [new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', [])]); } else { } Event.emit_event_( stake_pool.withdraw_stake_events, new WithdrawStakeEvent( { pool_address: $.copy(pool_address), amount_withdrawn: $.copy(withdraw_amount) }, new SimpleStructTag(WithdrawStakeEvent) ), $c, [new SimpleStructTag(WithdrawStakeEvent)] ); return Coin.extract_(stake_pool.inactive, $.copy(withdraw_amount), $c, [ new StructTag(new HexString('0x1'), 'aptos_coin', 'AptosCoin', []) ]); } export function loadParsers(repo: AptosParserRepo) { repo.addParser('0x1::stake::AddStakeEvent', AddStakeEvent.AddStakeEventParser); repo.addParser('0x1::stake::AllowedValidators', AllowedValidators.AllowedValidatorsParser); repo.addParser('0x1::stake::AptosCoinCapabilities', AptosCoinCapabilities.AptosCoinCapabilitiesParser); repo.addParser('0x1::stake::DistributeRewardsEvent', DistributeRewardsEvent.DistributeRewardsEventParser); repo.addParser('0x1::stake::IncreaseLockupEvent', IncreaseLockupEvent.IncreaseLockupEventParser); repo.addParser( '0x1::stake::IndividualValidatorPerformance', IndividualValidatorPerformance.IndividualValidatorPerformanceParser ); repo.addParser('0x1::stake::JoinValidatorSetEvent', JoinValidatorSetEvent.JoinValidatorSetEventParser); repo.addParser('0x1::stake::LeaveValidatorSetEvent', LeaveValidatorSetEvent.LeaveValidatorSetEventParser); repo.addParser('0x1::stake::OwnerCapability', OwnerCapability.OwnerCapabilityParser); repo.addParser('0x1::stake::ReactivateStakeEvent', ReactivateStakeEvent.ReactivateStakeEventParser); repo.addParser( '0x1::stake::RegisterValidatorCandidateEvent', RegisterValidatorCandidateEvent.RegisterValidatorCandidateEventParser ); repo.addParser('0x1::stake::RotateConsensusKeyEvent', RotateConsensusKeyEvent.RotateConsensusKeyEventParser); repo.addParser('0x1::stake::SetOperatorEvent', SetOperatorEvent.SetOperatorEventParser); repo.addParser('0x1::stake::StakePool', StakePool.StakePoolParser); repo.addParser('0x1::stake::UnlockStakeEvent', UnlockStakeEvent.UnlockStakeEventParser); repo.addParser( '0x1::stake::UpdateNetworkAndFullnodeAddressesEvent', UpdateNetworkAndFullnodeAddressesEvent.UpdateNetworkAndFullnodeAddressesEventParser ); repo.addParser('0x1::stake::ValidatorConfig', ValidatorConfig.ValidatorConfigParser); repo.addParser('0x1::stake::ValidatorInfo', ValidatorInfo.ValidatorInfoParser); repo.addParser('0x1::stake::ValidatorPerformance', ValidatorPerformance.ValidatorPerformanceParser); repo.addParser('0x1::stake::ValidatorSet', ValidatorSet.ValidatorSetParser); repo.addParser('0x1::stake::WithdrawStakeEvent', WithdrawStakeEvent.WithdrawStakeEventParser); } export class App { constructor(public client: AptosClient, public repo: AptosParserRepo, public cache: AptosLocalCache) {} get moduleAddress() { { return moduleAddress; } } get moduleName() { { return moduleName; } } get AddStakeEvent() { return AddStakeEvent; } get AllowedValidators() { return AllowedValidators; } async loadAllowedValidators(owner: HexString, loadFull = true, fillCache = true) { const val = await AllowedValidators.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get AptosCoinCapabilities() { return AptosCoinCapabilities; } async loadAptosCoinCapabilities(owner: HexString, loadFull = true, fillCache = true) { const val = await AptosCoinCapabilities.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get DistributeRewardsEvent() { return DistributeRewardsEvent; } get IncreaseLockupEvent() { return IncreaseLockupEvent; } get IndividualValidatorPerformance() { return IndividualValidatorPerformance; } get JoinValidatorSetEvent() { return JoinValidatorSetEvent; } get LeaveValidatorSetEvent() { return LeaveValidatorSetEvent; } get OwnerCapability() { return OwnerCapability; } async loadOwnerCapability(owner: HexString, loadFull = true, fillCache = true) { const val = await OwnerCapability.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get ReactivateStakeEvent() { return ReactivateStakeEvent; } get RegisterValidatorCandidateEvent() { return RegisterValidatorCandidateEvent; } get RotateConsensusKeyEvent() { return RotateConsensusKeyEvent; } get SetOperatorEvent() { return SetOperatorEvent; } get StakePool() { return StakePool; } async loadStakePool(owner: HexString, loadFull = true, fillCache = true) { const val = await StakePool.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get UnlockStakeEvent() { return UnlockStakeEvent; } get UpdateNetworkAndFullnodeAddressesEvent() { return UpdateNetworkAndFullnodeAddressesEvent; } get ValidatorConfig() { return ValidatorConfig; } async loadValidatorConfig(owner: HexString, loadFull = true, fillCache = true) { const val = await ValidatorConfig.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get ValidatorInfo() { return ValidatorInfo; } get ValidatorPerformance() { return ValidatorPerformance; } async loadValidatorPerformance(owner: HexString, loadFull = true, fillCache = true) { const val = await ValidatorPerformance.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get ValidatorSet() { return ValidatorSet; } async loadValidatorSet(owner: HexString, loadFull = true, fillCache = true) { const val = await ValidatorSet.load(this.repo, this.client, owner, [] as TypeTag[]); if (loadFull) { await val.loadFullState(this); } if (fillCache) { this.cache.set(val.typeTag, owner, val); } return val; } get WithdrawStakeEvent() { return WithdrawStakeEvent; } payload_add_stake( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_add_stake(amount, isJSON); } async add_stake(_account: AptosAccount, amount: U64, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_add_stake(amount, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_increase_lockup( isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_increase_lockup(isJSON); } async increase_lockup(_account: AptosAccount, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_increase_lockup(_isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_initialize_stake_owner( initial_stake_amount: U64, operator: HexString, voter: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_initialize_stake_owner(initial_stake_amount, operator, voter, isJSON); } async initialize_stake_owner( _account: AptosAccount, initial_stake_amount: U64, operator: HexString, voter: HexString, option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_initialize_stake_owner(initial_stake_amount, operator, voter, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_initialize_validator( consensus_pubkey: U8[], proof_of_possession: U8[], network_addresses: U8[], fullnode_addresses: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_initialize_validator( consensus_pubkey, proof_of_possession, network_addresses, fullnode_addresses, isJSON ); } async initialize_validator( _account: AptosAccount, consensus_pubkey: U8[], proof_of_possession: U8[], network_addresses: U8[], fullnode_addresses: U8[], option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_initialize_validator( consensus_pubkey, proof_of_possession, network_addresses, fullnode_addresses, _isJSON ); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_join_validator_set( pool_address: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_join_validator_set(pool_address, isJSON); } async join_validator_set( _account: AptosAccount, pool_address: HexString, option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_join_validator_set(pool_address, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_leave_validator_set( pool_address: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_leave_validator_set(pool_address, isJSON); } async leave_validator_set( _account: AptosAccount, pool_address: HexString, option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_leave_validator_set(pool_address, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_reactivate_stake( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_reactivate_stake(amount, isJSON); } async reactivate_stake(_account: AptosAccount, amount: U64, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_reactivate_stake(amount, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_rotate_consensus_key( pool_address: HexString, new_consensus_pubkey: U8[], proof_of_possession: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_rotate_consensus_key(pool_address, new_consensus_pubkey, proof_of_possession, isJSON); } async rotate_consensus_key( _account: AptosAccount, pool_address: HexString, new_consensus_pubkey: U8[], proof_of_possession: U8[], option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_rotate_consensus_key( pool_address, new_consensus_pubkey, proof_of_possession, _isJSON ); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_set_delegated_voter( new_voter: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_set_delegated_voter(new_voter, isJSON); } async set_delegated_voter(_account: AptosAccount, new_voter: HexString, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_set_delegated_voter(new_voter, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_set_operator( new_operator: HexString, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_set_operator(new_operator, isJSON); } async set_operator(_account: AptosAccount, new_operator: HexString, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_set_operator(new_operator, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_unlock( amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_unlock(amount, isJSON); } async unlock(_account: AptosAccount, amount: U64, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_unlock(amount, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_update_network_and_fullnode_addresses( pool_address: HexString, new_network_addresses: U8[], new_fullnode_addresses: U8[], isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_update_network_and_fullnode_addresses( pool_address, new_network_addresses, new_fullnode_addresses, isJSON ); } async update_network_and_fullnode_addresses( _account: AptosAccount, pool_address: HexString, new_network_addresses: U8[], new_fullnode_addresses: U8[], option?: OptionTransaction, _isJSON = false ) { const payload__ = buildPayload_update_network_and_fullnode_addresses( pool_address, new_network_addresses, new_fullnode_addresses, _isJSON ); return $.sendPayloadTx(this.client, _account, payload__, option); } payload_withdraw( withdraw_amount: U64, isJSON = false ): TxnBuilderTypes.TransactionPayloadEntryFunction | Types.TransactionPayload_EntryFunctionPayload { return buildPayload_withdraw(withdraw_amount, isJSON); } async withdraw(_account: AptosAccount, withdraw_amount: U64, option?: OptionTransaction, _isJSON = false) { const payload__ = buildPayload_withdraw(withdraw_amount, _isJSON); return $.sendPayloadTx(this.client, _account, payload__, option); } }