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);
            }
        }
        public async Task StartOutputRegistrationAsync(
            BobClient bobClient,
            Script scriptPubKey,
            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);

            await bobClient.RegisterOutputAsync(
                scriptPubKey,
                inputAmountCredentials,
                inputVsizeCredentials,
                cancellationToken).ConfigureAwait(false);
        }