rln-contract/docs/index.md

1035 lines
10 KiB
Markdown

# Solidity API
## IPoseidonHasher
### hash
```solidity
function hash(uint256 input) external pure returns (uint256 result)
```
Hashes the input using the Poseidon hash function, n = 2, second input is the constant 0
#### Parameters
| Name | Type | Description |
| ----- | ------- | ----------------- |
| input | uint256 | The input to hash |
## PoseidonHasher
### Q
```solidity
uint256 Q
```
### C0
```solidity
uint256 C0
```
### C1
```solidity
uint256 C1
```
### C2
```solidity
uint256 C2
```
### C3
```solidity
uint256 C3
```
### C4
```solidity
uint256 C4
```
### C5
```solidity
uint256 C5
```
### C6
```solidity
uint256 C6
```
### C7
```solidity
uint256 C7
```
### C8
```solidity
uint256 C8
```
### C9
```solidity
uint256 C9
```
### C10
```solidity
uint256 C10
```
### C11
```solidity
uint256 C11
```
### C12
```solidity
uint256 C12
```
### C13
```solidity
uint256 C13
```
### C14
```solidity
uint256 C14
```
### C15
```solidity
uint256 C15
```
### C16
```solidity
uint256 C16
```
### C17
```solidity
uint256 C17
```
### C18
```solidity
uint256 C18
```
### C19
```solidity
uint256 C19
```
### C20
```solidity
uint256 C20
```
### C21
```solidity
uint256 C21
```
### C22
```solidity
uint256 C22
```
### C23
```solidity
uint256 C23
```
### C24
```solidity
uint256 C24
```
### C25
```solidity
uint256 C25
```
### C26
```solidity
uint256 C26
```
### C27
```solidity
uint256 C27
```
### C28
```solidity
uint256 C28
```
### C29
```solidity
uint256 C29
```
### C30
```solidity
uint256 C30
```
### C31
```solidity
uint256 C31
```
### C32
```solidity
uint256 C32
```
### C33
```solidity
uint256 C33
```
### C34
```solidity
uint256 C34
```
### C35
```solidity
uint256 C35
```
### C36
```solidity
uint256 C36
```
### C37
```solidity
uint256 C37
```
### C38
```solidity
uint256 C38
```
### C39
```solidity
uint256 C39
```
### C40
```solidity
uint256 C40
```
### C41
```solidity
uint256 C41
```
### C42
```solidity
uint256 C42
```
### C43
```solidity
uint256 C43
```
### C44
```solidity
uint256 C44
```
### C45
```solidity
uint256 C45
```
### C46
```solidity
uint256 C46
```
### C47
```solidity
uint256 C47
```
### C48
```solidity
uint256 C48
```
### C49
```solidity
uint256 C49
```
### C50
```solidity
uint256 C50
```
### C51
```solidity
uint256 C51
```
### C52
```solidity
uint256 C52
```
### C53
```solidity
uint256 C53
```
### C54
```solidity
uint256 C54
```
### C55
```solidity
uint256 C55
```
### C56
```solidity
uint256 C56
```
### C57
```solidity
uint256 C57
```
### C58
```solidity
uint256 C58
```
### C59
```solidity
uint256 C59
```
### C60
```solidity
uint256 C60
```
### C61
```solidity
uint256 C61
```
### C62
```solidity
uint256 C62
```
### C63
```solidity
uint256 C63
```
### C64
```solidity
uint256 C64
```
### C65
```solidity
uint256 C65
```
### C66
```solidity
uint256 C66
```
### C67
```solidity
uint256 C67
```
### C68
```solidity
uint256 C68
```
### C69
```solidity
uint256 C69
```
### C70
```solidity
uint256 C70
```
### C71
```solidity
uint256 C71
```
### C72
```solidity
uint256 C72
```
### C73
```solidity
uint256 C73
```
### C74
```solidity
uint256 C74
```
### C75
```solidity
uint256 C75
```
### C76
```solidity
uint256 C76
```
### C77
```solidity
uint256 C77
```
### C78
```solidity
uint256 C78
```
### C79
```solidity
uint256 C79
```
### C80
```solidity
uint256 C80
```
### C81
```solidity
uint256 C81
```
### C82
```solidity
uint256 C82
```
### C83
```solidity
uint256 C83
```
### C84
```solidity
uint256 C84
```
### C85
```solidity
uint256 C85
```
### C86
```solidity
uint256 C86
```
### C87
```solidity
uint256 C87
```
### C88
```solidity
uint256 C88
```
### C89
```solidity
uint256 C89
```
### C90
```solidity
uint256 C90
```
### C91
```solidity
uint256 C91
```
### C92
```solidity
uint256 C92
```
### C93
```solidity
uint256 C93
```
### C94
```solidity
uint256 C94
```
### C95
```solidity
uint256 C95
```
### C96
```solidity
uint256 C96
```
### C97
```solidity
uint256 C97
```
### C98
```solidity
uint256 C98
```
### C99
```solidity
uint256 C99
```
### C100
```solidity
uint256 C100
```
### C101
```solidity
uint256 C101
```
### C102
```solidity
uint256 C102
```
### C103
```solidity
uint256 C103
```
### C104
```solidity
uint256 C104
```
### C105
```solidity
uint256 C105
```
### C106
```solidity
uint256 C106
```
### C107
```solidity
uint256 C107
```
### C108
```solidity
uint256 C108
```
### C109
```solidity
uint256 C109
```
### C110
```solidity
uint256 C110
```
### C111
```solidity
uint256 C111
```
### C112
```solidity
uint256 C112
```
### C113
```solidity
uint256 C113
```
### C114
```solidity
uint256 C114
```
### C115
```solidity
uint256 C115
```
### C116
```solidity
uint256 C116
```
### C117
```solidity
uint256 C117
```
### C118
```solidity
uint256 C118
```
### C119
```solidity
uint256 C119
```
### C120
```solidity
uint256 C120
```
### C121
```solidity
uint256 C121
```
### C122
```solidity
uint256 C122
```
### C123
```solidity
uint256 C123
```
### C124
```solidity
uint256 C124
```
### C125
```solidity
uint256 C125
```
### C126
```solidity
uint256 C126
```
### C127
```solidity
uint256 C127
```
### M00
```solidity
uint256 M00
```
### M01
```solidity
uint256 M01
```
### M10
```solidity
uint256 M10
```
### M11
```solidity
uint256 M11
```
### hash
```solidity
function hash(uint256 input) external pure returns (uint256 result)
```
Hashes the input using the Poseidon hash function, n = 2, second input is the constant 0
#### Parameters
| Name | Type | Description |
| ----- | ------- | ----------------- |
| input | uint256 | The input to hash |
### \_hash
```solidity
function _hash(uint256 input) internal pure returns (uint256 result)
```
## RLN
### MEMBERSHIP_DEPOSIT
```solidity
uint256 MEMBERSHIP_DEPOSIT
```
The deposit amount required to register as a member
### DEPTH
```solidity
uint256 DEPTH
```
The depth of the merkle tree
### SET_SIZE
```solidity
uint256 SET_SIZE
```
The size of the merkle tree, i.e 2^depth
### idCommitmentIndex
```solidity
uint256 idCommitmentIndex
```
The index of the next member to be registered
### stakedAmounts
```solidity
mapping(uint256 => uint256) stakedAmounts
```
The amount of eth staked by each member
### members
```solidity
mapping(uint256 => bool) members
```
The membership status of each member
### poseidonHasher
```solidity
contract IPoseidonHasher poseidonHasher
```
The Poseidon hasher contract
### MemberRegistered
```solidity
event MemberRegistered(uint256 idCommitment, uint256 index)
```
Emitted when a new member is added to the set
#### Parameters
| Name | Type | Description |
| ------------ | ------- | ---------------------------------- |
| idCommitment | uint256 | The idCommitment of the member |
| index | uint256 | The index of the member in the set |
### MemberWithdrawn
```solidity
event MemberWithdrawn(uint256 idCommitment)
```
Emitted when a member is removed from the set
#### Parameters
| Name | Type | Description |
| ------------ | ------- | ------------------------------ |
| idCommitment | uint256 | The idCommitment of the member |
### constructor
```solidity
constructor(uint256 membershipDeposit, uint256 depth, address _poseidonHasher) public
```
### register
```solidity
function register(uint256 idCommitment) external payable
```
Allows a user to register as a member
#### Parameters
| Name | Type | Description |
| ------------ | ------- | ------------------------------ |
| idCommitment | uint256 | The idCommitment of the member |
### registerBatch
```solidity
function registerBatch(uint256[] idCommitments) external payable
```
Allows batch registration of members
#### Parameters
| Name | Type | Description |
| ------------- | --------- | ---------------------- |
| idCommitments | uint256[] | array of idCommitments |
### \_register
```solidity
function _register(uint256 idCommitment, uint256 stake) internal
```
Registers a member
#### Parameters
| Name | Type | Description |
| ------------ | ------- | -------------------------------------- |
| idCommitment | uint256 | The idCommitment of the member |
| stake | uint256 | The amount of eth staked by the member |
### withdrawBatch
```solidity
function withdrawBatch(uint256[] secrets, address payable[] receivers) external
```
Allows a user to slash a batch of members
#### Parameters
| Name | Type | Description |
| --------- | ----------------- | --------------------------------------- |
| secrets | uint256[] | array of idSecretHashes |
| receivers | address payable[] | array of addresses to receive the funds |
### withdraw
```solidity
function withdraw(uint256 secret, address payable receiver) external
```
Allows a user to slash a member
#### Parameters
| Name | Type | Description |
| -------- | --------------- | ------------------------------ |
| secret | uint256 | The idSecretHash of the member |
| receiver | address payable | |
### \_withdraw
```solidity
function _withdraw(uint256 secret, address payable receiver) internal
```
Slashes a member by removing them from the set, and transferring their
stake to the receiver
#### Parameters
| Name | Type | Description |
| -------- | --------------- | -------------------------------- |
| secret | uint256 | The idSecretHash of the member |
| receiver | address payable | The address to receive the funds |
### hash
```solidity
function hash(uint256 input) internal view returns (uint256)
```
Hashes a value using the Poseidon hasher
NOTE: The variant of Poseidon we use accepts only 1 input, assume n=2, and the second input is 0
#### Parameters
| Name | Type | Description |
| ----- | ------- | ----------------- |
| input | uint256 | The value to hash |