public async Task <OperationRisk> ValidateAsync(Operation operation)
        {
            var constraints       = _constraintsRegistry.GetConstraints(operation.BlockchainType, operation.BlockchainAssetId, operation.Type);
            var violationsBuilder = new StringBuilder();

            foreach (var item in constraints)
            {
                var validationResult = await item.constraint.ApplyAsync(
                    item.blockchainType,
                    item.blockchainAssetId,
                    item.operationType,
                    operation);

                if (validationResult.IsViolated)
                {
                    violationsBuilder.AppendLine($"{item.constraint.GetConstraintName()}: {validationResult.Violation}");
                }
            }

            return(violationsBuilder.Length > 0
                ? OperationRisk.ResolutionRequired(violationsBuilder.ToString())
                : OperationRisk.Reliable);
        }
Example #2
0
 public OperationRisk ToRisk()
 {
     return(Level == OperationRiskLevel.Reliable
         ? OperationRisk.Reliable
         : OperationRisk.ResolutionRequired(Violations));
 }