Idea for name registration using a single OP_RETURN

Step 1: Create a payload with the name you want to register plus the zone file hash you want to tag it with plus a salt.

Step 2: Create a fresh unused bitcoin address and symmetrically encrypt the payload with the public key of that address.

Step 3: Send a transaction with the payload in the OP_RETURN field and with a small amount of Bitcoin going to the fresh address.

Step 4: Spend the output of the fresh address to reveal the public key of the address AKA the symmetric decryption key of the payload.

Step 5: The Blockstack nodes will see the two transactions and will be able to decrypt the name registration and name update information.

cc @jude @aaron @muneeb


I’m assuming the goal here is to reduce data size (and transaction fees) by not using OP_RETURN for the second transaction. And step 4 (reveal key) becomes the 2-phase commit. How much is the saving?

I don’t think decryption will be a performance issue. On the first pass, this seems to work, but I’ll try to give it some more thought.