code: def federation_payment(self,
                             fed_address,
                             amount,
                             asset_code='XLM',
                             asset_issuer=None,
                             source=None,
                             allow_http=False):
          
          fed_info = federation(
              address_or_id=fed_address, fed_type='name', allow_http=allow_http)
          if not fed_info or not fed_info.get('account_id'):
              raise FederationError(
                  'Cannot determine Stellar Address to Account ID translation '
                  'via Federation server.')
          self.append_payment_op(fed_info['account_id'], amount, asset_code,
                                 asset_issuer, source)
          memo_type = fed_info.get('memo_type')
          if memo_type is not None and memo_type in ('text', 'id', 'hash'):
              getattr(self, 'add_' + memo_type.lower() + '_memo')(fed_info['memo'])
docs: Append a :class:`Payment <stellar_base.operation.Payment>` operation
          to the list of operations using federation on the destination address.
  
          Translates the destination stellar address to an account ID via
          :func:`federation <stellar_base.federation.federation>`, before
          creating a new payment operation via :meth:`append_payment_op`.
  
          :param str fed_address: A Stellar Address that needs to be translated
              into a valid account ID via federation.
          :param str amount: The amount of the currency to send in the payment.
          :param str asset_code: The asset code for the asset to send.
          :param str asset_issuer: The address of the issuer of the asset.
          :param str source: The source address of the payment.
          :param bool allow_http: When set to `True`, connections to insecure http protocol federation servers
              will be allowed. Must be set to `False` in production. Default: `False`.
          :return: This builder instance.