BitSharp.Core.Builders.UnconfirmedTxesBuilder.RollbackBlock C# (CSharp) Method

RollbackBlock() public method

public RollbackBlock ( ChainedHeader chainedHeader, IEnumerable blockTxes ) : void
chainedHeader BitSharp.Core.Domain.ChainedHeader
blockTxes IEnumerable
return void
        public void RollbackBlock(ChainedHeader chainedHeader, IEnumerable<BlockTx> blockTxes)
        {
            var unconfirmedTxes = ImmutableDictionary.CreateBuilder<UInt256, BlockTx>();

            updateLock.DoWrite(() =>
            {
                using (var handle = storageManager.OpenUnconfirmedTxesCursor())
                {
                    var unconfirmedTxesCursor = handle.Item;

                    unconfirmedTxesCursor.BeginTransaction();

                    var newChain = chain.Value.ToBuilder().RemoveBlock(chainedHeader).ToImmutable();

                    foreach (var blockTx in blockTxes)
                    {
                        unconfirmedTxes.Add(blockTx.Hash, blockTx);
                    }

                    unconfirmedTxesCursor.ChainTip = chainedHeader;

                    commitLock.DoWrite(() =>
                    {
                        unconfirmedTxesCursor.CommitTransaction();
                        chain = new Lazy<Chain>(() => newChain).Force();
                    });
                }
            });

            TxesUnconfirmed?.Invoke(this, new TxesUnconfirmedEventArgs(chainedHeader, unconfirmedTxes.ToImmutable()));
        }