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 for further context.

  3. The r and s should be of type bytes32, and v should be of type uint8.