75 lines
2.1 KiB
Solidity
Raw Normal View History

2023-07-31 10:51:15 +05:30
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import {IPoseidonHasher} from "rln-contract/PoseidonHasher.sol";
2023-08-22 10:44:43 +05:30
import {RlnBase, DuplicateIdCommitment, FullTree, InvalidIdCommitment} from "rln-contract/RlnBase.sol";
2023-07-31 10:51:15 +05:30
import {Ownable} from "openzeppelin-contracts/contracts/access/Ownable.sol";
error NotImplemented();
contract WakuRln is Ownable, RlnBase {
uint16 public immutable contractIndex;
constructor(
address _poseidonHasher,
uint16 _contractIndex
) Ownable() RlnBase(0, 20, _poseidonHasher, address(0)) {
contractIndex = _contractIndex;
}
2023-07-31 10:51:15 +05:30
/// Registers a member
/// @param idCommitment The idCommitment of the member
function _register(uint256 idCommitment) internal {
_validateRegistration(idCommitment);
members[idCommitment] = idCommitmentIndex;
memberExists[idCommitment] = true;
2023-07-31 10:51:15 +05:30
emit MemberRegistered(idCommitment, idCommitmentIndex);
idCommitmentIndex += 1;
}
2023-08-08 13:32:07 +05:30
function register(uint256[] calldata idCommitments) external onlyOwner {
2023-07-31 10:51:15 +05:30
uint256 len = idCommitments.length;
for (uint256 i = 0; i < len; ) {
2023-07-31 10:51:15 +05:30
_register(idCommitments[i]);
unchecked {
++i;
}
}
}
function register(uint256 idCommitment) external payable override {
revert NotImplemented();
}
function slash(
uint256 idCommitment,
address payable receiver,
uint256[8] calldata proof
) external pure override {
2023-07-31 10:51:15 +05:30
revert NotImplemented();
}
function _validateRegistration(
uint256 idCommitment
) internal view override {
if (!isValidCommitment(idCommitment))
revert InvalidIdCommitment(idCommitment);
if (memberExists[idCommitment] == true) revert DuplicateIdCommitment();
2023-08-08 13:32:07 +05:30
if (idCommitmentIndex >= SET_SIZE) revert FullTree();
2023-07-31 10:51:15 +05:30
}
function _validateSlash(
uint256 idCommitment,
address payable receiver,
uint256[8] calldata proof
) internal pure override {
2023-07-31 10:51:15 +05:30
revert NotImplemented();
}
2023-08-02 10:54:59 +05:30
function withdraw() external pure override {
revert NotImplemented();
}
2023-07-31 10:51:15 +05:30
}