/// <summary> /// /// </summary> /// <param name="message"></param> /// <returns></returns> private bool ValidateCoinRule(ValidateCoinRuleMessage message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (message.Coin == null) { throw new ArgumentNullException(nameof(message.Coin)); } var coinHasElements = message.Coin.Validate().Any(); if (!coinHasElements) { try { using var secp256k1 = new Secp256k1(); using var bulletProof = new BulletProof(); var success = bulletProof.Verify(message.Coin.Commitment.FromHex(), message.Coin.RangeProof.FromHex(), null); if (!success) { return(false); } } catch (Exception ex) { logger.Error($"<<< SigningProvider.ValidateRule >>>: {ex.ToString()}"); return(false); } } return(true); }
/// <summary> /// /// </summary> /// <param name="message"></param> /// <returns></returns> public async Task <bool> ValidateCoinRule(ValidateCoinRuleMessage message) { return(await actor.Ask <bool>(message)); }