rln-contract/docs/index.md

12 KiB

Solidity API

IPoseidonHasher

hash

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

uint256 Q

C0

uint256 C0

C1

uint256 C1

C2

uint256 C2

C3

uint256 C3

C4

uint256 C4

C5

uint256 C5

C6

uint256 C6

C7

uint256 C7

C8

uint256 C8

C9

uint256 C9

C10

uint256 C10

C11

uint256 C11

C12

uint256 C12

C13

uint256 C13

C14

uint256 C14

C15

uint256 C15

C16

uint256 C16

C17

uint256 C17

C18

uint256 C18

C19

uint256 C19

C20

uint256 C20

C21

uint256 C21

C22

uint256 C22

C23

uint256 C23

C24

uint256 C24

C25

uint256 C25

C26

uint256 C26

C27

uint256 C27

C28

uint256 C28

C29

uint256 C29

C30

uint256 C30

C31

uint256 C31

C32

uint256 C32

C33

uint256 C33

C34

uint256 C34

C35

uint256 C35

C36

uint256 C36

C37

uint256 C37

C38

uint256 C38

C39

uint256 C39

C40

uint256 C40

C41

uint256 C41

C42

uint256 C42

C43

uint256 C43

C44

uint256 C44

C45

uint256 C45

C46

uint256 C46

C47

uint256 C47

C48

uint256 C48

C49

uint256 C49

C50

uint256 C50

C51

uint256 C51

C52

uint256 C52

C53

uint256 C53

C54

uint256 C54

C55

uint256 C55

C56

uint256 C56

C57

uint256 C57

C58

uint256 C58

C59

uint256 C59

C60

uint256 C60

C61

uint256 C61

C62

uint256 C62

C63

uint256 C63

C64

uint256 C64

C65

uint256 C65

C66

uint256 C66

C67

uint256 C67

C68

uint256 C68

C69

uint256 C69

C70

uint256 C70

C71

uint256 C71

C72

uint256 C72

C73

uint256 C73

C74

uint256 C74

C75

uint256 C75

C76

uint256 C76

C77

uint256 C77

C78

uint256 C78

C79

uint256 C79

C80

uint256 C80

C81

uint256 C81

C82

uint256 C82

C83

uint256 C83

C84

uint256 C84

C85

uint256 C85

C86

uint256 C86

C87

uint256 C87

C88

uint256 C88

C89

uint256 C89

C90

uint256 C90

C91

uint256 C91

C92

uint256 C92

C93

uint256 C93

C94

uint256 C94

C95

uint256 C95

C96

uint256 C96

C97

uint256 C97

C98

uint256 C98

C99

uint256 C99

C100

uint256 C100

C101

uint256 C101

C102

uint256 C102

C103

uint256 C103

C104

uint256 C104

C105

uint256 C105

C106

uint256 C106

C107

uint256 C107

C108

uint256 C108

C109

uint256 C109

C110

uint256 C110

C111

uint256 C111

C112

uint256 C112

C113

uint256 C113

C114

uint256 C114

C115

uint256 C115

C116

uint256 C116

C117

uint256 C117

C118

uint256 C118

C119

uint256 C119

C120

uint256 C120

C121

uint256 C121

C122

uint256 C122

C123

uint256 C123

C124

uint256 C124

C125

uint256 C125

C126

uint256 C126

C127

uint256 C127

M00

uint256 M00

M01

uint256 M01

M10

uint256 M10

M11

uint256 M11

hash

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

function _hash(uint256 input) internal pure returns (uint256 result)

InsufficientDeposit

error InsufficientDeposit(uint256 required, uint256 provided)

Invalid deposit amount

Parameters

Name Type Description
required uint256 The required deposit amount
provided uint256 The provided deposit amount

EmptyBatch

error EmptyBatch()

Provided Batch is empty

FullBatch

error FullBatch()

Batch is full, during batch operations

DuplicateIdCommitment

error DuplicateIdCommitment()

Member is already registered

MismatchedBatchSize

error MismatchedBatchSize(uint256 givenSecretsLen, uint256 givenReceiversLen)

Batch size mismatch, when the length of secrets and receivers are not equal

Parameters

Name Type Description
givenSecretsLen uint256 The length of the secrets array
givenReceiversLen uint256 The length of the receivers array

InvalidWithdrawalAddress

error InvalidWithdrawalAddress(address to)

Invalid withdrawal address, when the receiver is the contract itself or 0x0

MemberNotRegistered

error MemberNotRegistered(uint256 idCommitment)

Member is not registered

MemberHasNoStake

error MemberHasNoStake(uint256 idCommitment)

Member has no stake

RLN

MEMBERSHIP_DEPOSIT

uint256 MEMBERSHIP_DEPOSIT

The deposit amount required to register as a member

DEPTH

uint256 DEPTH

The depth of the merkle tree

SET_SIZE

uint256 SET_SIZE

The size of the merkle tree, i.e 2^depth

idCommitmentIndex

uint256 idCommitmentIndex

The index of the next member to be registered

stakedAmounts

mapping(uint256 => uint256) stakedAmounts

The amount of eth staked by each member

members

mapping(uint256 => bool) members

The membership status of each member

poseidonHasher

contract IPoseidonHasher poseidonHasher

The Poseidon hasher contract

MemberRegistered

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

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

constructor(uint256 membershipDeposit, uint256 depth, address _poseidonHasher) public

register

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

function registerBatch(uint256[] idCommitments) external payable

Allows batch registration of members

Parameters

Name Type Description
idCommitments uint256[] array of idCommitments

_register

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

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

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

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

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