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);
        }
Esempio n. 2
0
        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());
        }