LightManager
Inherits: AgentManager, InterfaceLightManager
LightManager keeps track of all agents on chains other than Synapse Chain.
Is uses the Agent Merkle Roots from the Notary-signed attestations to stay in sync with the BondingManager
.
LightManager
is responsible for the following:
- Accepting the Agent Merkle Roots (passing the optimistic period check) from the
Destination
contract. - Using these roots to enable agents to register themselves by proving their status.
- Accepting Manager Message from
BondingManager
on Synapse Chain to withdraw tips. - Sending Manager Messages to
BondingManager
on Synapse Chain to slash agents, when their fraud is proven.
State Variables
agentRoot
Returns the latest known root of the Agent Merkle Tree.
bytes32 public agentRoot;
_agentMap
mapping(bytes32 => mapping(address => AgentStatus)) private _agentMap;
_agents
mapping(uint256 => address) private _agents;
_agentIndexes
mapping(address => uint256) private _agentIndexes;
Functions
constructor
constructor(uint32 synapseDomain_) MessagingBase("0.0.3", synapseDomain_);
initialize
function initialize(address origin_, address destination_, address inbox_) external initializer;
updateAgentStatus
Updates agent status, using a proof against the latest known Agent Merkle Root.
Will revert if the provided proof doesn't match the latest merkle root.
function updateAgentStatus(address agent, AgentStatus memory status, bytes32[] memory proof) external;
Parameters
Name | Type | Description |
---|---|---|
agent | address | Agent address |
status | AgentStatus | Structure specifying agent status: (flag, domain, index) |
proof | bytes32[] | Merkle proof of Active status for the agent |
setAgentRoot
Updates the root of Agent Merkle Tree that the Light Manager is tracking. Could be only called by a local Destination contract, which is supposed to verify the attested Agent Merkle Roots.
function setAgentRoot(bytes32 agentRoot_) external;
Parameters
Name | Type | Description |
---|---|---|
agentRoot_ | bytes32 |
remoteWithdrawTips
Withdraws locked base message tips from local Origin to the recipient.
Could only be remote-called by BondingManager contract on Synapse Chain. Note: as an extra security check this function returns its own selector, so that Destination could verify that a "remote" function was called when executing a manager message.
function remoteWithdrawTips(uint32 msgOrigin, uint256 proofMaturity, address recipient, uint256 amount)
external
returns (bytes4 magicValue);
Parameters
Name | Type | Description |
---|---|---|
msgOrigin | uint32 | |
proofMaturity | uint256 | |
recipient | address | Address to withdraw tips to |
amount | uint256 | Tips value to withdraw |
_afterAgentSlashed
function _afterAgentSlashed(uint32 domain, address agent, address prover) internal virtual override;
_notifyDisputeOpened
Notify local AgentSecured contracts about the opened dispute.
function _notifyDisputeOpened(uint32 guardIndex, uint32 notaryIndex) internal override;
_notifyDisputeResolved
Notify local AgentSecured contracts about the resolved dispute.
function _notifyDisputeResolved(uint32 slashedIndex, uint32 rivalIndex) internal override;
_setAgentRoot
Updates the Agent Merkle Root that Light Manager is tracking.
function _setAgentRoot(bytes32 _agentRoot) internal;
_storedAgentStatus
Returns the stored status for the agent: whether or not they have been added using latest Agent merkle Root.
function _storedAgentStatus(address agent) internal view override returns (AgentStatus memory);
_getAgent
Returns agent address for the given index. Returns zero for non existing indexes, or for indexes of the agents that have not been added to Light Manager yet.
function _getAgent(uint256 index) internal view override returns (address agent);
_getIndex
Returns the index of the agent in the Agent Merkle Tree. Returns zero for non existing agents, or for agents that have not been added to Light Manager yet.
function _getIndex(address agent) internal view override returns (uint256 index);