// SPDX-License-Identifier: LGPL-3.0-only pragma solidity >=0.8.0; library BN254 { struct G1Point { uint X; uint Y; } // Encoding of field elements is: X[1] * i + X[0] struct G2Point { uint[2] X; uint[2] Y; } } interface IDASigners { /*=== struct ===*/ struct SignerDetail { address signer; string socket; BN254.G1Point pkG1; BN254.G2Point pkG2; } struct Params { uint tokensPerVote; uint maxVotesPerSigner; uint maxQuorums; uint epochBlocks; uint encodedSlices; } /*=== event ===*/ event NewSigner( address indexed signer, BN254.G1Point pkG1, BN254.G2Point pkG2 ); event SocketUpdated(address indexed signer, string socket); /*=== function ===*/ function params() external view returns (Params memory); function epochNumber() external view returns (uint); function quorumCount(uint _epoch) external view returns (uint); function isSigner(address _account) external view returns (bool); function getSigner( address[] memory _account ) external view returns (SignerDetail[] memory); function getQuorum( uint _epoch, uint _quorumId ) external view returns (address[] memory); function getQuorumRow( uint _epoch, uint _quorumId, uint32 _rowIndex ) external view returns (address); function registerSigner( SignerDetail memory _signer, BN254.G1Point memory _signature ) external; function updateSocket(string memory _socket) external; function registeredEpoch( address _account, uint _epoch ) external view returns (bool); function registerNextEpoch(BN254.G1Point memory _signature) external; function getAggPkG1( uint _epoch, uint _quorumId, bytes memory _quorumBitmap ) external view returns (BN254.G1Point memory aggPkG1, uint total, uint hit); }