On the Stellar Network, why must one activate an account before receiving to it?

640 views Asked by At

Documentation for the Stellar payment network indicates that an address is not valid until it is activated, and that activating requires a special operation and 1 XLM.

The Stellar Docs say this:

in order to prevent unused accounts from bloating the ledger, Stellar requires accounts to hold a minumum balance of 1 XLM before they actually exist. Until it gets a bit of funding, your keypair doesn’t warrant space on the ledger.

Why is it not adequate to simply send XLM from an active account to the new address, thereby funding it? Practically speaking, sending funds from one address to another which has a new/zero balance is funding it. And related, why would the address take any space in the ledger before it received its first transaction?

In the Bitcoin world, if you want to sell a thing and receive bitcoin, you typically will generate a new address and tell the customer to pay to that new address. As long as you save the new address with the customer order, you always know if/when your customer sent payment.

But with Stellar, if you have to "activate" an address just to receive to it, that requires extra effort and additional funds kept just for the purpose of making a new address actually usable. And if you have a lot of orders in a very short period of time, you would have to have quite a lot of XLM on hand to activate all the order payment addresses. If the orders are small, that's a considerable temporary up-front expense. Then you have to decide how long to let the order remain open before canceling it and merging the account to reclaim your activation fund if the customer never got around to paying it.

Stellar does have the memo field which can be used to essentially associate a particular sale/customer with a transaction, but people often forget or otherwise fail to provide the memo. Then their payment is not associated with their order. That approach also leaks information about how much business you have done since all customers pay to the same address.

2

There are 2 answers

0
michael_teter On

When in doubt, test and experiment.

Sending 1+ XLM to a newly created address (sending to the public address of a new public/secret pair) works, and the transaction appears in the public ledger.

No "activation" step was required.

It appears that the Stellar documentation is incorrect, outdated, or misleading.

0
sketchyTech On

The payment is the activation as you write above and as explained in the docs. This is true whoever the payment comes from, whether that is the customer or creator. They are not distinguished between. But you don't need to create new accounts for each payment, there is a URI Scheme with callback and the API enables you to see how much was sent and who it was from. The combination of these two should enable you to work out who sent a payment.