117 lines
3.3 KiB
C#
117 lines
3.3 KiB
C#
#nullable enable
|
|
namespace Managing.Application.Bots.Models
|
|
{
|
|
[GenerateSerializer]
|
|
public class AgentGrainState
|
|
{
|
|
[Id(0)] public string AgentName { get; set; } = string.Empty;
|
|
[Id(1)] public HashSet<Guid> BotIds { get; set; } = new HashSet<Guid>();
|
|
|
|
/// <summary>
|
|
/// Tracks if a swap operation is currently in progress to prevent multiple simultaneous swaps
|
|
/// </summary>
|
|
[Id(2)]
|
|
public bool IsSwapInProgress { get; set; } = false;
|
|
|
|
/// <summary>
|
|
/// Timestamp of the last swap operation to implement cooldown period
|
|
/// </summary>
|
|
[Id(3)]
|
|
public DateTime? LastSwapTime { get; set; } = null;
|
|
|
|
/// <summary>
|
|
/// Cached balance data to reduce external API calls
|
|
/// </summary>
|
|
[Id(4)]
|
|
public CachedBalanceData? CachedBalanceData { get; set; } = null;
|
|
|
|
/// <summary>
|
|
/// Total fees paid by this agent across all positions
|
|
/// </summary>
|
|
[Id(5)]
|
|
public decimal TotalFees { get; set; } = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cached balance data to avoid repeated external API calls
|
|
/// </summary>
|
|
[GenerateSerializer]
|
|
public class CachedBalanceData
|
|
{
|
|
/// <summary>
|
|
/// When the balance was last fetched
|
|
/// </summary>
|
|
[Id(0)]
|
|
public DateTime LastFetched { get; set; } = DateTime.UtcNow;
|
|
|
|
/// <summary>
|
|
/// The account name this balance data is for
|
|
/// </summary>
|
|
[Id(1)]
|
|
public string AccountName { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// ETH balance in USD
|
|
/// </summary>
|
|
[Id(2)]
|
|
public decimal EthValueInUsd { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// USDC balance value
|
|
/// </summary>
|
|
[Id(3)]
|
|
public decimal UsdcValue { get; set; } = 0;
|
|
|
|
/// <summary>
|
|
/// Whether the cached data is still valid (less than 1 minute old)
|
|
/// </summary>
|
|
public bool IsValid => DateTime.UtcNow - LastFetched < TimeSpan.FromMinutes(1.5);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Result of a balance check operation
|
|
/// </summary>
|
|
[GenerateSerializer]
|
|
public class BalanceCheckResult
|
|
{
|
|
/// <summary>
|
|
/// Whether the balance check was successful
|
|
/// </summary>
|
|
[Id(0)]
|
|
public bool IsSuccessful { get; set; }
|
|
|
|
/// <summary>
|
|
/// The reason for failure if not successful
|
|
/// </summary>
|
|
[Id(1)]
|
|
public BalanceCheckFailureReason FailureReason { get; set; }
|
|
|
|
/// <summary>
|
|
/// Additional details about the result
|
|
/// </summary>
|
|
[Id(2)]
|
|
public string Message { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Whether the bot should stop due to this result
|
|
/// </summary>
|
|
[Id(3)]
|
|
public bool ShouldStopBot { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reasons why a balance check might fail
|
|
/// </summary>
|
|
public enum BalanceCheckFailureReason
|
|
{
|
|
None,
|
|
InsufficientUsdcBelowMinimum,
|
|
InsufficientUsdcForSwap,
|
|
SwapInProgress,
|
|
SwapCooldownActive,
|
|
BalanceFetchError,
|
|
SwapExecutionError,
|
|
InsufficientEthBelowMinimum,
|
|
BotsHaveOpenPositions
|
|
}
|
|
} |