// End of Block means packing the current block away, and setting // up the next func (fs *FactoidState) ProcessEndOfBlock(state interfaces.IState) { var hash, hash2 interfaces.IHash if fs.GetCurrentBlock() == nil { panic("Invalid state on initialization") } hash = fs.CurrentBlock.GetHash() hash2 = fs.CurrentBlock.GetLedgerKeyMR() state.GetCurrentDirectoryBlock().GetDBEntries()[2].SetKeyMR(hash) if err := state.GetDB().SaveFactoidBlockHead(fs.CurrentBlock); err != nil { panic(err) } state.SetPrevFactoidKeyMR(hash) fs.CurrentBlock = block.NewFBlock(fs.GetFactoshisPerEC(), state.GetDBHeight()+1) t := coinbase.GetCoinbase(primitives.GetTimeMilli()) err := fs.CurrentBlock.AddCoinbase(t) if err != nil { panic(err.Error()) } fs.UpdateTransaction(t) if hash != nil { fs.CurrentBlock.SetPrevKeyMR(hash.Bytes()) fs.CurrentBlock.SetPrevLedgerKeyMR(hash2.Bytes()) } }
// LatestDirBlockLocator returns a block locator for the latest known tip of the // main (best) chain. func LatestDirBlockLocator(state interfaces.IState) (BlockLocator, error) { latestDirBlockHash := state.GetCurrentDirectoryBlock().GetHash() //, _, _ := db.FetchBlockHeightCache() if latestDirBlockHash == nil { latestDirBlockHash = NewZeroHash() //zeroHash } // The best chain is set, so use its hash. return DirBlockLocatorFromHash(latestDirBlockHash, state), nil }