// SPDX-License-Identifier: MIT pragma solidity >=0.7.6 <0.9; /** * EntityManager interface. */ interface IEntityManager { /// Voter addresses. struct VoterAddresses { address submitAddress; address submitSignaturesAddress; address signingPolicyAddress; } /// Event emitted when a node id is registered. event NodeIdRegistered(address indexed voter, bytes20 indexed nodeId); /// Event emitted when a node id is unregistered. event NodeIdUnregistered(address indexed voter, bytes20 indexed nodeId); /// Event emitted when a public key is registered. event PublicKeyRegistered( address indexed voter, bytes32 indexed part1, bytes32 indexed part2 ); /// Event emitted when a public key is unregistered. event PublicKeyUnregistered( address indexed voter, bytes32 indexed part1, bytes32 indexed part2 ); /// Event emitted when a delegation address is proposed. event DelegationAddressProposed( address indexed voter, address indexed delegationAddress ); /// Event emitted when a delegation address registration is confirmed. event DelegationAddressRegistrationConfirmed( address indexed voter, address indexed delegationAddress ); /// Event emitted when a submit address is proposed. event SubmitAddressProposed( address indexed voter, address indexed submitAddress ); /// Event emitted when a submit address registration is confirmed. event SubmitAddressRegistrationConfirmed( address indexed voter, address indexed submitAddress ); /// Event emitted when a submit signatures address is proposed. event SubmitSignaturesAddressProposed( address indexed voter, address indexed submitSignaturesAddress ); /// Event emitted when a submit signatures address registration is confirmed. event SubmitSignaturesAddressRegistrationConfirmed( address indexed voter, address indexed submitSignaturesAddress ); /// Event emitted when a signing policy address is proposed. event SigningPolicyAddressProposed( address indexed voter, address indexed signingPolicyAddress ); /// Event emitted when a signing policy address registration is confirmed. event SigningPolicyAddressRegistrationConfirmed( address indexed voter, address indexed signingPolicyAddress ); /// Event emitted when the maximum number of node ids per entity is set. event MaxNodeIdsPerEntitySet(uint256 maxNodeIdsPerEntity); /** * Registers a node id. * @param _nodeId Node id. * @param _certificateRaw Certificate in raw format. * @param _signature Signature. */ function registerNodeId( bytes20 _nodeId, bytes calldata _certificateRaw, bytes calldata _signature ) external; /** * Unregisters a node id. * @param _nodeId Node id. */ function unregisterNodeId(bytes20 _nodeId) external; /** * Registers a public key. * @param _part1 First part of the public key. * @param _part2 Second part of the public key. * @param _verificationData Additional data used to verify the public key. */ function registerPublicKey( bytes32 _part1, bytes32 _part2, bytes calldata _verificationData ) external; /** * Unregisters a public key. */ function unregisterPublicKey() external; /** * Proposes a delegation address (called by the voter). * @param _delegationAddress Delegation address. */ function proposeDelegationAddress(address _delegationAddress) external; /** * Confirms a delegation address registration (called by the delegation address). * @param _voter Voter address. */ function confirmDelegationAddressRegistration(address _voter) external; /** * Proposes a submit address (called by the voter). * @param _submitAddress Submit address. */ function proposeSubmitAddress(address _submitAddress) external; /** * Confirms a submit address registration (called by the submit address). * @param _voter Voter address. */ function confirmSubmitAddressRegistration(address _voter) external; /** * Proposes a submit signatures address (called by the voter). * @param _submitSignaturesAddress Submit signatures address. */ function proposeSubmitSignaturesAddress( address _submitSignaturesAddress ) external; /** * Confirms a submit signatures address registration (called by the submit signatures address). * @param _voter Voter address. */ function confirmSubmitSignaturesAddressRegistration( address _voter ) external; /** * Proposes a signing policy address (called by the voter). * @param _signingPolicyAddress Signing policy address. */ function proposeSigningPolicyAddress( address _signingPolicyAddress ) external; /** * Confirms a signing policy address registration (called by the signing policy address). * @param _voter Voter address. */ function confirmSigningPolicyAddressRegistration(address _voter) external; /** * Gets the delegation address of a voter at a specific block number. * @param _voter Voter address. * @param _blockNumber Block number. * @return Public key. */ function getDelegationAddressOfAt( address _voter, uint256 _blockNumber ) external view returns (address); /** * Gets the delegation address of a voter at the current block number. * @param _voter Voter address. * @return Public key. */ function getDelegationAddressOf( address _voter ) external view returns (address); /** * Gets the node ids of a voter at a specific block number. * @param _voter Voter address. * @param _blockNumber Block number. * @return Node ids. */ function getNodeIdsOfAt( address _voter, uint256 _blockNumber ) external view returns (bytes20[] memory); /** * Gets the node ids of a voter at the current block number. * @param _voter Voter address. * @return Node ids. */ function getNodeIdsOf( address _voter ) external view returns (bytes20[] memory); /** * Gets the public key of a voter at a specific block number. * @param _voter Voter address. * @param _blockNumber Block number. * @return Public key. */ function getPublicKeyOfAt( address _voter, uint256 _blockNumber ) external view returns (bytes32, bytes32); /** * Gets the public key of a voter at the current block number. * @param _voter Voter address. * @return Public key. */ function getPublicKeyOf( address _voter ) external view returns (bytes32, bytes32); /** * Gets voter's addresses at a specific block number. * @param _voter Voter address. * @param _blockNumber Block number. * @return _addresses Voter addresses. */ function getVoterAddressesAt( address _voter, uint256 _blockNumber ) external view returns (VoterAddresses memory _addresses); /** * Gets voter's addresses at the current block number. * @param _voter Voter address. * @return _addresses Voter addresses. */ function getVoterAddresses( address _voter ) external view returns (VoterAddresses memory _addresses); /** * Gets voter's address for a node id at a specific block number. * @param _nodeId Node id. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForNodeId( bytes20 _nodeId, uint256 _blockNumber ) external view returns (address _voter); /** * Gets voter's address for a public key at a specific block number. * @param _part1 First part of the public key. * @param _part2 Second part of the public key. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForPublicKey( bytes32 _part1, bytes32 _part2, uint256 _blockNumber ) external view returns (address _voter); /** * Gets voter's address for a delegation address at a specific block number. * @param _delegationAddress Delegation address. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForDelegationAddress( address _delegationAddress, uint256 _blockNumber ) external view returns (address _voter); /** * Gets voter's address for a submit address at a specific block number. * @param _submitAddress Submit address. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForSubmitAddress( address _submitAddress, uint256 _blockNumber ) external view returns (address _voter); /** * Gets voter's address for a submit signatures address at a specific block number. * @param _submitSignaturesAddress Submit signatures address. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForSubmitSignaturesAddress( address _submitSignaturesAddress, uint256 _blockNumber ) external view returns (address _voter); /** * Gets voter's address for a signing policy address at a specific block number. * @param _signingPolicyAddress Signing policy address. * @param _blockNumber Block number. * @return _voter Voter address. */ function getVoterForSigningPolicyAddress( address _signingPolicyAddress, uint256 _blockNumber ) external view returns (address _voter); }