# Secondary Key-Pair Statement

## Generation Process

We use **ed25519** to generate the secondary key-pair (for more information on ed25519, please refer to <https://ed25519.cr.yp.to/>) on user's client device and the secret key will be only stored on user's device. Then we will prompt the user to sign the following message with their EVM address.

{% code overflow="wrap" %}

```
I am declaring to use the key "0x1867998e827d10d4482e3f49d8ac68c17f29f9588c9b04e84ea2e3059e1f9958" as my signing key of engagement data for "0x7e031555600E59f37dDE3Bb9C5D8205c61796a0D".
```

{% endcode %}

Then we will upload the original message and signature on Arweave. After that, the client will use the secondary key-pair to sign the engagement data without prompting the user every time.

## Key Retention

As this key-pair will not be used to do any on-chain transaction. It is safe to discard the key-pair any time. Users may choose to declare new key-pair while still be able to verify the existing data.

## Data Schema

### Parameter Definition

<table><thead><tr><th width="233">Parameter</th><th>Definition</th></tr></thead><tbody><tr><td>message</td><td>The statement message which the user is signing. It is in free-text format and should contain the public key and connected address.</td></tr><tr><td>address</td><td>The address of the user</td></tr><tr><td>address_type</td><td>The type of the above address, right now, "evm" is supported.</td></tr><tr><td>secondary_key</td><td>The proxy key used in the statement</td></tr><tr><td>signature</td><td>The personal sign of the message using the address</td></tr><tr><td>secondary_signature</td><td>The signature using secondary_key for the entire message, more details in the <strong>Signature Generation Process</strong> below</td></tr><tr><td>provider</td><td>The name of SDK or software for making this statement</td></tr><tr><td>version</td><td>The version of SDK or software for making this statement</td></tr></tbody></table>

### Example

```json
{
  "message": "I am declaring to use the key \"0x89a04eb167a482659f1b8e0e8c597f69f5b1d4e96652feccf4b01710a45ac6c8\" as my signing key of engagement data for \"0xF2FCeCEacA2bDC9781fe920Af9Cdc20dB2cea00D\".",
  "address": "0xF2FCeCEacA2bDC9781fe920Af9Cdc20dB2cea00D",
  "address_type": "evm",
  "secondary_key": "0x89a04eb167a482659f1b8e0e8c597f69f5b1d4e96652feccf4b01710a45ac6c8",
  "signature": "0x39a95d8debdc1540b5329ca6ffca420a0e2a7e7a017ebe1b192441dfa80ee4a571eb3bb0b3ca0abab4eccf473d52c734af390e8e6247186b86c97cd97a86f4c81b",
  "secondary_signature": "0xd8b7dad42578ce3800340c635c4286134f13727f0250aea8e3450b68abb05a68ffff397444e01ea085d02937b3534afd8b9a05c18bd8c83bdc412523312f040e",
  "provider": "readon.me",
  "version": "1.0.01.beta"
}
```

## Signature Generation Process

We need to generate two signatures in this statement

1. **personal\_sign (**[**EIP-191**](https://eips.ethereum.org/EIPS/eip-191)**)** on the "message", the result will be stored in the signature field.
2. **ed25519** signature on the "message" using secondary\_key, the result will be stored in the secondary\_signature field.

## Statement API

Please refer to the API section for statement related API.
