コード例 #1
0
        private async void Synchronizer_ResponseArrivedAsync(object sender, SynchronizeResponse response)
        {
            try
            {
                using (await ProcessLock.LockAsync())
                {
                    var unconfirmedCoinJoinHashes = response.UnconfirmedCoinJoins;
                    if (!unconfirmedCoinJoinHashes.Any())
                    {
                        return;
                    }

                    var txsNotKnownByAWallet = WalletManager.FilterUnknownCoinjoins(unconfirmedCoinJoinHashes);

                    using var client = new WasabiClient(Synchronizer.WasabiClient.TorClient.DestinationUriAction, Synchronizer.WasabiClient.TorClient.TorSocks5EndPoint);

                    var unconfirmedCoinJoins = await client.GetTransactionsAsync(Synchronizer.Network, txsNotKnownByAWallet, CancellationToken.None).ConfigureAwait(false);

                    foreach (var tx in unconfirmedCoinJoins.Select(x => new SmartTransaction(x, Height.Mempool)))
                    {
                        if (RpcClient is null ||
                            await TryBroadcastTransactionWithRpcAsync(tx).ConfigureAwait(false) ||
                            (await RpcClient.TestAsync().ConfigureAwait(false)) is { })                                // If the test throws exception then I believe it, because RPC is down and the backend is the god.
                        {
                            WalletManager.ProcessCoinJoin(tx);
                        }
                    }
コード例 #2
0
        public async Task GetTransactionsTestAsync()
        {
            var mempool = Enumerable.Range(0, 1_100).Select(_ => CreateTransaction()).ToArray();

            Task <HttpResponseMessage> FakeServerCode(HttpMethod method, string action, NameValueCollection parameters, string body)
            {
                Assert.True(parameters.Count <= 10);

                IEnumerable <uint256> requestedTxIds = parameters["transactionIds"].Split(",").Select(x => uint256.Parse(x));
                IEnumerable <string>  result         = mempool.Where(tx => requestedTxIds.Contains(tx.GetHash())).Select(tx => tx.ToHex());

                var response = new HttpResponseMessage(HttpStatusCode.OK);

                response.Content = new StringContent(JsonConvert.SerializeObject(result));
                return(Task.FromResult(response));
            };

            var torHttpClient = new MockTorHttpClient();

            torHttpClient.OnSendAsync = FakeServerCode;
            var client = new WasabiClient(torHttpClient);

            Assert.Empty(WasabiClient.TransactionCache);

            // Requests one transaction
            var searchedTxId = mempool[0].GetHash();
            var txs          = await client.GetTransactionsAsync(Network.Main, new[] { searchedTxId }, CancellationToken.None);

            Assert.Equal(searchedTxId, txs.First().GetHash());
            Assert.NotEmpty(WasabiClient.TransactionCache);
            Assert.True(WasabiClient.TransactionCache.ContainsKey(searchedTxId));

            // Requests 20 transaction
            var searchedTxIds = mempool[..20].Select(x => x.GetHash());
コード例 #3
0
        public async Task GetTransactionsAsync(NetworkType networkType)
        {
            using var client = new WasabiClient(LiveServerTestsFixture.UriMappings[networkType], Global.Instance.TorSocks5Endpoint);
            var randomTxIds = Enumerable.Range(0, 20).Select(_ => RandomUtils.GetUInt256());
            var network     = networkType == NetworkType.Mainnet ? Network.Main : Network.TestNet;

            var ex = await Assert.ThrowsAsync <HttpRequestException>(async() =>
                                                                     await client.GetTransactionsAsync(network, randomTxIds.Take(4), CancellationToken.None));

            Assert.Equal("Bad Request\nNo such mempool or blockchain transaction. Use gettransaction for wallet transactions.", ex.Message);

            var mempoolTxIds = await client.GetMempoolHashesAsync(CancellationToken.None);

            randomTxIds = Enumerable.Range(0, 5).Select(_ => mempoolTxIds.RandomElement()).Distinct().ToArray();
            var txs = await client.GetTransactionsAsync(network, randomTxIds, CancellationToken.None);

            var returnedTxIds = txs.Select(tx => tx.GetHash());

            Assert.Equal(returnedTxIds.OrderBy(x => x).ToArray(), randomTxIds.OrderBy(x => x).ToArray());
        }