splitkey

Stellar: delivery by rotation

On Stellar, an account is not the same thing as a key. An account has a list of signers with weights, and thresholds that say how much weight an operation needs. That makes it possible to hand over a vanity account without handing over the key that found it.

The delivery transaction

The seller found the vanity key V; you pay from your wallet, whose key is K. Delivery is one transaction with two operations:

op 1  CreateAccount   destination: V   starting balance: 2 XLM
op 2  SetOptions      source account: V
                      add signer K, weight 1
                      master (V) weight: 0
                      thresholds low / medium / high: 1 / 1 / 1
signed by: the seller's funding account and V

After it is applied:

KeyPlates checks one more thing before signing, the lock-out guard: the remaining signers must reach the highest threshold, so a delivery can never produce an account that nobody can operate.

Check it yourself

  1. Open the account on the verify page, or on an explorer such as StellarExpert, and look at Signers.
  2. The address's own key must show weight 0 (Horizon sometimes omits it altogether).
  3. Your key must be listed, with a weight at least as high as the high threshold.
  4. Optionally, open the creating transaction: you will see the two operations above.

Using the account

Your wallet key K signs for the vanity account V. Most wallets show only the account whose master key they hold, so add V as an account that K signs for. In Lobstr, for example, you add the account's public address and your signer secret. The KeyPlates FAQ has the steps.

What rotation does not protect against