code: func (kern *Kernel) LoadDump(genesisDoc *genesis.GenesisDoc, restoreFile string, silent bool) (err error) {
  	var exists bool
  	if exists, kern.Blockchain, err = bcm.LoadOrNewBlockchain(kern.database, genesisDoc, kern.Logger); err != nil {
  		return fmt.Errorf("error creating or loading blockchain state: %v", err)
  	}
  
  	if exists {
  		if silent {
  			kern.Logger.InfoMsg("State already exists, skipping...")
  			return nil
  		}
  		return fmt.Errorf("existing state found, please remove before restoring")
  	}
  
  	kern.Blockchain.SetBlockStore(bcm.NewBlockStore(blockchain.NewBlockStore(kern.database)))
  
  	if kern.State, err = state.MakeGenesisState(kern.database, genesisDoc); err != nil {
  		return fmt.Errorf("could not build genesis state: %v", err)
  	}
  
  	if len(genesisDoc.AppHash) == 0 {
  		return fmt.Errorf("AppHash is required when restoring chain")
  	}
  
  	reader, err := state.NewFileDumpReader(restoreFile)
  	if err != nil {
  		return err
  	}
  
  	if err = kern.State.LoadDump(reader); err != nil {
  		return err
  	}
  
  	if err = kern.State.InitialCommit(); err != nil {
  		return err
  	}
  
  	if !bytes.Equal(kern.State.Hash(), kern.Blockchain.GenesisDoc().AppHash) {
  		return fmt.Errorf("Restore produced a different apphash expect 0x%x got 0x%x",
  			kern.Blockchain.GenesisDoc().AppHash, kern.State.Hash())
  	}
  	err = kern.Blockchain.CommitWithAppHash(kern.State.Hash())
  	if err != nil {
  		return fmt.Errorf("Unable to commit %v", err)
  	}
  
  	kern.Logger.InfoMsg("State restore successful -> height 0",
  		"state_hash", kern.State.Hash())
  	return nil
  }
docs: // LoadDump restores chain state from the given dump file