Some of the TeleportDAO contracts have owners which is crucial for the bridge design. This owner is controlled by the TeleportDAO team in the first phase, but, eventually will be handed to the TeleportDAO community who will decide about the future of the protocol by proposing changes and conducting proper voting on them.
In TeleportDAO contracts, owners have four main abilities. They can:
Change some incentive parameters such as fees, rewards, etc.
Change some parameters related to the source chain
Pause/unpause the contract
Add block headers when the contract is paused
Now, let's see why such a privilege is necessary and how often the owner uses it.
For the first one, dependent on the market conditions, some parameters might need to change. This wouldn't be something that frequently happens, but, it's necessary to allow the owner to change them when it is needed. For example, early adopters will get more rewards (as they contribute to the system) in comparison to late participants.
For the second one, because the TeleportDAO bridge is fully decentralized and trustless, the parameters in the code that are related to the source chain should get updated as they get updated in the real world. For example, let's consider the Bitcoin community decides to change the epoch size of target difficulty updates from 2016 to 4032. In such situations, the source chain usually gets forked. The TeleportDAO community can decide which fork to follow by updating that parameter accordingly in the TeleportDAO contracts. Such changes happen very rarely in blockchains.
The third and the fourth case are related to each other. In the case that any emergency happens (such as attacks on the source chain, blockchain downtime, etc.), the contracts can be paused by the owner, so that no one would be able to read from Relay data or submit new data on it. This is to protect users and other applications in case of unpredictable incidents. There is a non-pausable function in the Relay contract that is the exact same as the function that Relayers use to add block headers, but only the owner can call it. In emergency situations after Relay is paused, this specific function can be called by the owner, so Relay data will get updated, and any malicious behavior will get removed before unpausing the contracts.