Пример #1
0
        public async Task <string> CreateTransferContract(string userAddress, string coinAdapterAddress)
        {
            ITransferContract contract = await GetTransferContract(userAddress, coinAdapterAddress);

            if (contract != null)
            {
                throw new ClientSideException(ExceptionType.EntityAlreadyExists, $"Transfer account for {userAddress} - {coinAdapterAddress} already exists");
            }

            ICoin coin = await GetCoinWithCheck(coinAdapterAddress);

            string queueName = QueueHelper.GenerateQueueNameForContractPool(coinAdapterAddress);
            ITransferContractQueueService transferContractQueueService = _transferContractQueueServiceFactory.Get(queueName);
            ITransferContract             transferContract             = await transferContractQueueService.GetContract();

            transferContract.UserAddress = userAddress;

            await _transferContractRepository.SaveAsync(transferContract);

            await _transferContractUserAssignmentQueueService.PushContract(new TransferContractUserAssignment()
            {
                TransferContractAddress = transferContract.ContractAddress,
                UserAddress             = userAddress,
                CoinAdapterAddress      = coin.AdapterAddress
            });

            return(transferContract.ContractAddress);
        }
Пример #2
0
        public async Task <string> SetUserAddressForTransferContract(string userAddress, string transferContractAddress)
        {
            ITransferContract transferContract = await _transferContractRepository.GetAsync(transferContractAddress);

            if (transferContract == null)
            {
                throw new ClientSideException(ExceptionType.WrongParams, $"Transfer contract with address {transferContractAddress} does not exist");
            }

            ICoin coin = await _coinRepository.GetCoinByAddress(transferContract.CoinAdapterAddress);

            if (coin == null)
            {
                throw new ClientSideException(ExceptionType.WrongParams, $"Coin with address {transferContract.CoinAdapterAddress} does not exist");
            }

            string coinAbi = _settings.CoinAbi;

            var contract = _web3.Eth.GetContract(coinAbi, transferContract.CoinAdapterAddress);
            var function = contract.GetFunction("setTransferAddressUser");
            //function setTransferAddressUser(address userAddress, address transferAddress) onlyowner{
            string transaction = await function.SendTransactionAsync(_settings.EthereumMainAccount, userAddress, transferContractAddress);

            transferContract.UserAddress = userAddress;
            await _transferContractRepository.SaveAsync(transferContract);

            return(transaction);
        }
        public async Task <ITransferContract> GetContract()
        {
            string contractSerialized = await GetContractRaw();

            ITransferContract contract = Newtonsoft.Json.JsonConvert.DeserializeObject <TransferContract>(contractSerialized);

            return(contract);
        }
 public static TransferContractEntity Create(ITransferContract transferContract)
 {
     return(new TransferContractEntity
     {
         PartitionKey = GenerateParitionKey(),
         CoinAdapterAddress = transferContract.CoinAdapterAddress,
         ContainsEth = transferContract.ContainsEth,
         UserAddress = transferContract.UserAddress,
         ContractAddress = transferContract.ContractAddress,
         ExternalTokenAddress = transferContract.ExternalTokenAddress,
         AssignmentHash = transferContract.AssignmentHash
     });
 }
        public async Task <ITransferContract> GetAsync(string userAddress, string coinAdapterAddress)
        {
            var index = await _userAdapterIndex.GetDataAsync(_indexPartition,
                                                             GenerateUserAdapterRowKey(userAddress, coinAdapterAddress));

            if (index == null)
            {
                return(null);
            }

            ITransferContract result = await _table.GetDataAsync(index);

            return(result);
        }
        public async Task SaveAsync(ITransferContract transferContract)
        {
            var entity = TransferContractEntity.Create(transferContract);

            await _table.InsertOrReplaceAsync(entity);

            if (!string.IsNullOrEmpty(entity.UserAddress))
            {
                var index = new AzureIndex(_indexPartition,
                                           GenerateUserAdapterRowKey(entity.UserAddress, entity.CoinAdapterAddress), entity);

                await _userAdapterIndex.InsertOrReplaceAsync(index);
            }
        }
        public async Task <IActionResult> GetAddress(string userAddress, string coinAdapterAddress)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            ITransferContract contract = await _transferContractService.GetTransferContract(_addressUtil.ConvertToChecksumAddress(userAddress),
                                                                                            coinAdapterAddress);

            if (contract == null)
            {
                return(NotFound());
            }

            return(Ok(new RegisterResponse
            {
                Contract = contract.ContractAddress
            }));
        }
Пример #8
0
        public async Task <string> GetUserAddressForTransferContract(string transferContractAddress)
        {
            ITransferContract transferContract = await _transferContractRepository.GetAsync(transferContractAddress);

            if (transferContract == null)
            {
                throw new ClientSideException(ExceptionType.WrongParams, $"Transfer contract with address {transferContractAddress} does not exist");
            }

            ICoin coin = await _coinRepository.GetCoinByAddress(transferContract.CoinAdapterAddress);

            if (coin == null)
            {
                throw new ClientSideException(ExceptionType.WrongParams, $"Coin with address {transferContract.CoinAdapterAddress} does not exist");
            }

            string   coinAbi     = _settings.CoinAbi;
            Contract contract    = _web3.Eth.GetContract(coinAbi, transferContract.CoinAdapterAddress);
            Function function    = contract.GetFunction("getTransferAddressUser");
            string   userAddress = await function.CallAsync <string>(transferContractAddress);

            return(userAddress);
        }
Пример #9
0
 public TransferedController(ITransferContract transferContract, IStoreContract storeContract)
 {
     _transferContract = transferContract;
     _storeContract    = storeContract;
 }
        public async Task PushContract(ITransferContract transferContract)
        {
            string transferContractSerialized = Newtonsoft.Json.JsonConvert.SerializeObject(transferContract);

            await _queue.PutRawMessageAsync(transferContractSerialized);
        }
        public async Task <ITransferContract> GetAsync(string contractAddress)
        {
            ITransferContract result = await _table.GetDataAsync(TransferContractEntity.GenerateParitionKey(), contractAddress);

            return(result);
        }
Пример #12
0
        public async Task <ITransferContract> GetTransferContract(string userAddress, string coinAdapterAddress)
        {
            ITransferContract contract = await _transferContractRepository.GetAsync(userAddress, coinAdapterAddress);

            return(contract);
        }