interface ICampaignV1 {
  function totalVoteCount() external view returns (uint64[] memory);

  function isVoted(address addr) external view returns (bool);

  function startDate() external view returns (uint256);

  function setStartDate(uint256 newTimestamp) external; // contract owner required

  function endDate() external view returns (uint256);

  function setEndDate(uint256 newTimestamp) external; // contract owner required

  function setUri(string memory newUri) external; // contract owner required

  function contractURI() external view returns (string memory);

  function setContractURI(string memory uri) external;

  function pVote(uint8[] memory sortedIds, address voter, bytes32 ticket) external;

  function vote(
    uint8[] memory sortedIds, // Length from 1 to 3, ascending order
    bytes memory memo, // Within 128 bytes
    bytes32 ticket,
    bytes memory signature
  ) external;
}
function contractURI() external view returns (string memory);

// contract owner required