One of IOTAs main use cases is to provide a way for M2M (machine to machine) micro payments. Therefore services can be called by sending a transaction, including payload + funds, to a specific address.

Since addresses should not be reused, they have to be changed after every withdrawal. As also discussed in A receive address is made public for donations, how do I safely withdraw funds? the consensus is to change the receive address before withdrawing.

How can this be accomplished in an automatic matter for M2M transactions? How can a machine request the current address to issue the request to? The service's address may have changed due to a withdraw.

Consider a simple SMS-service that receives a transaction, including number, message, value, and sends an SMS accordingly. How can another webservice request the current address (to which to send the transaction to) from the SMS-service?

  • How about HTTPS GET? The problem you're describing doesn't seem to be harder through address changing. Either you have a secure way to get the address in the first place or you haven't. If you have, get the new address the same way. If you don't your service won't ever work.
    – Helmar
    Commented Dec 6, 2017 at 15:37

2 Answers 2


M2M Payments

2 Machines: Alice and Bob

  • Alice wants to give 5 IOTAs to Bob
  • Alice sends an address request to Bob:
    Depending on the kind of machines this can be achieved in various ways
  • via http GET: Web APIs
  • via Tangle: for Machines that only know each other through the Tangle
    • Alice sends 0-value-transaction from a previous address of Bob with message "REQUEST9ADDRESS9999..."
    • Bob sends 0-value-transaction from the same previous address with message "NEW9ADDRESS9IS9ZIEBDEIDSK9SKE..."
    • Alice has the new address of Bob
  • via TCP: for very low level machines
  • via any other protocol used for communication (SMS, UDP, ...)
    they will use the protocol that fits their needs best (e.g. If they are web APIs and they already use https for communication, they will use https for address exchange)


Carl is some content creator.
Vincent is a viewer of Carl's content and wants to donate to him.

  • Carl creates website www.carlsnewaddress.com (of course it could as well be www.carlsblog.com/newaddress or similar) and links it below every of his videos/articles/etc. The website shows the newest address of Carl
  • Vincent clicks the link and sends money to the address
  • Carl updates the address every day.
  • 3 days after updating the address, Carl withdraws the IOTAs (= Vincent has 3 days to copy the seed, paste it into his wallet and send the IOTAs)
  • Nice idea, but the donations Problem is not solved entirely. Nothing prevents Vincent to donate to that address weeks later. Or even many other people. There is no way to block an address for receiving, is there? So Carl would need to check his addresses for a long time, just in case someone sends money there. Yes it's would be wrong to do so but it still can happen.
    – Oliver
    Commented Dec 10, 2017 at 15:48
  • Aren't the 0-valued TXs unsigned? In that case, how can Alice know that Bob himself issued the "NEW9ADDRESS9IS9ZIEBDEIDSK9SKE..." ????????
    – Makan
    Commented Aug 28, 2018 at 14:19

Client ask to the service provider for a valid address. Service provider decide according it's own internal policy the address where this particular client can send funds (it can be a new one).

The client send funds to that address.

An interesting use case is presented in this video. In few words: a car charging station where all data related to the service is stored in the tangle, including address to use, service price, service availability.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.