> For the complete documentation index, see [llms.txt](https://hydro.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hydro.gitbook.io/docs/snowflake/intro/handling-user-signatures.md).

# Handling User Signatures

## Signatures

Several Snowflake function calls require a `signature` from a user-owned `address`. These function calls are designed to enable meta-transactions where a service provider can pay Ethereum network gas costs on behalf of an end-user. Meta-transactions enable a much smoother user-experience for dApps. These function calls contain `r`, `s`, and `v` as parameters, which can be derived from a signed message from the user's private key. Upon obtaining a signed message through a `web3` client, the `r`, `s`, and `v` signature can be determined from the following steps:

1. Extract the first 32 bytes to create the `r` value, the next 32 bytes to create the `s` value, and the last byte to create the `v` value.
2. If you are using `ecrecover`, v will be either a 00 or a 01. As a result, you will have to parse it to an integer and add 27. This will result in either a 27 or a 28. See [this issue](https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethsign) for further context.
3. The `r` and `s` should be of type `bytes32`, and `v` should be of type `uint8`.
