code: func (swap *Swap) Add(n int) error {
  	defer swap.lock.Unlock()
  	swap.lock.Lock()
  	swap.balance += n
  	if !swap.Sells && swap.balance > 0 {
  		log.Trace(fmt.Sprintf("<%v> remote peer cannot have debt (balance: %v)", swap.proto, swap.balance))
  		swap.proto.Drop()
  		return fmt.Errorf("[SWAP] <%v> remote peer cannot have debt (balance: %v)", swap.proto, swap.balance)
  	}
  	if !swap.Buys && swap.balance < 0 {
  		log.Trace(fmt.Sprintf("<%v> we cannot have debt (balance: %v)", swap.proto, swap.balance))
  		return fmt.Errorf("[SWAP] <%v> we cannot have debt (balance: %v)", swap.proto, swap.balance)
  	}
  	if swap.balance >= int(swap.local.DropAt) {
  		log.Trace(fmt.Sprintf("<%v> remote peer has too much debt (balance: %v, disconnect threshold: %v)", swap.proto, swap.balance, swap.local.DropAt))
  		swap.proto.Drop()
  		return fmt.Errorf("[SWAP] <%v> remote peer has too much debt (balance: %v, disconnect threshold: %v)", swap.proto, swap.balance, swap.local.DropAt)
  	} else if swap.balance <= -int(swap.remote.PayAt) {
  		swap.send()
  	}
  	return nil
  }
docs: // Add (n)
  // n > 0 called when promised/provided n units of service
  // n < 0 called when used/requested n units of service