public IActionResult Post(UsersRequestUSDT request) { _logger.LogInformation(JsonConvert.SerializeObject(request)); try { request.EthereumAddress = request.EthereumAddress.ConvertToEthereumChecksumAddress(); } catch (Exception) { return(BadRequest("Address not valid")); } if (request.ExpectedAmount < _config.GetValue <decimal>("minAmount")) { return(BadRequest("Amount to low")); } var index = request.Phone.IndexOf('('); if (index < 0) { return(BadRequest("Phone not valid")); } var withoutCode = request.Phone.Substring(index); var userId = withoutCode.Replace("(", "") .Replace(")", "") .Replace(" ", "") .Replace("-", ""); request.UserId = userId; _context.RequestUsdts.Add(request); _context.SaveChanges(); return(Created("", request.Id)); }
private async void PayForConsolidation(UsersRequestUSDT request, OkexFundingDepositDetails details) { var(txId, error) = await TokenService.Pay(_config, request); if (txId != null) { _logger.LogInformation("For user request: " + JsonConvert.SerializeObject(request) + "\nTxId: " + txId); request.Settled = true; request.TxId = details.TxId; request.EthereumStatus = txId; _context.RequestUsdts.Update(request); await _context.SaveChangesAsync(); } else { _logger.LogError("For user request: " + JsonConvert.SerializeObject(request) + "\nError:\n" + error); request.EthereumStatus = error; _context.RequestUsdts.Update(request); await _context.SaveChangesAsync(); } }
public static async Task <(string txId, string error)> Pay(IConfiguration config, UsersRequestUSDT request) { var contractDecimals = Convert.ToDecimal(Math.Pow(10, config.GetValue <int>("decimals"))); var rpcClient = new RpcClient(new Uri(config["rpc_client"])); var wallet = new Wallet(config["mnemo"], ""); var account = wallet.GetAccount(0); var web3 = new Web3(account, rpcClient); var noBtcService = new NOBTCService(web3, config["erc20_address"]); var fullMintAmount = new BigInteger(request.ExpectedAmount * contractDecimals); var commission = new BigInteger(request.ExpectedAmount * 0.01m * contractDecimals); var userAmount = fullMintAmount - commission; try { var mintFunction = new MintFunction() { Account = request.EthereumAddress, Amount = userAmount, Commission = commission }; var response = await noBtcService.MintRequestAsync(mintFunction); return(response, null); } catch (Exception e) { return(null, e.Message); } }