public void Load(Stream stream, Network network, ChainSerializationFormat format) { if (network == null) { throw new ArgumentNullException(nameof(network)); } Load(stream, network.Consensus.ConsensusFactory, format); }
public void Load(Stream stream, Consensus consensus, ChainSerializationFormat format) { if (consensus == null) { throw new ArgumentNullException(nameof(consensus)); } Load(stream, consensus.ConsensusFactory, format); }
public void Load(BitcoinStream stream, ChainSerializationFormat format) { format = format ?? new ChainSerializationFormat(); format.AssertCoherent(); var genesis = Genesis; using (_lock.LockWrite()) { try { var height = 0; while (true) { uint256.MutableUint256 id = null; if (format.SerializePrecomputedBlockHash) { stream.ReadWrite(ref id); } BlockHeader header = null; if (format.SerializeBlockHeader) { stream.ReadWrite(ref header); } if (height == 0) { _blocksByHeight.Clear(); _blocksById.Clear(); _tip = null; if (header != null && genesis != null && header.GetHash() != genesis.HashBlock) { throw new InvalidOperationException("Unexpected genesis block"); } SetTipNoLock(new ChainedBlock(genesis?.Header ?? header, 0)); } else if (!format.SerializeBlockHeader || _tip.HashBlock == header.HashPrevBlock && !(header.IsNull && header.Nonce == 0)) { SetTipNoLock(new ChainedBlock(header, id?.Value, Tip)); } else { break; } height++; } } catch (EndOfStreamException) { } } }
public void Load(Stream stream, ConsensusFactory consensusFactory, ChainSerializationFormat format) { if (consensusFactory == null) { throw new ArgumentNullException(nameof(consensusFactory)); } Load(new BitcoinStream(stream, false) { ConsensusFactory = consensusFactory }, format); }
public void WriteTo(BitcoinStream stream, ChainSerializationFormat format) { format = format ?? new ChainSerializationFormat(); format.AssertCoherent(); using (@lock.LockRead()) { for (int i = 0; i < Tip.Height + 1; i++) { var block = GetBlockNoLock(i); if (format.SerializePrecomputedBlockHash) { stream.ReadWrite(block.HashBlock.AsBitcoinSerializable()); } if (format.SerializeBlockHeader) { stream.ReadWrite(block.Header); } } } }
public void Load(byte[] chain, Network network, ChainSerializationFormat format) { Load(new MemoryStream(chain), network, format); }
public ConcurrentChain(byte[] bytes, ChainSerializationFormat format) { Load(bytes, Consensus.Main.ConsensusFactory, format); }
public ConcurrentChain(byte[] bytes, Network network, ChainSerializationFormat format) { Load(bytes, network, format); }
public ConcurrentChain(byte[] bytes, Consensus consensus, ChainSerializationFormat format) { Load(bytes, consensus, format); }
public void WriteTo(Stream stream, ChainSerializationFormat format) { WriteTo(new BitcoinStream(stream, true), format); }
public void Load(Stream stream, ChainSerializationFormat format) { Load(stream, Consensus.Main.ConsensusFactory, format); }
public void Load(byte[] chain, ChainSerializationFormat format) { Load(new MemoryStream(chain), Consensus.Main.ConsensusFactory, format); }
public void Load(byte[] chain, Consensus consensus, ChainSerializationFormat format) { Load(new MemoryStream(chain), consensus, format); }
public void Load(Stream stream, ChainSerializationFormat format) { Load(new BitcoinStream(stream, false), format); }