public Task <TransactionReceipt> SetSchemeRequestAndWaitForReceiptAsync(List <AttributeDefinition> definitions, CancellationTokenSource cancellationToken = null) { var setSchemeFunction = new SetSchemeFunction(); setSchemeFunction.Definitions = definitions; return(ContractHandler.SendRequestAndWaitForReceiptAsync(setSchemeFunction, cancellationToken)); }
public Task <string> SetSchemeRequestAsync(List <AttributeDefinition> definitions) { var setSchemeFunction = new SetSchemeFunction(); setSchemeFunction.Definitions = definitions; return(ContractHandler.SendRequestAsync(setSchemeFunction)); }
public Task <string> SetSchemeRequestAsync(SetSchemeFunction setSchemeFunction) { return(ContractHandler.SendRequestAsync(setSchemeFunction)); }
public Task <TransactionReceipt> SetSchemeRequestAndWaitForReceiptAsync(SetSchemeFunction setSchemeFunction, CancellationTokenSource cancellationToken = null) { return(ContractHandler.SendRequestAndWaitForReceiptAsync(setSchemeFunction, cancellationToken)); }
public async Task <ActionStatus> StoreScheme(long accountId, Client.Common.Entities.AttributeDefinition[] attributeDefinitions) { ActionStatus actionStatus = new ActionStatus { IntegrationType = Key, IntegrationAction = nameof(StoreScheme), ActionSucceeded = true }; await _semaphoreSlim.WaitAsync(); try { var privateKey = _dataAccessService.GetAccountKeyValue(accountId, "RskSecretKey"); if (string.IsNullOrEmpty(privateKey)) { actionStatus.ActionSucceeded = false; actionStatus.ErrorMsg = $"Account {accountId} has no integration with {Key}"; } else { var account = new Account(privateKey); actionStatus.IntegrationAddress = account.Address; var web3 = new Web3(account, _integrationConfiguration.RpcUri); var o10IdentityService = new O10IdentityService(web3, _integrationConfiguration.ContractAddress); var issuers = await o10IdentityService.GetAllIssuersQueryAsync().ConfigureAwait(false); if (!issuers.ReturnValue1.Any(issuers => issuers.Address.Equals(account.Address, StringComparison.InvariantCultureIgnoreCase))) { actionStatus.ActionSucceeded = false; actionStatus.ErrorMsg = $"Account with Id {accountId} not registered as an Identity Provider"; } else { GetSchemeOutputDTO scheme = null; try { scheme = await o10IdentityService.GetSchemeQueryAsync(account.Address).ConfigureAwait(false); } catch (Exception) { scheme = null; } List <AttributeDefinition> definitions = attributeDefinitions.Select(a => new AttributeDefinition { AttributeName = a.AttributeName, AttributeScheme = a.SchemeName, Alias = a.Alias, IsRoot = a.IsRoot }).ToList(); if (scheme?.ReturnValue2.All(a => definitions.Any(d => a.AttributeName == d.AttributeName && a.AttributeScheme == d.AttributeScheme && a.Alias == d.Alias && a.IsRoot == d.IsRoot)) ?? false) { actionStatus.ActionSucceeded = true; } else { var balance = await web3.Eth.GetBalance.SendRequestAsync(account.Address).ConfigureAwait(false); var functionTransactionHandler = web3.Eth.GetContractTransactionHandler <SetSchemeFunction>(); SetSchemeFunction func = new SetSchemeFunction { Definitions = definitions }; var esimatedGas = await functionTransactionHandler.EstimateGasAsync(_integrationConfiguration.ContractAddress, func).ConfigureAwait(false); func.Gas = new BigInteger(esimatedGas.ToLong() * 10); if (balance < func.Gas) { actionStatus.ActionSucceeded = false; actionStatus.ErrorMsg = "Not enough funds"; } else { var receipt = await o10IdentityService.SetSchemeRequestAndWaitForReceiptAsync(func).ConfigureAwait(false); if (receipt.Failed()) { actionStatus.ActionSucceeded = false; actionStatus.ErrorMsg = $"Transaction with hash {receipt.TransactionHash} failed"; } } } } } } catch (Exception ex) { _logger.Error($"{nameof(StoreScheme)} failed for the acccount {accountId}", ex); actionStatus.ActionSucceeded = false; actionStatus.ErrorMsg = ex.Message; } finally { _semaphoreSlim.Release(); } return(actionStatus); }