# Sequence diagram for RLN Relay protocol (registration) msc { hscale = "2"; d [label = " "], a [label = " "],b [label = " "]; a rbox a [label="Relay Node A"], b note b [label="Membership Contract"], d rbox d [label = "Relay Node B"]; b abox b [ label=" \n Listening to the membership contract \n "] ; a box a [ label=" \n Generate sk,pk \n "] ; a=>b [ label = " \n Register(pk, x ETH) \n " ] ; a box a [ label=" \n Listening to the membership contract \n "] ; b box b [label=" \n Insert pk as a leaf to the tree \n \n index: The index of the inserted leaf \n \n root: The updated tree root \n \n authPath: The authentication path \n "]; |||; b=>a [ label = "index, root, authPath"]; |||; ..., ---; ... [ label = "Other relay nodes register and the membership tree gets updatetd" ]; ..., ---; a=>b [ label = "getRoot()" ] ; b box b [label=" \n root: Get the current root\n "]; b=>a [ label = "root"]; ..., --- [ label = " " ]; a=>b [ label = "getAuthPath(index)" ] ; b box b [label=" \n authPath: Calculate the authentication path of the leaf with the given index and based on the current tree\n "]; b=>a [ label = "authPath"]; }