C# Class BitSharper.Store.BoundedOverheadBlockStore

Stores the block chain to disk.
This implementation is designed to have constant memory usage, regardless of the size of the block chain being stored. It exploits operating system level buffering and the fact that get() requests are, in normal usage, localized in chain space.

Blocks are stored sequentially. Most blocks are fetched out of a small in-memory cache. The slowest part is traversing difficulty transition points, which requires seeking backwards over around 2000 blocks. On a Google Nexus S phone this takes a couple of seconds. On a MacBook Pro it takes around 50msec.

The store has much room for optimization. Expanding the size of the cache will likely allow us to traverse difficulty transitions without using too much memory and without hitting the disk at all, for the case of initial block chain download. Storing the hashes on disk would allow us to avoid deserialization and hashing which is expensive on Android.

Inheritance: IBlockStore
Show file Open project: TangibleCryptography/BitSharper Class Usage Examples

Public Methods

Method Description
BoundedOverheadBlockStore ( NetworkParameters @params, FileInfo file ) : System.Diagnostics
Dispose ( ) : void
Get ( Sha256Hash hash ) : StoredBlock
GetChainHead ( ) : StoredBlock
Put ( StoredBlock block ) : void
SetChainHead ( StoredBlock chainHead ) : void

Private Methods

Method Description
CreateNewStore ( NetworkParameters @params, FileInfo file ) : void
GetRecord ( Sha256Hash hash ) : Record
Load ( FileInfo file ) : void

Method Details

BoundedOverheadBlockStore() public method

public BoundedOverheadBlockStore ( NetworkParameters @params, FileInfo file ) : System.Diagnostics
@params NetworkParameters
file System.IO.FileInfo
return System.Diagnostics

Dispose() public method

public Dispose ( ) : void
return void

Get() public method

public Get ( Sha256Hash hash ) : StoredBlock
hash Sha256Hash
return StoredBlock

GetChainHead() public method

public GetChainHead ( ) : StoredBlock
return StoredBlock

Put() public method

public Put ( StoredBlock block ) : void
block StoredBlock
return void

SetChainHead() public method

public SetChainHead ( StoredBlock chainHead ) : void
chainHead StoredBlock
return void