code: func (a attrBlocks) Diff(other []AttrBlock) []uint64 {
  	var ids []uint64
  	for {
  		// Read next block from each list.
  		var blk0, blk1 *AttrBlock
  		if len(a) > 0 {
  			blk0 = &a[0]
  		}
  		if len(other) > 0 {
  			blk1 = &other[0]
  		}
  
  		// Exit if "a" contains no more blocks.
  		if blk0 == nil {
  			return ids
  		}
  
  		// Add block ID if it's different or if it's only in "a".
  		if blk1 == nil || blk0.ID < blk1.ID {
  			ids = append(ids, blk0.ID)
  			a = a[1:]
  		} else if blk1.ID < blk0.ID {
  			other = other[1:]
  		} else {
  			if !bytes.Equal(blk0.Checksum, blk1.Checksum) {
  				ids = append(ids, blk0.ID)
  			}
  			a, other = a[1:], other[1:]
  		}
  	}
  }
docs: // Diff returns a list of block ids that are different or are new in other.
  // Block lists must be in sorted order.