According to the Libra blockchain technical paper: Libra blockchain technical paper, Page 4, Section 2.1 LedgerState–
Account addresses. An account address is a 256-bit value. To create a new account, a user first generates a fresh verification/signature key-pair (vk,sk) for a signature scheme and uses the cryptographic hash of the public verification key vk as an account address a = H(vk).1 The new account is created in the ledger state when a transaction sent from an existing account invokes the create_account(a) Move instruction. This typically happens when a transaction attempts to send Libra to an account at address a that has not yet been created.
Once the new account is created at a, the user can sign transactions to be sent from that account using the private signing key sk. The user can also rotate the key used to sign transactions from the account without changing its address, e.g., to proactively change the key or to respond to a possible compromise of the key.
From my experience in Ethereum, Bitcoin or some other public chain, the account address is derived from the public key under some standard crypto scheme, e.g. secp256k1, ed25519, .etc
However, it seems that in Libra the transaction sent to one address
a could be processed even
a was not created! If so, how to make the account
a unique in the chain?
The account address is the key for the ledger state structured by the key-value store, which makes it very important. There should be no duplicated keys!
I have not yet read the Move on this part, and I just doubt the mechanism on it as the quoted part in blockchain technical paper.
So could anyone explain it detailed on the account creation as well as recovery? Thanks in advance~