# Fraxtal Snapshot Voting

After a proposal is discussed in the [Governance Forum](https://gov.frax.finance/c/governance-proposals/5), it can be voted on using [Snapshot](https://snapshot.org/#/frax.eth). Voting power is the sum of held FXS as well as veFXS from miscellaneous sources. Historically, voting was done on Ethereum, but it since moved to Fraxtal (see [vote](https://snapshot.org/#/frax.eth/proposal/0x60ce169bce5174b399fa09ccc35c14e692a6bb19229d5957e44940f58e89efbc)). Snapshot should pick up all of your voting power sources (Mainnet veFXS, Fraxtal FXS, Fraxtal veFXS, and Fraxtal FPISLocker) **EXCEPT** Mainnet FXS. You would need to bridge your FXS over to Fraxtal to receive the 1:1 votes for it, or lock it in Mainnet veFXS (which has an existing balance proof system on Fraxtal).

## Delegation

Due to Snapshot limitations for the Fraxtal chain, many-to-one delegations will no longer be possible. If you are either 1) Delegating or 2) Unable to access your Mainnet (*delegator*) address on Fraxtal, we deployed a simple 1:1 delegation contract to help.&#x20;

First obtain an address on Fraxtal that you can make arbitrary calls from. It can be a new or existing address. This will be known as the *delegatee* address. You will need to send a cross-chain message to Fraxtal via the L1CrossDomainMessenger (on Ethereum), with the destination contract as DoubleOptInVeFXSDelegation (on Fraxtal). Below are useful addresses and function signatures:

```
// Ethereum
L1CrossDomainMessenger: 0x126bcc31Bc076B3d515f60FBC81FddE0B0d542Ed

// Fraxtal
DoubleOptInVeFXSDelegation: 0x9D269188b741277fF316862B537bd4fce14637b3
    - 0x6417e439: nominateDelegateeCrossChain
    - 0x617075fe: rescindDelegationAsDelegatorCrossChain
```

### Nominate a delegatee

***

Your *delegatee* address on Fraxtal will be able to vote with its own combined voting power as well as the combined voting power of the *delegator*.

#### ***If delegator is on Ethereum only***

1\) Prepare a hex message

{% code overflow="wrap" %}

```
cast calldata "nominateDelegateeCrossChain(address)" "<delegatee address on Fraxtal>"
```

{% endcode %}

2\) Call the following on Ethereum with your *delegator* address:

{% code overflow="wrap" %}

```
L1CrossDomainMessenger.sendMessage(0x9D269188b741277fF316862B537bd4fce14637b3, <hex message>, 500000)
```

{% endcode %}

This calls `DoubleOptInVeFXSDelegation.nominateDelegateeCrossChain` on Fraxtal

3\) Wait a few minutes

4\) With your *delegatee* address on Fraxtal, call:

```
DoubleOptInVeFXSDelegation.acceptDelegation(<delegator address>)
```

#### ***If delegator is on Fraxtal***

1\) With the delegator, call:

```
DoubleOptInVeFXSDelegation.nominateDelegatee(<delegatee address>)
```

2\) With the delegatee, call:

```
DoubleOptInVeFXSDelegation.acceptDelegation(<delegator address>)
```

***

### Rescind a delegatee

Either the delegator or delegatee can unilaterally revoke a delegation at any time.

#### ***If delegator is on Ethereum only***

1\) Call the following on Ethereum with your *delegator* address:

{% code overflow="wrap" %}

```
L1CrossDomainMessenger.sendMessage(0x9D269188b741277fF316862B537bd4fce14637b3, 0x617075fe, 500000)
```

{% endcode %}

This calls `DoubleOptInVeFXSDelegation.rescindDelegationAsDelegatorCrossChain` on Fraxtal

2\) Wait a few minutes, then your delegation on Fraxtal should be rescinded

#### ***As the delegator on Fraxtal***

1\) With the delegator, call:

```
DoubleOptInVeFXSDelegation.rescindDelegationAsDelegator()
```

#### ***As the delegatee on Fraxtal***

1\) With the delegatee, call:

```
DoubleOptInVeFXSDelegation.rescindDelegationAsDelegatee()
```
