diff --git a/sdk/armada-protocol-common/src/common/interfaces/IArmadaManager.ts b/sdk/armada-protocol-common/src/common/interfaces/IArmadaManager.ts index df0b1acc20..541d537d2a 100644 --- a/sdk/armada-protocol-common/src/common/interfaces/IArmadaManager.ts +++ b/sdk/armada-protocol-common/src/common/interfaces/IArmadaManager.ts @@ -6,7 +6,7 @@ import { IArmadaPoolId } from './IArmadaPoolId' import { IArmadaPoolInfo } from './IArmadaPoolInfo' import { IArmadaPosition } from './IArmadaPosition' import { IArmadaPositionId } from './IArmadaPositionId' -import { IRebalanceData } from './IRebalanceData' +import { IArmadaRebalanceData } from './IArmadaRebalanceData' /** * @name IArmadaManager @@ -132,7 +132,7 @@ export interface IArmadaManager { */ rebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise /** @@ -145,7 +145,7 @@ export interface IArmadaManager { */ adjustBuffer(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise /** GOVERNANCE TRANSACTIONS */ @@ -300,7 +300,7 @@ export interface IArmadaManager { */ forceRebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise /** diff --git a/sdk/armada-protocol-common/src/common/interfaces/IArmadaRebalanceData.ts b/sdk/armada-protocol-common/src/common/interfaces/IArmadaRebalanceData.ts new file mode 100644 index 0000000000..dbd352f030 --- /dev/null +++ b/sdk/armada-protocol-common/src/common/interfaces/IArmadaRebalanceData.ts @@ -0,0 +1,62 @@ +import { + AddressDataSchema, + HexData, + IAddress, + ITokenAmount, + TokenAmountDataSchema, +} from '@summerfi/sdk-common/common' +import { isHex } from 'viem' +import { z } from 'zod' + +/** + * Unique signature to provide branded types to the interface + */ +export const __signature__: unique symbol = Symbol() + +/** + * @name IArmadaRebalanceData + * @description Data structure for rebalancing assets, used by Keepers of a fleet + */ +export interface IArmadaRebalanceData { + /** Signature to differentiate from similar interfaces */ + readonly [__signature__]: symbol + /** Ark where the tokens are taken from */ + readonly fromArk: IAddress + /** Ark where the tokens are moved to */ + readonly toArk: IAddress + /** Amount of tokens to be moved */ + readonly amount: ITokenAmount + /** Data to be passed to the `board` function of the `toArk` */ + readonly boardData: HexData + /** Data to be passed to the `disembark` function of the `fromArk` */ + readonly disembarkData: HexData +} + +/** + * @description Zod schema for IArmadaRebalanceData + */ +export const ArmadaRebalanceDataSchema = z.object({ + fromArk: AddressDataSchema, + toArk: AddressDataSchema, + amount: TokenAmountDataSchema, + boardData: z.custom((val) => isHex(val)), + disembarkData: z.custom((val) => isHex(val)), +}) + +/** + * Type definition for the ArmadaRebalanceData data + */ +export type IArmadaRebalanceDataData = Readonly> + +/** + * @description Type guard for IArmadaRebalanceData + * @param maybeRebalanceData + * @returns true if the object is an IArmadaRebalanceData + */ +export function isArmadaRebalanceData( + maybeRebalanceData: unknown, +): maybeRebalanceData is IArmadaRebalanceData { + const zodReturn = ArmadaRebalanceDataSchema.safeParse(maybeRebalanceData) + + return zodReturn.success +} diff --git a/sdk/armada-protocol-common/src/common/interfaces/IRebalanceData.ts b/sdk/armada-protocol-common/src/common/interfaces/IRebalanceData.ts deleted file mode 100644 index 7cc9be5a58..0000000000 --- a/sdk/armada-protocol-common/src/common/interfaces/IRebalanceData.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - AddressDataSchema, - IAddress, - ITokenAmount, - TokenAmountDataSchema, -} from '@summerfi/sdk-common/common' -import { z } from 'zod' - -/** - * Unique signature to provide branded types to the interface - */ -export const __signature__: unique symbol = Symbol() - -/** - * @name IRebalanceData - * @description Data structure for rebalancing assets, used by Keepers of a fleet - */ -export interface IRebalanceData { - /** Signature to differentiate from similar interfaces */ - readonly [__signature__]: symbol - /** Ark where the tokens are taken from */ - readonly fromArk: IAddress - /** Ark where the tokens are moved to */ - readonly toArk: IAddress - /** Amount of tokens to be moved */ - readonly amount: ITokenAmount -} - -/** - * @description Zod schema for IRebalanceData - */ -export const RebalanceDataSchema = z.object({ - fromArk: AddressDataSchema, - toArk: AddressDataSchema, - amount: TokenAmountDataSchema, -}) - -/** - * Type definition for the RebalanceData data - */ -export type IRebalanceDataData = Readonly> - -/** - * @description Type guard for IRebalanceData - * @param maybeRebalanceData - * @returns true if the object is an IRebalanceData - */ -export function isRebalanceData(maybeRebalanceData: unknown): maybeRebalanceData is IRebalanceData { - const zodReturn = RebalanceDataSchema.safeParse(maybeRebalanceData) - - return zodReturn.success -} diff --git a/sdk/armada-protocol-common/src/common/interfaces/index.ts b/sdk/armada-protocol-common/src/common/interfaces/index.ts index 6df4e0e4eb..38c7202452 100644 --- a/sdk/armada-protocol-common/src/common/interfaces/index.ts +++ b/sdk/armada-protocol-common/src/common/interfaces/index.ts @@ -32,7 +32,7 @@ export { } from './IArmadaProtocol' export type { IArmadaProtocol, IArmadaProtocolData } from './IArmadaProtocol' export { - __signature__ as __irebalancedata__, - isRebalanceData, - type IRebalanceData, -} from './IRebalanceData' + __signature__ as __iarmadarebalancedata__, + isArmadaRebalanceData, + type IArmadaRebalanceData, +} from './IArmadaRebalanceData' diff --git a/sdk/armada-protocol-common/src/orders/interfaces/IArmadaKeepersParameters.ts b/sdk/armada-protocol-common/src/orders/interfaces/IArmadaKeepersParameters.ts new file mode 100644 index 0000000000..2542f5f459 --- /dev/null +++ b/sdk/armada-protocol-common/src/orders/interfaces/IArmadaKeepersParameters.ts @@ -0,0 +1,57 @@ +import { IUser, isUser } from '@summerfi/sdk-common' +import { z } from 'zod' +import { IArmadaPoolId, isArmadaPoolId } from '../../common/interfaces/IArmadaPoolId' +import { + IArmadaRebalanceData, + isArmadaRebalanceData, +} from '../../common/interfaces/IArmadaRebalanceData' + +/** + * Unique signature to provide branded types to the interface + */ +export const __signature__: unique symbol = Symbol() + +/** + * Parameters for an Armada Protocol simulation + */ +export interface IArmadaKeepersParameters extends IArmadaKeepersParametersData { + /** Signature used to differentiate it from similar interfaces */ + readonly [__signature__]: symbol + /** Keeper that triggered the simulation */ + readonly keeper: IUser + /** ID of the pool where the operation is taking place */ + readonly poolId: IArmadaPoolId + /** Rebalance data */ + readonly rebalanceData: IArmadaRebalanceData[] +} + +/** + * Zod schema for the Armada parameters + */ +export const ArmadaKeepersParametersDataSchema = z.object({ + keeper: z.custom((val) => isUser(val)), + poolId: z.custom((val) => isArmadaPoolId(val)), + rebalanceData: z.custom((val) => + (val as unknown[]).every((val) => isArmadaRebalanceData(val)), + ), +}) + +/** + * Type for the data part of the IArmadaParameters interface + */ +export type IArmadaKeepersParametersData = Readonly< + z.infer +> + +/** + * Type guard for the Armada Protocol simulation parameters + * + * @param maybeArmadaParameters Parameters to check + * + * @returns True if the parameters are valid + */ +export function isArmadaKeepersParameters( + maybeArmadaParameters: unknown, +): maybeArmadaParameters is IArmadaKeepersParameters { + return ArmadaKeepersParametersDataSchema.safeParse(maybeArmadaParameters).success +} diff --git a/sdk/armada-protocol-common/src/orders/interfaces/IArmadaParameters.ts b/sdk/armada-protocol-common/src/orders/interfaces/IArmadaUsersParameters.ts similarity index 69% rename from sdk/armada-protocol-common/src/orders/interfaces/IArmadaParameters.ts rename to sdk/armada-protocol-common/src/orders/interfaces/IArmadaUsersParameters.ts index e98c5e8798..529ff95634 100644 --- a/sdk/armada-protocol-common/src/orders/interfaces/IArmadaParameters.ts +++ b/sdk/armada-protocol-common/src/orders/interfaces/IArmadaUsersParameters.ts @@ -11,7 +11,7 @@ export const __signature__: unique symbol = Symbol() /** * Parameters for an Armada Protocol simulation */ -export interface IArmadaParameters extends IArmadaParametersData { +export interface IArmadaUsersParameters extends IArmadaUsersParametersData { /** Signature used to differentiate it from similar interfaces */ readonly [__signature__]: symbol /** User that triggered the simulation */ @@ -27,17 +27,17 @@ export interface IArmadaParameters extends IArmadaParametersData { /** * Zod schema for the Armada parameters */ -export const ArmadaParametersDataSchema = z.object({ - user: z.custom((val) => isUser(val)), - poolId: z.custom((val) => isArmadaPoolId(val)), +export const ArmadaUsersParametersDataSchema = z.object({ + user: z.custom(isUser), + poolId: z.custom(isArmadaPoolId), operation: z.nativeEnum(ArmadaOperationType), - amount: z.custom((val) => isTokenAmount(val)), + amount: z.custom(isTokenAmount), }) /** * Type for the data part of the IArmadaParameters interface */ -export type IArmadaParametersData = Readonly> +export type IArmadaUsersParametersData = Readonly> /** * Type guard for the Armada Protocol simulation parameters @@ -46,8 +46,8 @@ export type IArmadaParametersData = Readonly((val) => isUser(val)), + poolId: z.custom((val) => isArmadaPoolId(val)), + rebalanceData: z.custom((val) => + (val as unknown[]).every((val) => isArmadaRebalanceData(val)), + ), + type: z.literal(SimulationType.ArmadaUsers), +}) + +/** + * Type for the data part of the IArmadaKeepersSimulation interface + */ +export type IArmadaKeepersSimulationData = Readonly> + +/** + * @description Type guard for IArmadaKeepersSimulation + * @param maybeArmadaKeepersSimulationData + * @returns true if the object is an IArmadaKeepersSimulation + */ +export function isArmadaKeepersSimulation( + maybeArmadaKeepersSimulationData: unknown, +): maybeArmadaKeepersSimulationData is IArmadaKeepersSimulation { + return ArmadaKeepersSimulationSchema.safeParse(maybeArmadaKeepersSimulationData).success +} diff --git a/sdk/armada-protocol-common/src/simulator/interfaces/IArmadaSimulation.ts b/sdk/armada-protocol-common/src/simulator/interfaces/IArmadaUsersSimulation.ts similarity index 59% rename from sdk/armada-protocol-common/src/simulator/interfaces/IArmadaSimulation.ts rename to sdk/armada-protocol-common/src/simulator/interfaces/IArmadaUsersSimulation.ts index eb44f53275..e49cfa49a6 100644 --- a/sdk/armada-protocol-common/src/simulator/interfaces/IArmadaSimulation.ts +++ b/sdk/armada-protocol-common/src/simulator/interfaces/IArmadaUsersSimulation.ts @@ -9,10 +9,10 @@ import { IArmadaPosition, isArmadaPosition } from '../../common/interfaces/IArma export const __signature__: unique symbol = Symbol() /** - * @interface IArmadaSimulation - * @description Simulation result of an Armada Protocol operation + * @interface IArmadaUsersSimulation + * @description Simulation result of an Armada Protocol Users operation */ -export interface IArmadaSimulation extends ISimulation { +export interface IArmadaUsersSimulation extends ISimulation { /** Signature used to differentiate it from similar interfaces */ readonly [__signature__]: symbol /** User for which the simulation was performed */ @@ -23,32 +23,32 @@ export interface IArmadaSimulation extends ISimulation { readonly newPosition: IArmadaPosition // Re-declaring the properties to narrow the types - readonly type: SimulationType.Armada + readonly type: SimulationType.ArmadaUsers } /** * @description Zod schema for IArmadaSimulation */ -export const ArmadaSimulationSchema = z.object({ +export const ArmadaUsersSimulationSchema = z.object({ ...SimulationSchema.shape, user: z.custom((val) => isUser(val)), previousPosition: z.custom((val) => isArmadaPosition(val)), newPosition: z.custom((val) => isArmadaPosition(val)), - type: z.literal(SimulationType.Armada), + type: z.literal(SimulationType.ArmadaUsers), }) /** * Type for the data part of the IArmadaSimulation interface */ -export type IArmadaSimulationData = Readonly> +export type IArmadaUsersSimulationData = Readonly> /** - * @description Type guard for IRefinanceSimulation - * @param maybeArmadaSimulationData - * @returns true if the object is an IArmadaSimulation + * @description Type guard for IArmadaUsersSimulation + * @param maybeArmadaUsersSimulationData + * @returns true if the object is an IArmadaUsersSimulation */ -export function isArmadaSimulation( - maybeArmadaSimulationData: unknown, -): maybeArmadaSimulationData is IArmadaSimulation { - return ArmadaSimulationSchema.safeParse(maybeArmadaSimulationData).success +export function isArmadaUsersSimulation( + maybeArmadaUsersSimulationData: unknown, +): maybeArmadaUsersSimulationData is IArmadaUsersSimulation { + return ArmadaUsersSimulationSchema.safeParse(maybeArmadaUsersSimulationData).success } diff --git a/sdk/armada-protocol-common/src/simulator/interfaces/index.ts b/sdk/armada-protocol-common/src/simulator/interfaces/index.ts index 7d8361396c..9a65985509 100644 --- a/sdk/armada-protocol-common/src/simulator/interfaces/index.ts +++ b/sdk/armada-protocol-common/src/simulator/interfaces/index.ts @@ -1,15 +1,21 @@ +export { + ArmadaKeepersSimulationSchema, + __signature__ as __iarmadakeeperssimulation__, + isArmadaKeepersSimulation, + type IArmadaKeepersSimulation, + type IArmadaKeepersSimulationData, +} from './IArmadaKeepersSimulation' export { ArmadaSimulatedPositionDataSchema, __signature__ as __iarmadasimulatedposition__, isArmadaSimulatedPosition, -} from './IArmadaSimulatedPosition' -export type { - IArmadaSimulatedPosition, - IArmadaSimulatedPositionData, + type IArmadaSimulatedPosition, + type IArmadaSimulatedPositionData, } from './IArmadaSimulatedPosition' export { - ArmadaSimulationSchema, - __signature__ as __iarmadasimulation__, - isArmadaSimulation, -} from './IArmadaSimulation' -export type { IArmadaSimulation, IArmadaSimulationData } from './IArmadaSimulation' + ArmadaUsersSimulationSchema, + __signature__ as __iarmadauserssimulation__, + isArmadaUsersSimulation, + type IArmadaUsersSimulation, + type IArmadaUsersSimulationData, +} from './IArmadaUsersSimulation' diff --git a/sdk/armada-protocol-service/src/common/implementation/ArmadaManager.ts b/sdk/armada-protocol-service/src/common/implementation/ArmadaManager.ts index aee48b5b7f..6264ee33ee 100644 --- a/sdk/armada-protocol-service/src/common/implementation/ArmadaManager.ts +++ b/sdk/armada-protocol-service/src/common/implementation/ArmadaManager.ts @@ -6,7 +6,7 @@ import { IArmadaPoolInfo, IArmadaPosition, IArmadaPositionId, - IRebalanceData, + IArmadaRebalanceData, } from '@summerfi/armada-protocol-common' import { IConfigurationProvider } from '@summerfi/configuration-provider-common' import { IContractsProvider } from '@summerfi/contracts-provider-common' @@ -189,7 +189,7 @@ export class ArmadaManager implements IArmadaManager { /** @see IArmadaManager.rebalance */ async rebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { const fleetContract = await this._contractsProvider.getFleetCommanderContract({ chainInfo: params.poolId.chainInfo, @@ -202,7 +202,7 @@ export class ArmadaManager implements IArmadaManager { /** @see IArmadaManager.adjustBuffer */ async adjustBuffer(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { const fleetContract = await this._contractsProvider.getFleetCommanderContract({ chainInfo: params.poolId.chainInfo, @@ -356,7 +356,7 @@ export class ArmadaManager implements IArmadaManager { /** @see IArmadaManager.forceRebalance */ async forceRebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { const fleetContract = await this._contractsProvider.getFleetCommanderContract({ chainInfo: params.poolId.chainInfo, diff --git a/sdk/armada-protocol-service/src/common/implementation/ArmadaRebalanceData.ts b/sdk/armada-protocol-service/src/common/implementation/ArmadaRebalanceData.ts new file mode 100644 index 0000000000..f0e8d4b2e4 --- /dev/null +++ b/sdk/armada-protocol-service/src/common/implementation/ArmadaRebalanceData.ts @@ -0,0 +1,39 @@ +import { IArmadaRebalanceData, __iarmadarebalancedata__ } from '@summerfi/armada-protocol-common' +import { HexData, IAddress, ITokenAmount } from '@summerfi/sdk-common' + +/** + * Type for the parameters of TokenAmount + */ +export type RebalanceDataParameters = Omit + +/** + * @class RebalanceData + * @see IArmadaRebalanceData + */ +export class ArmadaRebalanceData implements IArmadaRebalanceData { + /** SIGNATURE */ + readonly [__iarmadarebalancedata__] = __iarmadarebalancedata__ + + /** ATTRIBUTES */ + readonly fromArk: IAddress + readonly toArk: IAddress + readonly amount: ITokenAmount + readonly boardData: HexData + readonly disembarkData: HexData + + /** FACTORY */ + + static createFrom(params: RebalanceDataParameters): IArmadaRebalanceData { + return new ArmadaRebalanceData(params) + } + + /** SEALED CONSTRUCTOR */ + + private constructor(params: IArmadaRebalanceData) { + this.fromArk = params.fromArk + this.toArk = params.toArk + this.amount = params.amount + this.boardData = params.boardData + this.disembarkData = params.disembarkData + } +} diff --git a/sdk/armada-protocol-service/src/common/implementation/ArmadaSimulation.ts b/sdk/armada-protocol-service/src/common/implementation/ArmadaSimulation.ts deleted file mode 100644 index 5ad8642179..0000000000 --- a/sdk/armada-protocol-service/src/common/implementation/ArmadaSimulation.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - IArmadaPosition, - IArmadaSimulation, - IArmadaSimulationData, - __iarmadasimulation__, -} from '@summerfi/armada-protocol-common' -import { SerializationService } from '@summerfi/sdk-common/services' -import { Simulation, SimulationType } from '@summerfi/sdk-common/simulation' -import { IUser } from '@summerfi/sdk-common/user' - -/** - * Type for the parameters of ArmadaSimulation - */ -export type ArmadaSimulationParameters = Omit - -/** - * @name ArmadaSimulation - * @see IArmadaSimulation - */ -export class ArmadaSimulation extends Simulation implements IArmadaSimulation { - /** SIGNATURE */ - readonly [__iarmadasimulation__] = __iarmadasimulation__ - - /** ATTRIBUTES */ - readonly type = SimulationType.Armada - readonly user: IUser - readonly previousPosition: IArmadaPosition - readonly newPosition: IArmadaPosition - - /** Factory method */ - static createFrom(params: ArmadaSimulationParameters): ArmadaSimulation { - return new ArmadaSimulation(params) - } - - /** Sealed constructor */ - private constructor(params: ArmadaSimulationParameters) { - super(params) - - this.user = params.user - this.previousPosition = params.previousPosition - this.newPosition = params.newPosition - } -} - -SerializationService.registerClass(ArmadaSimulation) diff --git a/sdk/armada-protocol-service/src/common/implementation/RebalanceData.ts b/sdk/armada-protocol-service/src/common/implementation/RebalanceData.ts deleted file mode 100644 index 41ef2911e5..0000000000 --- a/sdk/armada-protocol-service/src/common/implementation/RebalanceData.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { IRebalanceData, __irebalancedata__ } from '@summerfi/armada-protocol-common' -import { IAddress, ITokenAmount } from '@summerfi/sdk-common' - -/** - * Type for the parameters of TokenAmount - */ -export type RebalanceDataParameters = Omit - -/** - * @class RebalanceData - * @see IRebalanceData - */ -export class RebalanceData implements IRebalanceData { - /** SIGNATURE */ - readonly [__irebalancedata__] = __irebalancedata__ - - /** ATTRIBUTES */ - readonly fromArk: IAddress - readonly toArk: IAddress - readonly amount: ITokenAmount - - /** FACTORY */ - - static createFrom(params: RebalanceDataParameters): IRebalanceData { - return new RebalanceData(params) - } - - /** SEALED CONSTRUCTOR */ - - private constructor(params: IRebalanceData) { - this.fromArk = params.fromArk - this.toArk = params.toArk - this.amount = params.amount - } -} diff --git a/sdk/armada-protocol-service/src/common/implementation/index.ts b/sdk/armada-protocol-service/src/common/implementation/index.ts index 612384d043..f6b5c9a782 100644 --- a/sdk/armada-protocol-service/src/common/implementation/index.ts +++ b/sdk/armada-protocol-service/src/common/implementation/index.ts @@ -6,5 +6,4 @@ export * from './ArmadaPoolInfo' export * from './ArmadaPosition' export * from './ArmadaPositionId' export * from './ArmadaProtocol' -export * from './ArmadaSimulation' -export * from './RebalanceData' +export * from './ArmadaRebalanceData' diff --git a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulatedPosition.ts b/sdk/armada-protocol-service/src/simulator/implementation/common/ArmadaSimulatedPosition.ts similarity index 96% rename from sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulatedPosition.ts rename to sdk/armada-protocol-service/src/simulator/implementation/common/ArmadaSimulatedPosition.ts index f1ee28cfd7..8da4a713dd 100644 --- a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulatedPosition.ts +++ b/sdk/armada-protocol-service/src/simulator/implementation/common/ArmadaSimulatedPosition.ts @@ -5,7 +5,7 @@ import { __iarmadasimulatedposition__, } from '@summerfi/armada-protocol-common' import { ITokenAmount } from '@summerfi/sdk-common' -import { ArmadaPosition } from '../../common/implementation/ArmadaPosition' +import { ArmadaPosition } from '../../../common/implementation/ArmadaPosition' /** * Type for the parameters of ArmadaSimulatedPosition diff --git a/sdk/armada-protocol-service/src/simulator/implementation/common/index.ts b/sdk/armada-protocol-service/src/simulator/implementation/common/index.ts new file mode 100644 index 0000000000..301aff65b3 --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/common/index.ts @@ -0,0 +1 @@ +export { ArmadaSimulatedPosition } from './ArmadaSimulatedPosition' diff --git a/sdk/armada-protocol-service/src/simulator/implementation/index.ts b/sdk/armada-protocol-service/src/simulator/implementation/index.ts index b649acfe30..cc7e53accb 100644 --- a/sdk/armada-protocol-service/src/simulator/implementation/index.ts +++ b/sdk/armada-protocol-service/src/simulator/implementation/index.ts @@ -1,3 +1,3 @@ -export * from './ArmadaParameters' -export * from './ArmadaSimulatedPosition' -export * from './ArmadaSimulator' +export * from './common' +export * from './keepers' +export * from './users' diff --git a/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersParameters.ts b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersParameters.ts new file mode 100644 index 0000000000..febeffd80e --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersParameters.ts @@ -0,0 +1,46 @@ +import { + IArmadaKeepersParameters, + IArmadaKeepersParametersData, + IArmadaPoolId, + IArmadaRebalanceData, + __iarmadakeepersparameters__, +} from '@summerfi/armada-protocol-common' +import { SerializationService } from '@summerfi/sdk-common/services' +import { IUser } from '@summerfi/sdk-common/user' + +/** + * Type for the parameters of ArmadaParameters + */ +export type ArmadaKeepersParametersParameters = Omit + +/** + * @name ArmadaKeepersParameters + * @see IArmadaKeepersParameters + */ +export class ArmadaKeepersParameters implements IArmadaKeepersParameters { + /** SIGNATURE */ + readonly [__iarmadakeepersparameters__] = __iarmadakeepersparameters__ + + /** ATTRIBUTES */ + readonly keeper: IUser + readonly poolId: IArmadaPoolId + readonly rebalanceData: IArmadaRebalanceData[] + + /** FACTORY */ + static createFrom(params: ArmadaKeepersParametersParameters): ArmadaKeepersParameters { + return new ArmadaKeepersParameters(params) + } + + /** SEALED CONSTRUCTOR */ + private constructor(params: ArmadaKeepersParametersParameters) { + this.keeper = params.keeper + this.poolId = params.poolId + this.rebalanceData = params.rebalanceData + } + + toString(): string { + return `Armada Parameters [keeper: ${this.keeper}, poolId: ${this.poolId}, rebalanceData: ${this.rebalanceData}]` + } +} + +SerializationService.registerClass(ArmadaKeepersParameters) diff --git a/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulation.ts b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulation.ts new file mode 100644 index 0000000000..72b6adf638 --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulation.ts @@ -0,0 +1,46 @@ +import { + IArmadaKeepersSimulation, + IArmadaKeepersSimulationData, + IArmadaPoolId, + IArmadaRebalanceData, + __iarmadakeeperssimulation__, +} from '@summerfi/armada-protocol-common' +import { SerializationService } from '@summerfi/sdk-common/services' +import { Simulation, SimulationType } from '@summerfi/sdk-common/simulation' +import { IUser } from '@summerfi/sdk-common/user' + +/** + * Type for the parameters of ArmadaSimulation + */ +export type ArmadaKeepersSimulationParameters = Omit + +/** + * @name ArmadaKeepersSimulation + * @see IArmadaKeepersSimulation + */ +export class ArmadaKeepersSimulation extends Simulation implements IArmadaKeepersSimulation { + /** SIGNATURE */ + readonly [__iarmadakeeperssimulation__] = __iarmadakeeperssimulation__ + + /** ATTRIBUTES */ + readonly type = SimulationType.ArmadaUsers + readonly keeper: IUser + readonly poolId: IArmadaPoolId + readonly rebalanceData: IArmadaRebalanceData[] + + /** FACTORY */ + static createFrom(params: ArmadaKeepersSimulationParameters): ArmadaKeepersSimulation { + return new ArmadaKeepersSimulation(params) + } + + /** SEALED CONSTRUCTOR */ + private constructor(params: ArmadaKeepersSimulationParameters) { + super(params) + + this.keeper = params.keeper + this.poolId = params.poolId + this.rebalanceData = params.rebalanceData + } +} + +SerializationService.registerClass(ArmadaKeepersSimulation) diff --git a/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulator.ts b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulator.ts new file mode 100644 index 0000000000..1c8bc906ab --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/keepers/ArmadaKeepersSimulator.ts @@ -0,0 +1,61 @@ +import { + IArmadaKeepersParameters, + IArmadaKeepersSimulation, + IArmadaManager, +} from '@summerfi/armada-protocol-common' +import { ArmadaKeepersSimulation } from './ArmadaKeepersSimulation' + +/** + * @class ArmadaKeepersSimulator + * @description Simulator for the Armada protocol Keepers operations + */ +export class ArmadaKeepersSimulator { + constructor() { + // Empty constructor + } + + /** + * @name simulate + * @description Simulates an operation on the Armada protocol + * + * @param simulationParams Parameters for the simulation + * @param armadaManager Armada manager to access the Armada protocol + * + * @returns IArmadaSimulation The result of the simulation + */ + async simulate(params: { + simulationParams: IArmadaKeepersParameters + armadaManager: IArmadaManager + }): Promise { + const { simulationParams, armadaManager } = params + + return this._simulateRebalance({ simulationParams, armadaManager }) + } + + /** PRIVATE */ + + /** + * @name _simulateRebalance + * @description Simulates a rebalance operation on the Armada protocol + * + * @param simulationParams Parameters for the simulation + * @param armadaManager Armada manager to access the Armada protocol + * + * @returns IArmadaKeepersSimulation The result of the simulation + */ + private async _simulateRebalance(params: { + simulationParams: IArmadaKeepersParameters + armadaManager: IArmadaManager + }): Promise { + const { simulationParams } = params + + const { keeper, poolId, rebalanceData } = simulationParams + + // TODO: Placeholder implementation of the simulation until we figure out what has to be done here + return ArmadaKeepersSimulation.createFrom({ + keeper: keeper, + poolId: poolId, + rebalanceData: rebalanceData, + }) + } +} diff --git a/sdk/armada-protocol-service/src/simulator/implementation/keepers/index.ts b/sdk/armada-protocol-service/src/simulator/implementation/keepers/index.ts new file mode 100644 index 0000000000..34c3ef691b --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/keepers/index.ts @@ -0,0 +1,5 @@ +export { ArmadaKeepersParameters } from './ArmadaKeepersParameters' +export type { ArmadaKeepersParametersParameters } from './ArmadaKeepersParameters' +export { ArmadaKeepersSimulation } from './ArmadaKeepersSimulation' +export type { ArmadaKeepersSimulationParameters } from './ArmadaKeepersSimulation' +export { ArmadaKeepersSimulator } from './ArmadaKeepersSimulator' diff --git a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaParameters.ts b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersParameters.ts similarity index 62% rename from sdk/armada-protocol-service/src/simulator/implementation/ArmadaParameters.ts rename to sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersParameters.ts index 2071eb57db..03cbef81bd 100644 --- a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaParameters.ts +++ b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersParameters.ts @@ -1,9 +1,9 @@ import { ArmadaOperationType, - IArmadaParameters, - IArmadaParametersData, IArmadaPoolId, - __iarmadaparameters__, + IArmadaUsersParameters, + IArmadaUsersParametersData, + __iarmadausersparameters__, } from '@summerfi/armada-protocol-common' import { ITokenAmount } from '@summerfi/sdk-common/common' import { SerializationService } from '@summerfi/sdk-common/services' @@ -12,15 +12,15 @@ import { IUser } from '@summerfi/sdk-common/user' /** * Type for the parameters of ArmadaParameters */ -export type ArmadaParametersParameters = Omit +export type ArmadaParametersParameters = Omit /** - * @name ArmadaParameters - * @see IArmadaParameters + * @name ArmadaUsersParameters + * @see IArmadaUsersParameters */ -export class ArmadaParameters implements IArmadaParameters { +export class ArmadaUsersParameters implements IArmadaUsersParameters { /** SIGNATURE */ - readonly [__iarmadaparameters__] = __iarmadaparameters__ + readonly [__iarmadausersparameters__] = __iarmadausersparameters__ /** ATTRIBUTES */ readonly user: IUser @@ -29,8 +29,8 @@ export class ArmadaParameters implements IArmadaParameters { readonly amount: ITokenAmount /** FACTORY */ - static createFrom(params: ArmadaParametersParameters): ArmadaParameters { - return new ArmadaParameters(params) + static createFrom(params: ArmadaParametersParameters): ArmadaUsersParameters { + return new ArmadaUsersParameters(params) } /** SEALED CONSTRUCTOR */ @@ -46,4 +46,4 @@ export class ArmadaParameters implements IArmadaParameters { } } -SerializationService.registerClass(ArmadaParameters) +SerializationService.registerClass(ArmadaUsersParameters) diff --git a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulation.ts b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulation.ts similarity index 54% rename from sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulation.ts rename to sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulation.ts index a2b13e3b6b..26ba792c14 100644 --- a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulation.ts +++ b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulation.ts @@ -1,8 +1,8 @@ import { IArmadaPosition, - IArmadaSimulation, - IArmadaSimulationData, - __iarmadasimulation__, + IArmadaUsersSimulation, + IArmadaUsersSimulationData, + __iarmadauserssimulation__, } from '@summerfi/armada-protocol-common' import { SerializationService } from '@summerfi/sdk-common/services' import { Simulation, SimulationType } from '@summerfi/sdk-common/simulation' @@ -11,25 +11,25 @@ import { IUser } from '@summerfi/sdk-common/user' /** * Type for the parameters of ArmadaSimulation */ -export type ArmadaSimulationParameters = Omit +export type ArmadaSimulationParameters = Omit /** - * @name ArmadaSimulation - * @see IArmadaSimulation + * @name ArmadaUsersSimulation + * @see IArmadaUsersSimulation */ -export class ArmadaSimulation extends Simulation implements IArmadaSimulation { +export class ArmadaUsersSimulation extends Simulation implements IArmadaUsersSimulation { /** SIGNATURE */ - readonly [__iarmadasimulation__] = __iarmadasimulation__ + readonly [__iarmadauserssimulation__] = __iarmadauserssimulation__ /** ATTRIBUTES */ - readonly type = SimulationType.Armada + readonly type = SimulationType.ArmadaUsers readonly user: IUser readonly previousPosition: IArmadaPosition readonly newPosition: IArmadaPosition /** FACTORY */ - static createFrom(params: ArmadaSimulationParameters): ArmadaSimulation { - return new ArmadaSimulation(params) + static createFrom(params: ArmadaSimulationParameters): ArmadaUsersSimulation { + return new ArmadaUsersSimulation(params) } /** SEALED CONSTRUCTOR */ @@ -42,4 +42,4 @@ export class ArmadaSimulation extends Simulation implements IArmadaSimulation { } } -SerializationService.registerClass(ArmadaSimulation) +SerializationService.registerClass(ArmadaUsersSimulation) diff --git a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulator.ts b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulator.ts similarity index 74% rename from sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulator.ts rename to sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulator.ts index b1e5510580..9c0c920628 100644 --- a/sdk/armada-protocol-service/src/simulator/implementation/ArmadaSimulator.ts +++ b/sdk/armada-protocol-service/src/simulator/implementation/users/ArmadaUsersSimulator.ts @@ -1,19 +1,19 @@ import { ArmadaOperationType, IArmadaManager, - IArmadaParameters, - IArmadaSimulation, + IArmadaUsersParameters, + IArmadaUsersSimulation, } from '@summerfi/armada-protocol-common' import { SDKError, SDKErrorType } from '@summerfi/sdk-common' -import { ArmadaPositionId } from '../../common' -import { ArmadaSimulatedPosition } from './ArmadaSimulatedPosition' -import { ArmadaSimulation } from './ArmadaSimulation' +import { ArmadaPositionId } from '../../../common' +import { ArmadaSimulatedPosition } from '../common/ArmadaSimulatedPosition' +import { ArmadaUsersSimulation } from './ArmadaUsersSimulation' /** - * @class ArmadaSimulator - * @description Simulator for the Armada protocol + * @class ArmadaUsersSimulator + * @description Simulator for the Armada protocol Users operations */ -export class ArmadaSimulator { +export class ArmadaUsersSimulator { constructor() { // Empty constructor } @@ -28,16 +28,16 @@ export class ArmadaSimulator { * @returns IArmadaSimulation The result of the simulation */ async simulate(params: { - simulationParams: IArmadaParameters + simulationParams: IArmadaUsersParameters armadaManager: IArmadaManager - }): Promise { + }): Promise { const { simulationParams, armadaManager } = params switch (simulationParams.operation) { case ArmadaOperationType.Deposit: return this._simulateDeposit({ simulationParams, armadaManager }) case ArmadaOperationType.Withdraw: - return this.simulateWithdraw({ simulationParams, armadaManager }) + return this._simulateWithdraw({ simulationParams, armadaManager }) default: throw SDKError.createFrom({ type: SDKErrorType.ArmadaError, @@ -56,12 +56,12 @@ export class ArmadaSimulator { * @param simulationParams Parameters for the simulation * @param armadaManager Armada manager to access the Armada protocol * - * @returns IArmadaSimulation The result of the simulation + * @returns IArmadaUsersSimulation The result of the simulation */ private async _simulateDeposit(params: { - simulationParams: IArmadaParameters + simulationParams: IArmadaUsersParameters armadaManager: IArmadaManager - }): Promise { + }): Promise { const { simulationParams, armadaManager } = params const positionId = ArmadaPositionId.createFrom({ @@ -80,7 +80,7 @@ export class ArmadaSimulator { await simulatedPosition.deposit(simulationParams.amount) - return ArmadaSimulation.createFrom({ + return ArmadaUsersSimulation.createFrom({ user: simulationParams.user, previousPosition: prevPosition, newPosition: simulatedPosition, @@ -94,12 +94,12 @@ export class ArmadaSimulator { * @param simulationParams Parameters for the simulation * @param armadaManager Armada manager to access the Armada protocol * - * @returns IArmadaSimulation The result of the simulation + * @returns IArmadaUsersSimulation The result of the simulation */ - private async simulateWithdraw(params: { - simulationParams: IArmadaParameters + private async _simulateWithdraw(params: { + simulationParams: IArmadaUsersParameters armadaManager: IArmadaManager - }): Promise { + }): Promise { const { simulationParams, armadaManager } = params const positionId = ArmadaPositionId.createFrom({ @@ -118,7 +118,7 @@ export class ArmadaSimulator { simulatedPosition.withdraw(simulationParams.amount) - return ArmadaSimulation.createFrom({ + return ArmadaUsersSimulation.createFrom({ user: simulationParams.user, previousPosition: prevPosition, newPosition: simulatedPosition, diff --git a/sdk/armada-protocol-service/src/simulator/implementation/users/index.ts b/sdk/armada-protocol-service/src/simulator/implementation/users/index.ts new file mode 100644 index 0000000000..4c7887e855 --- /dev/null +++ b/sdk/armada-protocol-service/src/simulator/implementation/users/index.ts @@ -0,0 +1,5 @@ +export { ArmadaUsersParameters } from './ArmadaUsersParameters' +export type { ArmadaParametersParameters } from './ArmadaUsersParameters' +export { ArmadaUsersSimulation } from './ArmadaUsersSimulation' +export type { ArmadaSimulationParameters } from './ArmadaUsersSimulation' +export { ArmadaUsersSimulator } from './ArmadaUsersSimulator' diff --git a/sdk/armada-protocol-service/tests/ArmadaSimulation.spec.ts b/sdk/armada-protocol-service/tests/ArmadaSimulation.spec.ts index 1d020064d8..b71d332c8d 100644 --- a/sdk/armada-protocol-service/tests/ArmadaSimulation.spec.ts +++ b/sdk/armada-protocol-service/tests/ArmadaSimulation.spec.ts @@ -1,5 +1,5 @@ import { Address, ChainFamilyMap, User, Wallet } from '@summerfi/sdk-common' -import { ArmadaSimulation } from '../src/simulator/implementation/ArmadaSimulation' +import { ArmadaUsersSimulation } from '../src/simulator/implementation/users/ArmadaUsersSimulation' import { ArmadaPositionMock } from './mocks/ArmadaPositionMock' describe('SDK Common | Armada | ArmadaSimulation', () => { @@ -18,7 +18,7 @@ describe('SDK Common | Armada | ArmadaSimulation', () => { describe('#createFrom()', () => { it('should instantiate with right data', () => { - const simulation = ArmadaSimulation.createFrom({ + const simulation = ArmadaUsersSimulation.createFrom({ user, previousPosition: ArmadaPositionMock, newPosition: ArmadaPositionMock, diff --git a/sdk/contracts-provider-common/src/interfaces/contracts/IFleetCommanderContract.ts b/sdk/contracts-provider-common/src/interfaces/contracts/IFleetCommanderContract.ts index 0a4f88865c..45ea568bc8 100644 --- a/sdk/contracts-provider-common/src/interfaces/contracts/IFleetCommanderContract.ts +++ b/sdk/contracts-provider-common/src/interfaces/contracts/IFleetCommanderContract.ts @@ -1,4 +1,4 @@ -import { IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { IAddress, IPercentage, ITokenAmount, TransactionInfo } from '@summerfi/sdk-common' import { IContractWrapper } from './IContractWrapper' import { IErc20Contract } from './IErc20Contract' @@ -79,7 +79,7 @@ export interface IFleetCommanderContract extends IContractWrapper { * * @returns The transaction information */ - rebalance(params: { rebalanceData: IRebalanceData[] }): Promise + rebalance(params: { rebalanceData: IArmadaRebalanceData[] }): Promise /** * @name adjustBuffer @@ -90,7 +90,7 @@ export interface IFleetCommanderContract extends IContractWrapper { * * @returns The transaction information */ - adjustBuffer(params: { rebalanceData: IRebalanceData[] }): Promise + adjustBuffer(params: { rebalanceData: IArmadaRebalanceData[] }): Promise /** GOVERNANCE WRITE METHODS */ @@ -220,7 +220,7 @@ export interface IFleetCommanderContract extends IContractWrapper { * * @returns The transaction information */ - forceRebalance(params: { rebalanceData: IRebalanceData[] }): Promise + forceRebalance(params: { rebalanceData: IArmadaRebalanceData[] }): Promise /** * @name emergencyShutdown diff --git a/sdk/contracts-provider-service/src/implementation/contracts/FleetCommanderContract/FleetCommanderContract.ts b/sdk/contracts-provider-service/src/implementation/contracts/FleetCommanderContract/FleetCommanderContract.ts index 9d65c967a8..49dbc47f1a 100644 --- a/sdk/contracts-provider-service/src/implementation/contracts/FleetCommanderContract/FleetCommanderContract.ts +++ b/sdk/contracts-provider-service/src/implementation/contracts/FleetCommanderContract/FleetCommanderContract.ts @@ -19,7 +19,7 @@ import { import { ContractWrapper } from '../ContractWrapper' import { FleetCommanderAbi } from '@summerfi/armada-protocol-abis' -import { IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { Erc4626Contract } from '../Erc4626Contract/Erc4626Contract' /** @@ -124,7 +124,7 @@ export class FleetCommanderContract< /** KEEPERS WRITE METHODS */ /** @see IFleetCommanderContract.rebalance */ - async rebalance(params: { rebalanceData: IRebalanceData[] }): Promise { + async rebalance(params: { rebalanceData: IArmadaRebalanceData[] }): Promise { const rebalanceDataSolidity = this._convertRebalanceDataToSolidity({ rebalanceData: params.rebalanceData, }) @@ -136,7 +136,7 @@ export class FleetCommanderContract< } /** @see IFleetCommanderContract.adjustBuffer */ - async adjustBuffer(params: { rebalanceData: IRebalanceData[] }): Promise { + async adjustBuffer(params: { rebalanceData: IArmadaRebalanceData[] }): Promise { const rebalanceDataSolidity = this._convertRebalanceDataToSolidity({ rebalanceData: params.rebalanceData, }) @@ -307,7 +307,7 @@ export class FleetCommanderContract< } /** @see IFleetCommanderContract.forceRebalance */ - forceRebalance(params: { rebalanceData: IRebalanceData[] }): Promise { + forceRebalance(params: { rebalanceData: IArmadaRebalanceData[] }): Promise { const rebalanceDataSolidity = this._convertRebalanceDataToSolidity({ rebalanceData: params.rebalanceData, }) @@ -346,7 +346,7 @@ export class FleetCommanderContract< /** PRIVATE */ private _convertRebalanceDataToSolidity(params: { - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): FleetCommander.RebalanceDataSolidity[] { return params.rebalanceData.map((data) => ({ fromArk: data.fromArk.toSolidityValue(), diff --git a/sdk/order-planner-service/src/implementation/OrderPlannerService.ts b/sdk/order-planner-service/src/implementation/OrderPlannerService.ts index 0fed232d22..c235c2d6d0 100644 --- a/sdk/order-planner-service/src/implementation/OrderPlannerService.ts +++ b/sdk/order-planner-service/src/implementation/OrderPlannerService.ts @@ -10,7 +10,9 @@ import { Order } from '@summerfi/sdk-common/orders' import { SimulationType } from '@summerfi/sdk-common/simulation' import { assert } from 'console' import { ActionBuildersConfig } from '../config/Config' -import { ArmadaOrderPlanner, DMAOrderPlanner } from './planners' +import { ArmadaKeepersOrderPlanner } from './planners/ArmadaKeepersOrderPlanner' +import { ArmadaUsersOrderPlanner } from './planners/ArmadaUsersOrderPlanner' +import { DMAOrderPlanner } from './planners/DMAOrderPlanner' /** @see IOrderPlannerService */ export class OrderPlannerService implements IOrderPlannerService { @@ -19,7 +21,8 @@ export class OrderPlannerService implements IOrderPlannerService { constructor() { this._registerOrderPlanner(DMAOrderPlanner) - this._registerOrderPlanner(ArmadaOrderPlanner) + this._registerOrderPlanner(ArmadaUsersOrderPlanner) + this._registerOrderPlanner(ArmadaKeepersOrderPlanner) } async buildOrder(params: Omit): Promise> { diff --git a/sdk/order-planner-service/src/implementation/planners/ArmadaKeepersOrderPlanner.ts b/sdk/order-planner-service/src/implementation/planners/ArmadaKeepersOrderPlanner.ts new file mode 100644 index 0000000000..2246dc0977 --- /dev/null +++ b/sdk/order-planner-service/src/implementation/planners/ArmadaKeepersOrderPlanner.ts @@ -0,0 +1,47 @@ +import { isArmadaKeepersSimulation } from '@summerfi/armada-protocol-common' +import { IOrderPlanner } from '@summerfi/order-planner-common/interfaces' +import { BuildOrderParams } from '@summerfi/order-planner-common/types' +import { Maybe, SDKError, SDKErrorType } from '@summerfi/sdk-common/common' +import { Order } from '@summerfi/sdk-common/orders' +import { SimulationType } from '@summerfi/sdk-common/simulation' + +/** + * @name ArmadaKeepersOrderPlanner + * @description Order planner that generates transactions for the Users of the Armada Protocol based on the input simulation + * + * @see IOrderPlanner + */ +export class ArmadaKeepersOrderPlanner implements IOrderPlanner { + /** PUBLIC */ + + /** @see IOrderPlanner.buildOrder */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async buildOrder(params: BuildOrderParams): Promise> { + const { simulation, armadaManager } = params + + if (!isArmadaKeepersSimulation(simulation)) { + throw SDKError.createFrom({ + type: SDKErrorType.OrderPlannerError, + reason: `Simulation is not an Armada keepers simulation`, + message: `Received simulation of type ${simulation.type} instead of Armada`, + }) + } + + const { poolId, rebalanceData } = simulation + + const transaction = await armadaManager.rebalance({ + poolId: poolId, + rebalanceData: rebalanceData, + }) + + return { + simulation, + transactions: [transaction], + } + } + + /** @see IOrderPlanner.getAcceptedSimulations */ + getAcceptedSimulations(): SimulationType[] { + return [SimulationType.ArmadaKeepers] + } +} diff --git a/sdk/order-planner-service/src/implementation/planners/ArmadaOrderPlanner.ts b/sdk/order-planner-service/src/implementation/planners/ArmadaUsersOrderPlanner.ts similarity index 79% rename from sdk/order-planner-service/src/implementation/planners/ArmadaOrderPlanner.ts rename to sdk/order-planner-service/src/implementation/planners/ArmadaUsersOrderPlanner.ts index 1b7da6a8d5..21644b8493 100644 --- a/sdk/order-planner-service/src/implementation/planners/ArmadaOrderPlanner.ts +++ b/sdk/order-planner-service/src/implementation/planners/ArmadaUsersOrderPlanner.ts @@ -1,4 +1,4 @@ -import { isArmadaSimulation } from '@summerfi/armada-protocol-common' +import { isArmadaUsersSimulation } from '@summerfi/armada-protocol-common' import { IOrderPlanner } from '@summerfi/order-planner-common/interfaces' import { BuildOrderParams } from '@summerfi/order-planner-common/types' import { Maybe, SDKError, SDKErrorType } from '@summerfi/sdk-common/common' @@ -6,12 +6,12 @@ import { Order } from '@summerfi/sdk-common/orders' import { SimulationType } from '@summerfi/sdk-common/simulation' /** - * @name ArmadaOrderPlanner - * @description Order planner that generates transactions for the Armada Protocol based on the input simulation + * @name ArmadaUsersOrderPlanner + * @description Order planner that generates transactions for the Users of the Armada Protocol based on the input simulation * * @see IOrderPlanner */ -export class ArmadaOrderPlanner implements IOrderPlanner { +export class ArmadaUsersOrderPlanner implements IOrderPlanner { /** PUBLIC */ /** @see IOrderPlanner.buildOrder */ @@ -19,10 +19,10 @@ export class ArmadaOrderPlanner implements IOrderPlanner { async buildOrder(params: BuildOrderParams): Promise> { const { simulation, armadaManager } = params - if (!isArmadaSimulation(simulation)) { + if (!isArmadaUsersSimulation(simulation)) { throw SDKError.createFrom({ type: SDKErrorType.OrderPlannerError, - reason: `Simulation is not an Armada simulation`, + reason: `Simulation is not an Armada users simulation`, message: `Received simulation of type ${simulation.type} instead of Armada`, }) } @@ -49,6 +49,6 @@ export class ArmadaOrderPlanner implements IOrderPlanner { /** @see IOrderPlanner.getAcceptedSimulations */ getAcceptedSimulations(): SimulationType[] { - return [SimulationType.Armada] + return [SimulationType.ArmadaUsers] } } diff --git a/sdk/order-planner-service/src/implementation/planners/index.ts b/sdk/order-planner-service/src/implementation/planners/index.ts index 43ff041444..327313fab6 100644 --- a/sdk/order-planner-service/src/implementation/planners/index.ts +++ b/sdk/order-planner-service/src/implementation/planners/index.ts @@ -1,2 +1,3 @@ -export * from './ArmadaOrderPlanner' +export * from './ArmadaKeepersOrderPlanner' +export * from './ArmadaUsersOrderPlanner' export * from './DMAOrderPlanner' diff --git a/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerGovernanceClient.ts b/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerGovernanceClient.ts index d10210746e..e63083275e 100644 --- a/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerGovernanceClient.ts +++ b/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerGovernanceClient.ts @@ -1,4 +1,4 @@ -import { IArmadaPoolId, IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaPoolId, IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { IAddress, IPercentage, ITokenAmount, TransactionInfo } from '@summerfi/sdk-common' import { IArmadaManagerGovernanceClient } from '../../interfaces/ArmadaManager/IArmadaManagerGovernanceClient' import { IRPCClient } from '../../interfaces/IRPCClient' @@ -95,7 +95,7 @@ export class ArmadaManagerGovernanceClient /** @see IArmadaManagerGovernanceClient.emergencyShutdown */ forceRebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { return this.rpcClient.armada.governance.forceRebalance.query(params) } diff --git a/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerKeepersClient.ts b/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerKeepersClient.ts index 9e2a3fd8ba..cb0873dc63 100644 --- a/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerKeepersClient.ts +++ b/sdk/sdk-client/src/implementation/ArmadaManager/ArmadaManagerKeepersClient.ts @@ -1,4 +1,4 @@ -import { IArmadaPoolId, IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaPoolId, IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { TransactionInfo } from '@summerfi/sdk-common' import { IArmadaManagerKeepersClient } from '../../interfaces/ArmadaManager/IArmadaManagerKeepersClient' import { IRPCClient } from '../../interfaces/IRPCClient' @@ -16,7 +16,7 @@ export class ArmadaManagerKeepersClient extends IRPCClient implements IArmadaMan /** @see IArmadaManagerKeepersClient.rebalance */ async rebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { return this.rpcClient.armada.keepers.rebalance.query(params) } @@ -24,7 +24,7 @@ export class ArmadaManagerKeepersClient extends IRPCClient implements IArmadaMan /** @see IArmadaManagerKeepersClient.adjustBuffer */ async adjustBuffer(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise { return this.rpcClient.armada.keepers.adjustBuffer.query(params) } diff --git a/sdk/sdk-client/src/implementation/simulations/ArmadaKeepersSimulationManager.ts b/sdk/sdk-client/src/implementation/simulations/ArmadaKeepersSimulationManager.ts new file mode 100644 index 0000000000..247be1dfeb --- /dev/null +++ b/sdk/sdk-client/src/implementation/simulations/ArmadaKeepersSimulationManager.ts @@ -0,0 +1,30 @@ +import { + IArmadaKeepersParameters, + IArmadaKeepersSimulation, +} from '@summerfi/armada-protocol-common' +import { IRPCClient } from '../../interfaces/IRPCClient' + +import { RPCMainClientType } from '../../rpc/SDKMainClient' + +/** + * Simulation manager client for the Keepers of the Armada protocol + */ +export class ArmadaKeepersSimulationManager extends IRPCClient { + /** CONSTRUCTOR */ + constructor(params: { rpcClient: RPCMainClientType }) { + super(params) + } + + /** + * @name simulate + * @description Simulates an operation on the Armada protocol for the Keepers of the protocol + * + * @param params Parameters for the simulation + * + * @returns IArmadaKeepersSimulation The result of the simulation + */ + + public async simulate(params: IArmadaKeepersParameters): Promise { + return this.rpcClient.simulation.armada.keepers.query(params) + } +} diff --git a/sdk/sdk-client/src/implementation/simulations/ArmadaSimulationManager.ts b/sdk/sdk-client/src/implementation/simulations/ArmadaSimulationManager.ts index ece8c3def3..d39cb810e4 100644 --- a/sdk/sdk-client/src/implementation/simulations/ArmadaSimulationManager.ts +++ b/sdk/sdk-client/src/implementation/simulations/ArmadaSimulationManager.ts @@ -1,17 +1,19 @@ import { IRPCClient } from '../../interfaces/IRPCClient' -import { IArmadaParameters, IArmadaSimulation } from '@summerfi/armada-protocol-common' -import { IArmadaSimulationManager } from '../../interfaces/simulations/IArmadaSimulationManager' import { RPCMainClientType } from '../../rpc/SDKMainClient' +import { ArmadaKeepersSimulationManager } from './ArmadaKeepersSimulationManager' +import { ArmadaUsersSimulationManager } from './ArmadaUsersSimulationManager' /** @see IArmadaSimulationManager */ -export class ArmadaSimulationManager extends IRPCClient implements IArmadaSimulationManager { +export class ArmadaSimulationManager extends IRPCClient { + readonly users: ArmadaUsersSimulationManager + readonly keepers: ArmadaKeepersSimulationManager + + /** CONSTRUCTOR */ constructor(params: { rpcClient: RPCMainClientType }) { super(params) - } - /** @see IArmadaSimulationManager.simulate */ - public async simulate(params: IArmadaParameters): Promise { - return this.rpcClient.simulation.armada.query(params) + this.users = new ArmadaUsersSimulationManager(params) + this.keepers = new ArmadaKeepersSimulationManager(params) } } diff --git a/sdk/sdk-client/src/implementation/simulations/ArmadaUsersSimulationManager.ts b/sdk/sdk-client/src/implementation/simulations/ArmadaUsersSimulationManager.ts new file mode 100644 index 0000000000..ad0f64bd82 --- /dev/null +++ b/sdk/sdk-client/src/implementation/simulations/ArmadaUsersSimulationManager.ts @@ -0,0 +1,26 @@ +import { IRPCClient } from '../../interfaces/IRPCClient' + +import { IArmadaUsersParameters, IArmadaUsersSimulation } from '@summerfi/armada-protocol-common' +import { RPCMainClientType } from '../../rpc/SDKMainClient' + +/** + * Simulation manager client for the Users of the Armada protocol + */ +export class ArmadaUsersSimulationManager extends IRPCClient { + /** CONSTRUCTOR */ + constructor(params: { rpcClient: RPCMainClientType }) { + super(params) + } + + /** + * @name simulate + * @description Simulates an operation on the Armada protocol for the Users of the protocol + * + * @param params Parameters for the simulation + * + * @returns IArmadaUsersSimulation The result of the simulation + */ + public async simulate(params: IArmadaUsersParameters): Promise { + return this.rpcClient.simulation.armada.users.query(params) + } +} diff --git a/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerGovernanceClient.ts b/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerGovernanceClient.ts index 4257d28499..417cc026dd 100644 --- a/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerGovernanceClient.ts +++ b/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerGovernanceClient.ts @@ -1,4 +1,4 @@ -import { IArmadaPoolId, IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaPoolId, IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { IAddress, IPercentage, ITokenAmount, TransactionInfo } from '@summerfi/sdk-common' /** @@ -160,7 +160,7 @@ export interface IArmadaManagerGovernanceClient { */ forceRebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise /** diff --git a/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerKeepersClient.ts b/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerKeepersClient.ts index 5123074e2f..0eb442c507 100644 --- a/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerKeepersClient.ts +++ b/sdk/sdk-client/src/interfaces/ArmadaManager/IArmadaManagerKeepersClient.ts @@ -1,4 +1,4 @@ -import { IArmadaPoolId, IRebalanceData } from '@summerfi/armada-protocol-common' +import { IArmadaPoolId, IArmadaRebalanceData } from '@summerfi/armada-protocol-common' import { TransactionInfo } from '@summerfi/sdk-common' /** @@ -18,7 +18,7 @@ export interface IArmadaManagerKeepersClient { */ rebalance(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise /** @@ -32,6 +32,6 @@ export interface IArmadaManagerKeepersClient { */ adjustBuffer(params: { poolId: IArmadaPoolId - rebalanceData: IRebalanceData[] + rebalanceData: IArmadaRebalanceData[] }): Promise } diff --git a/sdk/sdk-client/src/interfaces/simulations/IArmadaSimulationManager.ts b/sdk/sdk-client/src/interfaces/simulations/IArmadaSimulationManager.ts deleted file mode 100644 index 48b10e17c7..0000000000 --- a/sdk/sdk-client/src/interfaces/simulations/IArmadaSimulationManager.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IArmadaParameters, IArmadaSimulation } from '@summerfi/armada-protocol-common' - -/** - * Interface for the Armada Protocol Simulation Manager - * - * The Armada Protocol Simulation Manager is responsible for handling all the simulation related operations - * for the Armada Protocol. This includes simulations for depositing and withdrawing funds from the Armada Protocol - * fleets - */ -export interface IArmadaSimulationManager { - /** - * Simulate an operation to the Armada Protocol, in particular deposit and withdraw operations - * - * @param params Parameters for the Armada Protocol simulation - * - * @returns The simulation result - */ - simulate(params: IArmadaParameters): Promise -} diff --git a/sdk/sdk-common/src/common/interfaces/ITokenAmount.ts b/sdk/sdk-common/src/common/interfaces/ITokenAmount.ts index b3606cd017..8899fc4b05 100644 --- a/sdk/sdk-common/src/common/interfaces/ITokenAmount.ts +++ b/sdk/sdk-common/src/common/interfaces/ITokenAmount.ts @@ -127,7 +127,7 @@ export interface ITokenAmount extends ITokenAmountData, IValueConverter, IPrinta * @description Zod schema for ITokenAmount */ export const TokenAmountDataSchema = z.object({ - token: z.custom((val) => isToken(val)), + token: z.custom(isToken), amount: z.string(), }) diff --git a/sdk/sdk-common/src/simulation/enums/SimulationType.ts b/sdk/sdk-common/src/simulation/enums/SimulationType.ts index 89070e67c3..81da35d393 100644 --- a/sdk/sdk-common/src/simulation/enums/SimulationType.ts +++ b/sdk/sdk-common/src/simulation/enums/SimulationType.ts @@ -7,5 +7,7 @@ export enum SimulationType { /** Refinance an existing position into another protocol */ Refinance = 'Refinance', /** Depositing or withdrawing from the Armada Protocol */ - Armada = 'Armada', + ArmadaUsers = 'ArmadaUsers', + /** Rebalancing on the Armada Protocol */ + ArmadaKeepers = 'ArmadaKeepers', } diff --git a/sdk/sdk-server/src/SDKAppRouter.ts b/sdk/sdk-server/src/SDKAppRouter.ts index 85313c182a..a37329bb5d 100644 --- a/sdk/sdk-server/src/SDKAppRouter.ts +++ b/sdk/sdk-server/src/SDKAppRouter.ts @@ -14,17 +14,18 @@ import { setTipJar } from './armada-protocol-handlers/governance/setTipJar' import { setTipRate } from './armada-protocol-handlers/governance/setTipRate' import { updateRebalanceCooldown } from './armada-protocol-handlers/governance/updateRebalanceCooldown' import { adjustBuffer } from './armada-protocol-handlers/keepers/adjustBuffer' +import { getArmadaKeepersSimulation } from './armada-protocol-handlers/keepers/getArmadaKeepersSimulation' import { rebalance } from './armada-protocol-handlers/keepers/rebalance' +import { getArmadaUsersSimulation } from './armada-protocol-handlers/users/getArmadaUsersSimulation' import { getDepositTX } from './armada-protocol-handlers/users/getDepositTX' import { getPool } from './armada-protocol-handlers/users/getPool' import { getPoolInfo } from './armada-protocol-handlers/users/getPoolInfo' import { getPosition as getArmadaPosition } from './armada-protocol-handlers/users/getPosition' import { getUpdateDepositTX } from './armada-protocol-handlers/users/getUpdateDepositTX' -import { getUserPositions } from './armada-protocol-handlers/users/getUserPositions' import { getUserPosition } from './armada-protocol-handlers/users/getUserPosition' +import { getUserPositions } from './armada-protocol-handlers/users/getUserPositions' import { getWithdrawTX } from './armada-protocol-handlers/users/getWithdrawTX' import { buildOrder } from './handlers/buildOrder' -import { getArmadaSimulation } from './handlers/getArmadaSimulation' import { getImportSimulation } from './handlers/getImportSimulation' import { getLendingPool } from './handlers/getLendingPool' import { getLendingPoolInfo } from './handlers/getLendingPoolInfo' @@ -53,7 +54,10 @@ export const sdkAppRouter = router({ simulation: { refinance: getRefinanceSimulation, import: getImportSimulation, - armada: getArmadaSimulation, + armada: { + users: getArmadaUsersSimulation, + keepers: getArmadaKeepersSimulation, + }, }, orders: { buildOrder: buildOrder, diff --git a/sdk/sdk-server/src/armada-protocol-handlers/governance/forceRebalance.ts b/sdk/sdk-server/src/armada-protocol-handlers/governance/forceRebalance.ts index 0e4c96700e..fbc5aebf72 100644 --- a/sdk/sdk-server/src/armada-protocol-handlers/governance/forceRebalance.ts +++ b/sdk/sdk-server/src/armada-protocol-handlers/governance/forceRebalance.ts @@ -1,8 +1,8 @@ import { + IArmadaRebalanceData, isArmadaPoolId, - isRebalanceData, + isArmadaRebalanceData, type IArmadaPoolId, - type IRebalanceData, } from '@summerfi/armada-protocol-common' import { z } from 'zod' import { publicProcedure } from '../../SDKTRPC' @@ -11,7 +11,7 @@ export const forceRebalance = publicProcedure .input( z.object({ poolId: z.custom(isArmadaPoolId), - rebalanceData: z.array(z.custom(isRebalanceData)), + rebalanceData: z.array(z.custom(isArmadaRebalanceData)), }), ) .query(async (opts) => { diff --git a/sdk/sdk-server/src/armada-protocol-handlers/keepers/adjustBuffer.ts b/sdk/sdk-server/src/armada-protocol-handlers/keepers/adjustBuffer.ts index 07decb29f2..fc5fbbe480 100644 --- a/sdk/sdk-server/src/armada-protocol-handlers/keepers/adjustBuffer.ts +++ b/sdk/sdk-server/src/armada-protocol-handlers/keepers/adjustBuffer.ts @@ -1,8 +1,8 @@ import { + IArmadaRebalanceData, isArmadaPoolId, - isRebalanceData, + isArmadaRebalanceData, type IArmadaPoolId, - type IRebalanceData, } from '@summerfi/armada-protocol-common' import { z } from 'zod' @@ -12,7 +12,7 @@ export const adjustBuffer = publicProcedure .input( z.object({ poolId: z.custom(isArmadaPoolId), - rebalanceData: z.array(z.custom(isRebalanceData)), + rebalanceData: z.array(z.custom(isArmadaRebalanceData)), }), ) .query(async (opts) => { diff --git a/sdk/sdk-server/src/armada-protocol-handlers/keepers/getArmadaKeepersSimulation.ts b/sdk/sdk-server/src/armada-protocol-handlers/keepers/getArmadaKeepersSimulation.ts new file mode 100644 index 0000000000..b42eeb0d72 --- /dev/null +++ b/sdk/sdk-server/src/armada-protocol-handlers/keepers/getArmadaKeepersSimulation.ts @@ -0,0 +1,16 @@ +import { + ArmadaKeepersParametersDataSchema, + IArmadaKeepersSimulation, +} from '@summerfi/armada-protocol-common' +import { ArmadaKeepersParameters, ArmadaKeepersSimulator } from '@summerfi/armada-protocol-service' + +import { publicProcedure } from '../../SDKTRPC' + +export const getArmadaKeepersSimulation = publicProcedure + .input(ArmadaKeepersParametersDataSchema) + .query(async (opts): Promise => { + return new ArmadaKeepersSimulator().simulate({ + simulationParams: ArmadaKeepersParameters.createFrom(opts.input), + armadaManager: opts.ctx.armadaManager, + }) + }) diff --git a/sdk/sdk-server/src/armada-protocol-handlers/keepers/rebalance.ts b/sdk/sdk-server/src/armada-protocol-handlers/keepers/rebalance.ts index 5c8ffcd888..1d42b97ba0 100644 --- a/sdk/sdk-server/src/armada-protocol-handlers/keepers/rebalance.ts +++ b/sdk/sdk-server/src/armada-protocol-handlers/keepers/rebalance.ts @@ -1,8 +1,8 @@ import { + IArmadaRebalanceData, isArmadaPoolId, - isRebalanceData, + isArmadaRebalanceData, type IArmadaPoolId, - type IRebalanceData, } from '@summerfi/armada-protocol-common' import { z } from 'zod' import { publicProcedure } from '../../SDKTRPC' @@ -11,7 +11,7 @@ export const rebalance = publicProcedure .input( z.object({ poolId: z.custom(isArmadaPoolId), - rebalanceData: z.array(z.custom(isRebalanceData)), + rebalanceData: z.array(z.custom(isArmadaRebalanceData)), }), ) .query(async (opts) => { diff --git a/sdk/sdk-server/src/armada-protocol-handlers/users/getArmadaUsersSimulation.ts b/sdk/sdk-server/src/armada-protocol-handlers/users/getArmadaUsersSimulation.ts new file mode 100644 index 0000000000..a12453f39c --- /dev/null +++ b/sdk/sdk-server/src/armada-protocol-handlers/users/getArmadaUsersSimulation.ts @@ -0,0 +1,16 @@ +import { + ArmadaUsersParametersDataSchema, + IArmadaUsersSimulation, +} from '@summerfi/armada-protocol-common' +import { ArmadaUsersParameters, ArmadaUsersSimulator } from '@summerfi/armada-protocol-service' + +import { publicProcedure } from '../../SDKTRPC' + +export const getArmadaUsersSimulation = publicProcedure + .input(ArmadaUsersParametersDataSchema) + .query(async (opts): Promise => { + return new ArmadaUsersSimulator().simulate({ + simulationParams: ArmadaUsersParameters.createFrom(opts.input), + armadaManager: opts.ctx.armadaManager, + }) + }) diff --git a/sdk/sdk-server/src/handlers/getArmadaSimulation.ts b/sdk/sdk-server/src/handlers/getArmadaSimulation.ts deleted file mode 100644 index 52f5f47121..0000000000 --- a/sdk/sdk-server/src/handlers/getArmadaSimulation.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { IArmadaSimulation, isArmadaParameters } from '@summerfi/armada-protocol-common' -import { ArmadaSimulator } from '@summerfi/armada-protocol-service' - -import { z } from 'zod' -import { publicProcedure } from '../SDKTRPC' - -export const getArmadaSimulation = publicProcedure - .input(z.any()) - .query(async (opts): Promise => { - if (!isArmadaParameters(opts.input)) { - throw new Error('Invalid Armada Protocol parameters') - } - - return new ArmadaSimulator().simulate({ - simulationParams: opts.input, - armadaManager: opts.ctx.armadaManager, - }) - })