> For the complete documentation index, see [llms.txt](https://docs.coherence.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coherence.io/0.7.4/authority/authority-transfer.md).

# Authority transfer

### Overview

The state of network entities that are currently not simulated locally (either because they are being simulated on another game client or on a simulator) cannot be affected directly.

Network [commands ](/0.7.4/authority/commands.md)can help us affect state indirectly, but for anything more involved, an authority transfer might be necessary.

### Types of Authority Transfer

In the design phase, **CoherenceSync** objects can be configured to handle authority transfer in different ways:

* **Request**. Authority transfer may be requested, but it may be rejected by the receiving party (i.e. when *Approve requests* is false).
* **Steal.** Authority will always be given to the requesting party on a FCFS ("first come first serve") basis.
* **Not transferable**. Authority cannot be transferred.

Note also that you need to set up Auto-adopt Orphan if you wan't orphans to be adopted  automatically by nearest player.&#x20;

<div align="left"><img src="/files/RtseqDyjEg5e98WqyOfK" alt=""></div>

If you uncheck the Approve Requests, you can use the unity event `OnAuthorityRequest` to respond to the request.

![](/files/-MexxwMZMnMTQN5KJEmt)

The request can be approved or rejected in the callback.&#x20;

```
public void OnRequest(ushort client)
{
    var coherenceSync = target.GetComponent<CoherenceSync>();
    // do some extra checks
    // transfer authority
    coherenceSync.TransferAuthority(client);
    
    // or reject authority request
    // coherenceSync.RejectAuthorityRequest(client);
}
```

### Requesting Authority in Code

Requesting authority is very straight-forward.

```csharp
var coherenceSync = target.GetComponent<CoherenceSync>();
coherenceSync.RequestAuthority();
```

As the transfer is asynchronous, we have to subscribe to one or more **Unity Events** in **CoherenceSync** to learn the result.

The request will first go to the replication server and be passed onto the receiving simulator or game client, so it may take a few frames to get a response.

```csharp
// There Unity Events in CoherenceSync help us understand 
// what happened with authority requests and act accordingly.

// called when the CoherenceSync entity becomes the simulation authority
public UnityEvent OnAuthorityGained;

// called when the CoherenceSync entity loses simulatino authority
public UnityEvent OnAuthorityLost;

// called when a request to assume authority over the CoherenceSync entity
// is rejected
public UnityEvent OnAuthorityTransferRejected;
```

These events are also exposed to the Unity inspector in the *Events on authority transfer* section of the CoherenceSync behaviour.

![Authority events in the CoherenceSync inspector](/files/-Me1I-ooYkkX8Tj9brQn)
