Ejemplo n.º 1
0
        public bool TryAddChainedHeader(ChainedHeader chainedHeader)
        {
            try
            {
                using (var handle = this.cursorCache.TakeItem())
                {
                    var cursor = handle.Item;

                    using (var jetTx = cursor.jetSession.BeginTransaction())
                    {
                        using (var jetUpdate = cursor.jetSession.BeginUpdate(cursor.blockHeadersTableId, JET_prep.Insert))
                        {
                            Api.SetColumns(cursor.jetSession, cursor.blockHeadersTableId,
                                           new BytesColumnValue {
                                Columnid = cursor.blockHeaderHashColumnId, Value = DbEncoder.EncodeUInt256(chainedHeader.Hash)
                            },
                                           new BytesColumnValue {
                                Columnid = cursor.blockHeaderPreviousHashColumnId, Value = DbEncoder.EncodeUInt256(chainedHeader.PreviousBlockHash)
                            },
                                           new Int32ColumnValue {
                                Columnid = cursor.blockHeaderHeightColumnId, Value = chainedHeader.Height
                            },
                                           new BytesColumnValue {
                                Columnid = cursor.blockHeaderTotalWorkColumnId, Value = DataEncoder.EncodeTotalWork(chainedHeader.TotalWork)
                            },
                                           new BytesColumnValue {
                                Columnid = cursor.blockHeaderBytesColumnId, Value = DataEncoder.EncodeChainedHeader(chainedHeader)
                            });

                            jetUpdate.Save();
                        }

                        jetTx.CommitLazy();
                        return(true);
                    }
                }
            }
            catch (EsentKeyDuplicateException)
            {
                return(false);
            }
        }