If user signs up through an attester (msg.sender is a registered attester) and the attester sets the airdrop amount airdropAmount non-zero, the user will have a one non-zero leaf in his user state. The non-zero leaf is computed by
If an attester signs up through his wallet or another smart contract, UniRep smart contract will record the msg.sender and assign an attester ID to the address.
The attester can also sign up through another relayer, but he has to provide the address of the attester who wants to sign up and the signature. The attester signs over his's own address concatenated with this contract address, then the UniRep smart contract will verify the signature by verifySignature.