# 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"];
}
