AgentSecured

Git Source

Inherits: MessagingBase, IAgentSecured

Base contract for messaging contracts that are secured by the agent manager. AgentSecured relies on AgentManager to provide the following functionality:

  • Keep track of agents and their statuses.
  • Pass agent-signed statements that were verified by the agent manager.
  • These statements are considered valid indefinitely, unless the agent is disputed.
  • Disputes are opened and resolved by the agent manager.

AgentSecured implementation should never use statements signed by agents that are disputed.

State Variables

agentManager

Returns the address of the local AgentManager contract, which is treated as the "source of truth" for agent statuses.

address public immutable agentManager;

inbox

Returns the address of the local Inbox contract, which is treated as the "source of truth" for agent-signed statements.

Inbox passes verified agent statements to IAgentSecured contract.

address public immutable inbox;

_disputes

mapping(uint32 => DisputeFlag) internal _disputes;

__GAP

gap for upgrade safety

uint256[49] private __GAP;

Functions

onlyAgentManager

modifier onlyAgentManager();

onlyInbox

modifier onlyInbox();

constructor

constructor(string memory version_, uint32 synapseDomain_, address agentManager_, address inbox_)
    MessagingBase(version_, synapseDomain_);

openDispute

Local AgentManager should call this function to indicate that a dispute between a Guard and a Notary has been opened.

function openDispute(uint32 guardIndex, uint32 notaryIndex) external onlyAgentManager;

Parameters

NameTypeDescription
guardIndexuint32Index of the Guard in the Agent Merkle Tree
notaryIndexuint32Index of the Notary in the Agent Merkle Tree

resolveDispute

Local AgentManager should call this function to indicate that a dispute has been resolved due to one of the agents being slashed.

rivalIndex will be ZERO, if the slashed agent was not in the Dispute.

function resolveDispute(uint32 slashedIndex, uint32 honestIndex) external onlyAgentManager;

Parameters

NameTypeDescription
slashedIndexuint32Index of the slashed agent in the Agent Merkle Tree
honestIndexuint32

agentStatus

Returns (flag, domain, index) for a given agent. See Structures.sol for details.

Will return AgentFlag.Fraudulent for agents that have been proven to commit fraud, but their status is not updated to Slashed yet.

function agentStatus(address agent) external view returns (AgentStatus memory);

Parameters

NameTypeDescription
agentaddressAgent address

Returns

NameTypeDescription
<none>AgentStatusStatus for the given agent: (flag, domain, index).

getAgent

Returns agent address and their current status for a given agent index.

Will return empty values if agent with given index doesn't exist.

function getAgent(uint256 index) external view returns (address agent, AgentStatus memory status);

Parameters

NameTypeDescription
indexuint256Agent index in the Agent Merkle Tree

Returns

NameTypeDescription
agentaddressAgent address
statusAgentStatusStatus for the given agent: (flag, domain, index)

_agentStatus

Returns status of the given agent: (flag, domain, index).

function _agentStatus(address agent) internal view returns (AgentStatus memory);

_getAgent

Returns agent and their status for a given agent index. Returns zero values for non existing indexes.

function _getAgent(uint256 index) internal view returns (address agent, AgentStatus memory status);

_isInDispute

Checks if the agent with the given index is in a dispute.

function _isInDispute(uint32 agentIndex) internal view returns (bool);