Description
Problem
Currently proposal IDs are just auto-assigned integers. A UI could show the wrong proposal content and a user could vote on it without knowing they are voting for the wrong thing. This could be mitigated by lite client proofs in the UI, but currently these aren't well-supported. This could especially be an issue when x/group is used as a multisig.
Possible Solutions
The most obvious solution is to make the proposal ID the hash of the proposal content (msgs + metadata) plus some nonce so that the user will see the proposal hash in the UI as well as Ledger signing interface. The user would still need to very that the hash matches the content, but this is somewhat easier than making a full lite client proof.
Going one step further, it would be great if the sign mode textual could actually show the proposal content in the Ledger UI. This could work if there was some way to annotate certain Msg fields as "links" and then display the linked content.
One potential issue with hashing is that we don't yet have guaranteed canonical protobuf serialization... although this is planned for pulsar.