code: func (s *LDBStore) SyncIterator(since uint64, until uint64, po uint8, f func(Address, uint64) bool) error {
  	metrics.GetOrRegisterCounter("ldbstore.synciterator", nil).Inc(1)
  
  	sincekey := getDataKey(since, po)
  	untilkey := getDataKey(until, po)
  	it := s.db.NewIterator()
  	defer it.Release()
  
  	for ok := it.Seek(sincekey); ok; ok = it.Next() {
  		metrics.GetOrRegisterCounter("ldbstore.synciterator.seek", nil).Inc(1)
  
  		dbkey := it.Key()
  		if dbkey[0] != keyData || dbkey[1] != po || bytes.Compare(untilkey, dbkey) < 0 {
  			break
  		}
  		key := make([]byte, 32)
  		val := it.Value()
  		copy(key, val[:32])
  		if !f(Address(key), binary.BigEndian.Uint64(dbkey[2:])) {
  			break
  		}
  	}
  	return it.Error()
  }
docs: // SyncIterator(start, stop, po, f) calls f on each hash of a bin po from start to stop