multiversx / mx-sdk-py-cli

Python Command Line Tools and SDK for interacting with the MultiversX blockchain and dApps.
Other
34 stars 36 forks source link

Message signing and verifying #343

Closed popenta closed 11 months ago

popenta commented 11 months ago

In this PR I've added two new sub-commands for the wallet command group:

mxpy wallet sign-message

This command is used to sign a message. It requires the --message argument and you'll also need to pass in a wallet that will be used for signing the message.

When running mxpy wallet sign-message --message test --pem alice.pem the output will look something like this:

{
            "address": "erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th",
            "message": "test",
            "signature": "0x7aff43cd6e3d880a65033bf0a1b16274854fd7dfa9fe5faa7fa9a665ee851afd4c449310f5f1697d348e42d1819eaef69080e33e7652d7393521ed50d7427a0e"
}

mxpy wallet verify-message

This command is used for verifying a previously signed message. It requires the --address argument which is the bech32 address of the signer, the --message argument which represents the signed message(in readable format) and the --signature argument which is the message signature hex encoded.

To verify the message signed above we can run the following command:

mxpy wallet verify-message \
--address erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th \
--message test \
--signature 0x7aff43cd6e3d880a65033bf0a1b16274854fd7dfa9fe5faa7fa9a665ee851afd4c449310f5f1697d348e42d1819eaef69080e33e7652d7393521ed50d7427a0e

The output will look like this:

The message "test" was signed by erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th

In case the message was not signed by someone with that address the output will be:

The message "not signed" was NOT signed by erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th