I've run into a situation where Mycelium was monitoring two public keys - one the compressed version of the other. It showed a positive balance for the the compressed public key and a zero balance for the normal public key.
Compressed and uncompressed form of the same public key correspond to different Bitcoin addresses. They have individual balances and behave like independent addresses. They just happen to have the same private key which can be used to spend coins from each of them.
I loaded the private key to see if it was required for Mycelium to recognize that the two public keys are for the same private key, but it simply attached it to the compressed public key. The uncompressed one remained observer only (no private key associated) and still with a zero balance.
Private key representations usually include a flag to indicate whether the key is meant to be used with a compressed public key or uncompressed one. I believe if you set that flag to 'uncompressed', Mycelium will attach it to the other address.
Questions:
- Is it mathematically possible to calculate the compressed public key from the uncompressed one (and visa-versa) in the absence of the private key? (I assume if you have the private key they can theoretically be associated since you can calculate each from the private key.)
Yes.
- Is it possible to make one of the two forms the canonical form internally so that loading either into Mycelium causes the correct private key's balance to be tracked?
I don't think there is such a thing as a "private key's balance".
If you want to use both compressed and uncompressed public keys, I think you can load your private key twice with different flags and Mycelium should do the right thing then. Mathematically these private keys are identical, but logically they are different.
Background: I ended up with a compressed version of the public key when I loaded a BIP38 protected key into the app on a dedicated device separate from my phone. I then transferred some coin to it.
I had been monitoring the full public key on my regular phone and it failed to show the new balance. I then loaded the compressed key to my phone and ended up with the situation described.
I don't know BIP38, unfortunately. The SIPA format for private keys includes the compression flag. It was either the loss of information (flag) during private key transfer to the dedicated device, or a failure of the app on that device to interpret that flag correctly, that created such situation.