packages/contracts-core/contracts/interfaces/IAgentSecured.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {AgentStatus, DisputeStatus} from "../libs/Structures.sol";
interface IAgentSecured {
/**
* @notice Local AgentManager should call this function to indicate that a dispute
* between a Guard and a Notary has been opened.
* @param guardIndex Index of the Guard in the Agent Merkle Tree
* @param notaryIndex Index of the Notary in the Agent Merkle Tree
*/
function openDispute(uint32 guardIndex, uint32 notaryIndex) external;
/**
* @notice 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.
* @param slashedIndex Index of the slashed agent in the Agent Merkle Tree
* @param rivalIndex Index of the their Dispute Rival in the Agent Merkle Tree
*/
function resolveDispute(uint32 slashedIndex, uint32 rivalIndex) external;
// ═══════════════════════════════════════════════════ VIEWS ═══════════════════════════════════════════════════════
/**
* @notice Returns the address of the local AgentManager contract, which is treated as
* the "source of truth" for agent statuses.
*/
function agentManager() external view returns (address);
/**
* @notice Returns the address of the local Inbox contract, which is treated as
* the "source of truth" for agent-signed statements.
* @dev Inbox passes verified agent statements to `IAgentSecured` contract.
*/
function inbox() external view returns (address);
/**
* @notice Returns (flag, domain, index) for a given agent. See Structures.sol for details.
* @dev Will return AgentFlag.Fraudulent for agents that have been proven to commit fraud,
* but their status is not updated to Slashed yet.
* @param agent Agent address
* @return Status for the given agent: (flag, domain, index).
*/
function agentStatus(address agent) external view returns (AgentStatus memory);
/**
* @notice Returns agent address and their current status for a given agent index.
* @dev Will return empty values if agent with given index doesn't exist.
* @param index Agent index in the Agent Merkle Tree
* @return agent Agent address
* @return status Status for the given agent: (flag, domain, index)
*/
function getAgent(uint256 index) external view returns (address agent, AgentStatus memory status);
/**
* @notice Returns (flag, openedAt, resolvedAt) that describes the latest status of
* the latest dispute for an agent with a given index.
* @dev Will return empty values if agent with given index doesn't exist.
* @param agentIndex Agent index in the Agent Merkle Tree
* @return Latest dispute status for the given agent: (flag, openedAt, resolvedAt)
*/
function latestDisputeStatus(uint32 agentIndex) external view returns (DisputeStatus memory);
}