chore: use deployed block number (#27)

* chore: add deployedBlockNumber to the constructor

* fix: use uint32 instead of uint256 for deployedBlockNumber
This commit is contained in:
Aaryamann Challani 2023-08-21 12:37:15 +05:30 committed by GitHub
parent d899a0ca85
commit bd8403a74e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 62 deletions

View File

@ -70,6 +70,9 @@ abstract contract RlnBase {
/// @notice The groth16 verifier contract /// @notice The groth16 verifier contract
IVerifier public immutable verifier; IVerifier public immutable verifier;
/// @notice the deployed block number
uint32 public immutable deployedBlockNumber;
/// Emitted when a new member is added to the set /// Emitted when a new member is added to the set
/// @param idCommitment The idCommitment of the member /// @param idCommitment The idCommitment of the member
/// @param index The index of the member in the set /// @param index The index of the member in the set
@ -91,6 +94,7 @@ abstract contract RlnBase {
SET_SIZE = 1 << depth; SET_SIZE = 1 << depth;
poseidonHasher = PoseidonHasher(_poseidonHasher); poseidonHasher = PoseidonHasher(_poseidonHasher);
verifier = IVerifier(_verifier); verifier = IVerifier(_verifier);
deployedBlockNumber = uint32(block.number);
} }
/// Allows a user to register as a member /// Allows a user to register as a member

View File

@ -20,8 +20,8 @@ Hashes the input using the Poseidon hash function, n = 2, second input is the co
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ----- | ------- | ----------------- |
| input | uint256 | The input to hash | | input | uint256 | The input to hash |
## PoseidonHasher ## PoseidonHasher
@ -834,11 +834,11 @@ Hashes the input using the Poseidon hash function, n = 2, second input is the co
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ----- | ------- | ----------------- |
| input | uint256 | The input to hash | | input | uint256 | The input to hash |
### _hash ### \_hash
```solidity ```solidity
function _hash(uint256 input) internal pure returns (uint256 result) function _hash(uint256 input) internal pure returns (uint256 result)
@ -852,7 +852,7 @@ function _hash(uint256 input) internal pure returns (uint256 result)
constructor(uint256 membershipDeposit, uint256 depth, address _poseidonHasher, address _verifier) public constructor(uint256 membershipDeposit, uint256 depth, address _poseidonHasher, address _verifier) public
``` ```
### _validateRegistration ### \_validateRegistration
```solidity ```solidity
function _validateRegistration(uint256 idCommitment) internal pure function _validateRegistration(uint256 idCommitment) internal pure
@ -860,7 +860,7 @@ function _validateRegistration(uint256 idCommitment) internal pure
_Inheriting contracts MUST override this function_ _Inheriting contracts MUST override this function_
### _validateSlash ### \_validateSlash
```solidity ```solidity
function _validateSlash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal pure function _validateSlash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal pure
@ -884,8 +884,8 @@ Invalid deposit amount
### Parameters ### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | -------- | ------- | --------------------------- |
| required | uint256 | The required deposit amount | | required | uint256 | The required deposit amount |
| provided | uint256 | The provided deposit amount | | provided | uint256 | The provided deposit amount |
@ -1037,6 +1037,14 @@ contract IVerifier verifier
The groth16 verifier contract The groth16 verifier contract
### deployedBlockNumber
```solidity
uint32 deployedBlockNumber
```
the deployed block number
### MemberRegistered ### MemberRegistered
```solidity ```solidity
@ -1047,10 +1055,10 @@ Emitted when a new member is added to the set
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | ------- | ---------------------------------- |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
| index | uint256 | The index of the member in the set | | index | uint256 | The index of the member in the set |
### MemberWithdrawn ### MemberWithdrawn
@ -1062,10 +1070,10 @@ Emitted when a member is removed from the set
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | ------- | ---------------------------------- |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
| index | uint256 | The index of the member in the set | | index | uint256 | The index of the member in the set |
### onlyValidIdCommitment ### onlyValidIdCommitment
@ -1089,11 +1097,11 @@ Allows a user to register as a member
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | ------- | ------------------------------ |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
### _register ### \_register
```solidity ```solidity
function _register(uint256 idCommitment, uint256 stake) internal virtual function _register(uint256 idCommitment, uint256 stake) internal virtual
@ -1103,12 +1111,12 @@ Registers a member
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | ------- | -------------------------------------- |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
| stake | uint256 | The amount of eth staked by the member | | stake | uint256 | The amount of eth staked by the member |
### _validateRegistration ### \_validateRegistration
```solidity ```solidity
function _validateRegistration(uint256 idCommitment) internal view virtual function _validateRegistration(uint256 idCommitment) internal view virtual
@ -1126,13 +1134,13 @@ _Allows a user to slash a member_
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | --------------- | ------------------------------ |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
| receiver | address payable | | | receiver | address payable | |
| proof | uint256[8] | | | proof | uint256[8] | |
### _slash ### \_slash
```solidity ```solidity
function _slash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal virtual function _slash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal virtual
@ -1143,13 +1151,13 @@ stake to the receiver's available withdrawal balance_
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ------------ | --------------- | -------------------------------- |
| idCommitment | uint256 | The idCommitment of the member | | idCommitment | uint256 | The idCommitment of the member |
| receiver | address payable | The address to receive the funds | | receiver | address payable | The address to receive the funds |
| proof | uint256[8] | | | proof | uint256[8] | |
### _validateSlash ### \_validateSlash
```solidity ```solidity
function _validateSlash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal view virtual function _validateSlash(uint256 idCommitment, address payable receiver, uint256[8] proof) internal view virtual
@ -1174,8 +1182,8 @@ NOTE: The variant of Poseidon we use accepts only 1 input, assume n=2, and the s
#### Parameters #### Parameters
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ----- | ------- | ----------------- |
| input | uint256 | The value to hash | | input | uint256 | The value to hash |
### isValidCommitment ### isValidCommitment
@ -1184,7 +1192,7 @@ NOTE: The variant of Poseidon we use accepts only 1 input, assume n=2, and the s
function isValidCommitment(uint256 idCommitment) public view returns (bool) function isValidCommitment(uint256 idCommitment) public view returns (bool)
``` ```
### _verifyProof ### \_verifyProof
```solidity ```solidity
function _verifyProof(uint256 idCommitment, address receiver, uint256[8] proof) internal view virtual returns (bool) function _verifyProof(uint256 idCommitment, address receiver, uint256[8] proof) internal view virtual returns (bool)
@ -1220,9 +1228,9 @@ function P1() internal pure returns (struct Pairing.G1Point)
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---------------------- | ------------------- |
| [0] | struct Pairing.G1Point | the generator of G1 | | [0] | struct Pairing.G1Point | the generator of G1 |
### P2 ### P2
@ -1232,9 +1240,9 @@ function P2() internal pure returns (struct Pairing.G2Point)
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---------------------- | ------------------- |
| [0] | struct Pairing.G2Point | the generator of G2 | | [0] | struct Pairing.G2Point | the generator of G2 |
### negate ### negate
@ -1244,9 +1252,9 @@ function negate(struct Pairing.G1Point p) internal pure returns (struct Pairing.
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---------------------- | -------------------------------------------------------------- |
| r | struct Pairing.G1Point | the negation of p, i.e. p.addition(p.negate()) should be zero. | | r | struct Pairing.G1Point | the negation of p, i.e. p.addition(p.negate()) should be zero. |
### addition ### addition
@ -1256,9 +1264,9 @@ function addition(struct Pairing.G1Point p1, struct Pairing.G1Point p2) internal
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---------------------- | --------------------------- |
| r | struct Pairing.G1Point | the sum of two points of G1 | | r | struct Pairing.G1Point | the sum of two points of G1 |
### scalar_mul ### scalar_mul
@ -1268,9 +1276,9 @@ function scalar_mul(struct Pairing.G1Point p, uint256 s) internal view returns (
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| r | struct Pairing.G1Point | the product of a point on G1 and a scalar, i.e. p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. | | r | struct Pairing.G1Point | the product of a point on G1 and a scalar, i.e. p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. |
### pairing ### pairing
@ -1280,9 +1288,9 @@ function pairing(struct Pairing.G1Point[] p1, struct Pairing.G2Point[] p2) inter
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [0] | bool | the result of computing the pairing check e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 For example pairing([P1(), P1().negate()], [P2(), P2()]) should return true. | | [0] | bool | the result of computing the pairing check e(p1[0], p2[0]) _ .... _ e(p1[n], p2[n]) == 1 For example pairing([P1(), P1().negate()], [P2(), P2()]) should return true. |
### pairingProd2 ### pairingProd2
@ -1352,7 +1360,6 @@ function verifyProof(uint256[2] a, uint256[2][2] b, uint256[2] c, uint256[2] inp
#### Return Values #### Return Values
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---- | --------------------------- |
| r | bool | bool true if proof is valid | | r | bool | bool true if proof is valid |

View File

@ -34,6 +34,7 @@ contract RlnTest is Test {
assertEq(rln.MEMBERSHIP_DEPOSIT(), MEMBERSHIP_DEPOSIT); assertEq(rln.MEMBERSHIP_DEPOSIT(), MEMBERSHIP_DEPOSIT);
assertEq(rln.DEPTH(), DEPTH); assertEq(rln.DEPTH(), DEPTH);
assertEq(rln.SET_SIZE(), SET_SIZE); assertEq(rln.SET_SIZE(), SET_SIZE);
assertEq(rln.deployedBlockNumber(), 1);
} }
function test__ValidRegistration(uint256 idCommitment) public { function test__ValidRegistration(uint256 idCommitment) public {