Signing Bytes
Wallet-Provider is deprecated. Use Wallet Kit instead.
You can sign arbitrary bytes with Wallet Provider in a React-based web application. This action is useful for verifying account ownership without having to post a transaction to the chain and is commonly used as a form of simple user authentication.
Not using React? Use the wallet-controller instead.
The Wallet Provider comes with a useConnectedWallet
hook, which lets you trigger actions from a Terra wallet that's connected to the web page. The connectedWallet
object includes a .signBytes()
method, which prompts the user to sign the data and then returns an object of type SignBytesResult
. The returned SignBytesResult
object contains the address of the signer and the signed data.
The verifyBytes
function then compares the original TEST_BYTES
against the signature and public key pairing returned by the SignBytesResult
. If verifyBytes
returns true
, then the account is owned by the connected wallet. Likewise, if verifyBytes
returns false
, then the account is not owned by the connected wallet. In this way, the owner of the associated wallet is verified without having to produce an on-chain action or pay gas fees.
You can see how the verifyBytes
function works
here.
Wallet Provider also supplies useful error types that can be used with a catch
statement to notify the user whether or not the signing was successful:
You can find this code being used in context on GitHub.
You can view a working sandbox example of bytes signing with Station on codesandbox.io.