Add validation for Kudai strategy staking requirements in StartCopyTradingCommandHandler. Implemented methods in IEvmManager to retrieve staked KUDAI balance and GBC NFT count. Enhanced error handling for staking checks.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
using System.Numerics;
|
||||
using Nethereum.ABI.FunctionEncoding.Attributes;
|
||||
using Nethereum.Contracts;
|
||||
|
||||
namespace Managing.Infrastructure.Evm.Contracts;
|
||||
|
||||
public class TokenStakesFunction : FunctionMessage
|
||||
{
|
||||
[Parameter("address", "_user", 1)]
|
||||
public string User { get; set; }
|
||||
}
|
||||
|
||||
public class TokenStakesOutputDTO : FunctionOutputDTO
|
||||
{
|
||||
[Parameter("uint256", "", 1)]
|
||||
public BigInteger ReturnValue1 { get; set; }
|
||||
}
|
||||
|
||||
public class GetUserStakedNftsFunction : FunctionMessage
|
||||
{
|
||||
[Parameter("address", "_user", 1)]
|
||||
public string User { get; set; }
|
||||
}
|
||||
|
||||
public class GetUserStakedNftsOutputDTO : FunctionOutputDTO
|
||||
{
|
||||
[Parameter("uint256[]", "", 1)]
|
||||
public List<BigInteger> ReturnValue1 { get; set; }
|
||||
}
|
||||
@@ -11,6 +11,7 @@ using Managing.Domain.Evm;
|
||||
using Managing.Domain.Statistics;
|
||||
using Managing.Domain.Trades;
|
||||
using Managing.Infrastructure.Evm.Abstractions;
|
||||
using Managing.Infrastructure.Evm.Contracts;
|
||||
using Managing.Infrastructure.Evm.Models;
|
||||
using Managing.Infrastructure.Evm.Models.Gmx.v2;
|
||||
using Managing.Infrastructure.Evm.Models.Privy;
|
||||
@@ -43,6 +44,10 @@ public class EvmManager : IEvmManager
|
||||
private readonly IWeb3ProxyService _web3ProxyService;
|
||||
private readonly ICacheService _cacheService;
|
||||
|
||||
// Kudai staking contract constants
|
||||
private const string KudaiTokenAddress = "0xc9bD1C1e65eBFb36cF4b3d9FC8E2b844248deEE8";
|
||||
private const string StackingContractAddress = "0x5b02047D471cFf479EBD37575e41Eaa37a4d9321";
|
||||
|
||||
public EvmManager(IEnumerable<ISubgraphPrices> subgraphs,
|
||||
IWeb3ProxyService web3ProxyService, ICacheService cacheService)
|
||||
{
|
||||
@@ -996,4 +1001,47 @@ public class EvmManager : IEvmManager
|
||||
// Map the result to the Position domain object
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<decimal> GetKudaiStakedBalance(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
var tokenStakesMessage = new TokenStakesFunction() { User = address };
|
||||
var queryHandler = _web3.Eth.GetContractQueryHandler<TokenStakesFunction>();
|
||||
|
||||
var stakedAmount = await queryHandler
|
||||
.QueryAsync<TokenStakesOutputDTO>(StackingContractAddress, tokenStakesMessage)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
// KUDAI has 18 decimals like most ERC20 tokens
|
||||
return Web3.Convert.FromWei(stakedAmount.ReturnValue1, 18);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
Console.Error.WriteLine($"Error getting KUDAI staked balance for address {address}: {ex.Message}");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> GetGbcStakedCount(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
var getUserStakedNftsMessage = new GetUserStakedNftsFunction() { User = address };
|
||||
var queryHandler = _web3.Eth.GetContractQueryHandler<GetUserStakedNftsFunction>();
|
||||
|
||||
var stakedNfts = await queryHandler
|
||||
.QueryAsync<GetUserStakedNftsOutputDTO>(StackingContractAddress, getUserStakedNftsMessage)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return stakedNfts.ReturnValue1?.Count ?? 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
Console.Error.WriteLine($"Error getting GBC staked count for address {address}: {ex.Message}");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user