public async Task StartReissuanceAsync(BobClient bobClient, IEnumerable <long> amounts, IEnumerable <long> vsizes, CancellationToken cancellationToken)
        {
            await Task.WhenAll(AmountCredentialToPresentTasks.Concat(VsizeCredentialToPresentTasks)).ConfigureAwait(false);

            IEnumerable <Credential> inputAmountCredentials = AmountCredentialToPresentTasks.Select(x => x.Result);
            IEnumerable <Credential> inputVsizeCredentials  = VsizeCredentialToPresentTasks.Select(x => x.Result);
            var amountsToRequest = AddExtraCredentialRequests(amounts, inputAmountCredentials.Sum(x => x.Value));
            var vsizesToRequest  = AddExtraCredentialRequests(vsizes, inputVsizeCredentials.Sum(x => x.Value));

            (IEnumerable <Credential> RealAmountCredentials, IEnumerable <Credential> RealVsizeCredentials)result = await bobClient.ReissueCredentialsAsync(
                amountsToRequest,
                vsizesToRequest,
                inputAmountCredentials,
                inputVsizeCredentials,
                cancellationToken).ConfigureAwait(false);

            // TODO keep the credentials that were not needed by the graph
            var(amountCredentials, _) = SeparateExtraCredentials(result.RealAmountCredentials, amounts);
            var(vsizeCredentials, _)  = SeparateExtraCredentials(result.RealVsizeCredentials, vsizes);

            foreach (var(tcs, credential) in AmountCredentialTasks.Zip(amountCredentials))
            {
                tcs.SetResult(credential);
            }
            foreach (var(tcs, credential) in VsizeCredentialTasks.Zip(vsizeCredentials))
            {
                tcs.SetResult(credential);
            }
        }
Example #2
0
        public async Task ConfirmConnectionTaskAsync(
            TimeSpan connectionConfirmationTimeout,
            AliceClient aliceClient,
            IEnumerable <long> amounts,
            IEnumerable <long> vsizes,
            Money effectiveValue,
            int vsizeValue,
            RoundStateUpdater roundStateUpdater,
            CancellationToken cancellationToken)
        {
            var amountsToRequest = AddExtraCredentialRequests(amounts, effectiveValue.Satoshi);
            var vsizesToRequest  = AddExtraCredentialRequests(vsizes, vsizeValue);

            await aliceClient.ConfirmConnectionAsync(connectionConfirmationTimeout, amountsToRequest, vsizesToRequest, roundStateUpdater, cancellationToken).ConfigureAwait(false);

            // TODO keep extra credentials
            var(amountCredentials, _) = SeparateExtraCredentials(aliceClient.IssuedAmountCredentials, amounts);
            var(vsizeCredentials, _)  = SeparateExtraCredentials(aliceClient.IssuedVsizeCredentials, vsizes);

            foreach (var(tcs, credential) in AmountCredentialTasks.Zip(amountCredentials))
            {
                tcs.SetResult(credential);
            }
            foreach (var(tcs, credential) in VsizeCredentialTasks.Zip(vsizeCredentials))
            {
                tcs.SetResult(credential);
            }
        }