synapsecns/sanguine

View on GitHub
packages/contracts-core/contracts/interfaces/ISnapshotHub.sol

Summary

Maintainability
Test Coverage
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface ISnapshotHub {
    /**
     * @notice Check that a given attestation is valid: matches the historical attestation
     * derived from an accepted Notary snapshot.
     * @dev Will revert if any of these is true:
     *  - Attestation payload is not properly formatted.
     * @param attPayload    Raw payload with attestation data
     * @return isValid      Whether the provided attestation is valid
     */
    function isValidAttestation(bytes memory attPayload) external view returns (bool isValid);

    /**
     * @notice Returns saved attestation with the given nonce.
     * @dev Reverts if attestation with given nonce hasn't been created yet.
     * @param attNonce      Nonce for the attestation
     * @return attPayload   Raw payload with formatted Attestation data
     * @return agentRoot    Agent root hash used for the attestation
     * @return snapGas      Snapshot gas data used for the attestation
     */
    function getAttestation(uint32 attNonce)
        external
        view
        returns (bytes memory attPayload, bytes32 agentRoot, uint256[] memory snapGas);

    /**
     * @notice Returns the state with the highest known nonce submitted by a given Agent.
     * @param origin        Domain of origin chain
     * @param agent         Agent address
     * @return statePayload Raw payload with agent's latest state for origin
     */
    function getLatestAgentState(uint32 origin, address agent) external view returns (bytes memory statePayload);

    /**
     * @notice Returns latest saved attestation for a Notary.
     * @param notary        Notary address
     * @return attPayload   Raw payload with formatted Attestation data
     * @return agentRoot    Agent root hash used for the attestation
     * @return snapGas      Snapshot gas data used for the attestation
     */
    function getLatestNotaryAttestation(address notary)
        external
        view
        returns (bytes memory attPayload, bytes32 agentRoot, uint256[] memory snapGas);

    /**
     * @notice Returns Guard snapshot from the list of all accepted Guard snapshots.
     * @dev Reverts if snapshot with given index hasn't been accepted yet.
     * @param index             Snapshot index in the list of all Guard snapshots
     * @return snapPayload      Raw payload with Guard snapshot
     * @return snapSignature    Raw payload with Guard signature for snapshot
     */
    function getGuardSnapshot(uint256 index)
        external
        view
        returns (bytes memory snapPayload, bytes memory snapSignature);

    /**
     * @notice Returns Notary snapshot from the list of all accepted Guard snapshots.
     * @dev Reverts if snapshot with given index hasn't been accepted yet.
     * @param index             Snapshot index in the list of all Notary snapshots
     * @return snapPayload      Raw payload with Notary snapshot
     * @return snapSignature    Raw payload with Notary signature for snapshot
     */
    function getNotarySnapshot(uint256 index)
        external
        view
        returns (bytes memory snapPayload, bytes memory snapSignature);

    /**
     * @notice Returns Notary snapshot that was used for creating a given attestation.
     * @dev Reverts if any of these is true:
     *  - Attestation payload is not properly formatted.
     *  - Attestation is invalid (doesn't have a matching Notary snapshot).
     * @param attPayload        Raw payload with attestation data
     * @return snapPayload      Raw payload with Notary snapshot
     * @return snapSignature    Raw payload with Notary signature for snapshot
     */
    function getNotarySnapshot(bytes memory attPayload)
        external
        view
        returns (bytes memory snapPayload, bytes memory snapSignature);

    /**
     * @notice Returns proof of inclusion of (root, origin) fields of a given snapshot's state
     * into the Snapshot Merkle Tree for a given attestation.
     * @dev Reverts if any of these is true:
     *  - Attestation with given nonce hasn't been created yet.
     *  - State index is out of range of snapshot list.
     * @param attNonce      Nonce for the attestation
     * @param stateIndex    Index of state in the attestation's snapshot
     * @return snapProof    The snapshot proof
     */
    function getSnapshotProof(uint32 attNonce, uint8 stateIndex) external view returns (bytes32[] memory snapProof);
}