public async Task GetBalanceChangesAsync_WithUnsupportedExodusTransactionType_ShouldThrow()
        {
            var tx = Transaction.Parse(
                ZcoinTransactionData.ZerocoinRemint, ZcoinNetworks.Instance.Regtest);
            var upsupportedId = int.MaxValue;
            var unsupported   = new FakeExodusTransaction(TestAddress.Regtest1, TestAddress.Regtest2, upsupportedId, 1);

            #pragma warning disable CS0618
            tx.SetExodusTransaction(unsupported);
            #pragma warning restore CS0618

            await Assert.ThrowsAsync <TransactionException>(
                () => this.subject.GetBalanceChangesAsync(tx, CancellationToken.None)
                );
        }
        public async Task GetBalanceChangesAsync_WithSupportedType_ShouldSuccess()
        {
            // Arrange.
            var tx = Transaction.Parse(
                ZcoinTransactionData.ZerocoinRemint, ZcoinNetworks.Instance.Regtest);
            var exodus = new FakeExodusTransaction(TestAddress.Regtest1, TestAddress.Regtest2, this.supportedId, 0);

            #pragma warning disable CS0618
            tx.SetExodusTransaction(exodus);
            #pragma warning restore CS0618

            var address  = TestAddress.Mainnet1;
            var amount   = new PropertyAmount(10);
            var property = new PropertyId(2);

            var changes = new Collection <BalanceChange>
            {
                new BalanceChange(address, amount, property)
            };

            var cancellationToken = new CancellationToken(false);

            this.defaultRetriever.GetBalanceChangesAsync
            (
                Arg.Is <ExodusTransaction>(t => exodus == t),
                Arg.Is <CancellationToken>(c => c == cancellationToken)
            ).Returns(changes);

            // Act.
            var retrievedChanges = await this.subject.GetBalanceChangesAsync(tx, cancellationToken);

            // Assert.
            _ = this.defaultRetriever.Received(1).GetBalanceChangesAsync
                (
                Arg.Is <ExodusTransaction>(t => exodus == t),
                Arg.Is <CancellationToken>(c => c == cancellationToken)
                );

            Assert.Equal(changes, retrievedChanges);
        }