code: func (c *ChtIndexerBackend) fetchMissingNodes(ctx context.Context, section uint64, root common.Hash) error {
  	batch := c.trieTable.NewBatch()
  	r := &ChtRequest{ChtRoot: root, ChtNum: section - 1, BlockNum: section*c.sectionSize - 1, Config: c.odr.IndexerConfig()}
  	for {
  		err := c.odr.Retrieve(ctx, r)
  		switch err {
  		case nil:
  			r.Proof.Store(batch)
  			return batch.Write()
  		case ErrNoPeers:
  			// if there are no peers to serve, retry later
  			select {
  			case <-ctx.Done():
  				return ctx.Err()
  			case <-time.After(time.Second * 10):
  				// stay in the loop and try again
  			}
  		default:
  			return err
  		}
  	}
  }
docs: // fetchMissingNodes tries to retrieve the last entry of the latest trusted CHT from the
  // ODR backend in order to be able to add new entries and calculate subsequent root hashes