LoadStateFromDBOrGenesisDocProvider attempts to load the state from the database, or creates one using the given genesisDocProvider. On success this also returns the genesis doc loaded through the given provider.
( stateDB dbm.DB, genesisDocProvider GenesisDocProvider, )
| 1390 | // database, or creates one using the given genesisDocProvider. On success this also |
| 1391 | // returns the genesis doc loaded through the given provider. |
| 1392 | func LoadStateFromDBOrGenesisDocProvider( |
| 1393 | stateDB dbm.DB, |
| 1394 | genesisDocProvider GenesisDocProvider, |
| 1395 | ) (sm.State, *types.GenesisDoc, error) { |
| 1396 | // Get genesis doc |
| 1397 | genDoc, err := loadGenesisDoc(stateDB) |
| 1398 | if err != nil { |
| 1399 | genDoc, err = genesisDocProvider() |
| 1400 | if err != nil { |
| 1401 | return sm.State{}, nil, err |
| 1402 | } |
| 1403 | // save genesis doc to prevent a certain class of user errors (e.g. when it |
| 1404 | // was changed, accidentally or not). Also good for audit trail. |
| 1405 | if err := saveGenesisDoc(stateDB, genDoc); err != nil { |
| 1406 | return sm.State{}, nil, err |
| 1407 | } |
| 1408 | } |
| 1409 | stateStore := sm.NewStore(stateDB, sm.StoreOptions{ |
| 1410 | DiscardABCIResponses: false, |
| 1411 | }) |
| 1412 | state, err := stateStore.LoadFromDBOrGenesisDoc(genDoc) |
| 1413 | if err != nil { |
| 1414 | return sm.State{}, nil, err |
| 1415 | } |
| 1416 | return state, genDoc, nil |
| 1417 | } |
| 1418 | |
| 1419 | // panics if failed to unmarshal bytes |
| 1420 | func loadGenesisDoc(db dbm.DB) (*types.GenesisDoc, error) { |
no test coverage detected