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); }
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 })); }
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); }
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); }
public async Task <ITransferContract> GetTransferContract(string userAddress, string coinAdapterAddress) { ITransferContract contract = await _transferContractRepository.GetAsync(userAddress, coinAdapterAddress); return(contract); }