public async Task <Result <IEnumerable <IBlockchainTransaction> > > GetTokenTransactionsAsync( string address, CancellationToken cancellationToken = default) { var txsSources = new List <TxsSource>(); if (_currency.Name == NYX) { var token = _currency as TezosTokens.NYX; txsSources = new List <TxsSource> { new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?sender={address}&target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"setAllowTransferFrom\"*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transfer\"*{address}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transfer\"*{Forge.ForgeAddress(address)}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transferFrom\"*{address}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transferFrom\"*{Forge.ForgeAddress(address)}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) } }; } else if (_currency.Name == FA2) { var token = _currency as TezosTokens.FA2; txsSources = new List <TxsSource> { new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?sender={address}&target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"update_operators\"*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transfer\"*{address}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"transfer\"*{Forge.ForgeAddress(address)}*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) } }; } else { var token = _currency as TezosTokens.FA12; txsSources = new List <TxsSource> { new TxsSource { BaseUri = _baseUri, RequestUri = $"operations/transactions?sender={address}&target={token.TokenContractAddress}¶meters.as=*\"entrypoint\":\"approve\"*", Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTxs(JsonConvert.DeserializeObject <JArray>(content))) }, new TxsSource { BaseUri = token.BcdApi, RequestUri = $"tokens/{token.BcdNetwork}/{address}/transfers?size=10000", // todo: use contract filter {token.TokenContractAddress}"; Parser = new Func <string, Result <IEnumerable <TezosTransaction> > >(content => ParseTokenTxs(JsonConvert.DeserializeObject <JObject>(content))) }, }; } var txsResult = Enumerable.Empty <IBlockchainTransaction>(); foreach (var txsSource in txsSources) { var txsRes = await HttpHelper.GetAsyncResult( baseUri : txsSource.BaseUri, requestUri : txsSource.RequestUri, headers : _headers, responseHandler : (response, content) => txsSource.Parser(content), cancellationToken : cancellationToken) .ConfigureAwait(false); if (txsRes == null) { return(new Error(Errors.RequestError, $"Connection error while getting token approve transactions for address {address}")); } if (txsRes.HasError) { return(txsRes.Error); } txsResult = txsResult.Concat(txsRes.Value); } return(new Result <IEnumerable <IBlockchainTransaction> >(txsResult)); }