public async Task <string> AssignContract(string userAddress) { var contractAddress = await GetContractAddress(userAddress); if (string.IsNullOrEmpty(contractAddress)) { var pool = _poolFactory.Get(Constants.Erc20DepositContractPoolQueue); contractAddress = await pool.GetContractAddress(); var command = new AssignErc223DepositToUserCommand() { UserAddress = userAddress, ContractAddress = contractAddress }; try { _cqrsEngine.SendCommand(command, "blockchain.ethereum.core.api", EthereumBoundedContext.Name); } catch (Exception e) { await pool.PushContractAddress(contractAddress); throw; } } return(contractAddress); }
public async Task <CommandHandlingResult> Handle(AssignErc223DepositToUserCommand command, IEventPublisher eventPublisher) { await _contractRepository.AddOrReplace(new Erc20DepositContract { ContractAddress = command.ContractAddress, UserAddress = command.UserAddress }); eventPublisher.PublishEvent(new Erc223DepositAssignedToUserEvent() { UserAddress = command.UserAddress, ContractAddress = command.ContractAddress }); return(CommandHandlingResult.Ok()); }