func CheckBlockPairIntegrity(block interfaces.IDirectoryBlock, prev interfaces.IDirectoryBlock) error { if block == nil { return fmt.Errorf("No block specified") } if prev == nil { if block.GetHeader().GetPrevKeyMR().IsZero() == false { return fmt.Errorf("Invalid PrevKeyMR") } if block.GetHeader().GetPrevFullHash().IsZero() == false { return fmt.Errorf("Invalid PrevFullHash") } if block.GetHeader().GetDBHeight() != 0 { return fmt.Errorf("Invalid DBHeight") } } else { if block.GetHeader().GetPrevKeyMR().IsSameAs(prev.GetKeyMR()) == false { return fmt.Errorf("Invalid PrevKeyMR") } if block.GetHeader().GetPrevFullHash().IsSameAs(prev.GetFullHash()) == false { return fmt.Errorf("Invalid PrevFullHash") } if block.GetHeader().GetDBHeight() != (prev.GetHeader().GetDBHeight() + 1) { return fmt.Errorf("Invalid DBHeight") } } return nil }
func NewDirectoryBlock(prev interfaces.IDirectoryBlock) interfaces.IDirectoryBlock { newdb := new(DirectoryBlock) newdb.Header = new(DBlockHeader) newdb.Header.SetVersion(constants.VERSION_0) if prev != nil { newdb.GetHeader().SetPrevFullHash(prev.GetFullHash()) newdb.GetHeader().SetPrevKeyMR(prev.GetKeyMR()) newdb.GetHeader().SetDBHeight(prev.GetHeader().GetDBHeight() + 1) } else { newdb.Header.SetPrevFullHash(primitives.NewZeroHash()) newdb.Header.SetPrevKeyMR(primitives.NewZeroHash()) newdb.GetHeader().SetDBHeight(0) } newdb.SetDBEntries(make([]interfaces.IDBEntry, 0)) newdb.AddEntry(primitives.NewHash(constants.ADMIN_CHAINID), primitives.NewZeroHash()) newdb.AddEntry(primitives.NewHash(constants.EC_CHAINID), primitives.NewZeroHash()) newdb.AddEntry(primitives.NewHash(constants.FACTOID_CHAINID), primitives.NewZeroHash()) return newdb }