import { DOT, ErrorCode, StatusCode } from "../../../src/interfaces/default"; import { u32, u64, u128, Bytes } from "@polkadot/types/primitive"; import { AccountId, BlockNumber, Moment } from "@polkadot/types/interfaces/runtime"; import BN from "bn.js"; import { UInt } from "@polkadot/types/codec"; import { TypeRegistry } from "@polkadot/types"; import { PendingStatusUpdate, StakedRelayerAPI } from "../../../src/parachain/staked-relayer"; import Big from "big.js"; import { AddressOrPair } from "@polkadot/api/types"; import { MockTransactionAPI } from "../transaction"; export class MockStakedRelayerAPI extends MockTransactionAPI implements StakedRelayerAPI { list(): Promise { throw new Error("Method not implemented."); } getWrappingFees(stakedRelayerId: AccountId): Promise { throw new Error("Method not implemented."); } getCollateralFees(stakedRelayerId: AccountId): Promise { throw new Error("Method not implemented."); } reportVaultTheft(vaultId: string, btcTxId?: string, merkleProof?: Bytes, rawTx?: Bytes): Promise { throw new Error("Method not implemented."); } registry = new TypeRegistry(); register(_planckStake: BN): Promise { return Promise.resolve(); } suggestStatusUpdate( _depositPlanck: BN, _statusCode: StatusCode, _message: string, _addError?: ErrorCode, _removeError?: string, _blockHash?: string ): Promise { return Promise.resolve(); } suggestInvalidBlock(_deposit: BN, _blockHash: string, _message: string): Promise { return Promise.resolve(); } voteOnStatusUpdate(_statusUpdateId: BN, _approve: boolean): Promise { return Promise.resolve(); } setAccount(_account: AddressOrPair): void { return; } deregister(): Promise { return Promise.resolve(); } async isStakedRelayerActive(_stakedRelayerId: AccountId): Promise { return true; } async isStakedRelayerInactive(_stakedRelayerId: AccountId): Promise { return false; } async getStakedDOTAmount(_activeStakedRelayerId: AccountId): Promise { return Promise.resolve(new BN(101456) as DOT); } numberToDOT(x: number): DOT { return new BN(x) as DOT; } async getStakedDOTAmounts(): Promise { const mockStakedDOTAmounts: DOT[] = [0.04, 4, 12].map((x) => this.numberToDOT(x)); return Promise.resolve(mockStakedDOTAmounts); } async getTotalStakedDOTAmount(): Promise { const stakedDOTAmounts: DOT[] = await this.getStakedDOTAmounts(); if (stakedDOTAmounts.length) { const sumReducer = (accumulator: DOT, currentValue: DOT) => accumulator.add(currentValue) as DOT; return stakedDOTAmounts.reduce(sumReducer); } return new BN(0) as DOT; } async getFeesEarned(_activeStakedRelayerId: AccountId): Promise { return new BN(120.6) as DOT; } async getMonitoredVaultsCollateralizationRate(): Promise> { return new Map(); } async getLastBTCDOTExchangeRateAndTime(): Promise<[u128, Moment]> { const registry = new TypeRegistry(); return [new UInt(registry, 123), new UInt(registry, 1600793494) as Moment]; } async getCurrentStateOfBTCParachain(): Promise { return { isRunning: true, isError: false, isShutdown: false, }; } async getOngoingStatusUpdateVotes(): Promise> { return [ { statusUpdateStorageKey: new u64(this.registry, 1), statusUpdateEnd: new u32(this.registry, 11208) as BlockNumber, statusUpdateAyes: 5, statusUpdateNays: 5, }, ]; } async getFeesWrapped(_stakedRelayerId: AccountId): Promise { return new Big("10.22"); } async getFeesCollateral(_stakedRelayerId: AccountId): Promise { return new Big("10.22"); } async getAPY(_stakedRelayerId: AccountId): Promise { return "130.23988247"; } async getSLA(_stakedRelayerId: AccountId): Promise { return 20; } async getMaxSLA(): Promise { return 100; } async getStakedRelayersMaturityPeriod(): Promise { return new BN(11208) as BlockNumber; } }