github.com/Finschia/finschia-sdk@v0.48.1/docs/uml/puml/begin_redelegation_sequence.puml (about)

     1  @startuml
     2  'https://plantuml.com/sequence-diagram
     3  
     4  title: Redelegation
     5  
     6  msgServer -> keeper : BeginRedelegation(delAddr, valSrcAddr, valDstAddr, sharesAmount)
     7  participant  "keeper (staking)" as keeper
     8  keeper -> keeper : get number of sharew
     9  note left: If the delegator has more shares than the total shares in the validator\n(due to rounding errors), then just withdraw the max number of shares.
    10  keeper -> keeper : check the redelegation uses correct denom
    11  
    12  alt valSrcAddr == valDstAddr
    13    keeper --> msgServer : error
    14  end
    15  alt transitive redelegation
    16    keeper --> msgServer : error
    17  end
    18  alt already has max redelegations
    19    keeper --> msgServer : error
    20    note left : this is the number of redelegations for a specific (del, valSrc, valDst) triple\ndefault : 7
    21  end
    22  
    23  
    24  keeper -> keeper : Unbond(del, valSrc) returns returnAmount
    25  ...
    26  note left : See unbonding diagram
    27  
    28  alt returnAmount is zero
    29  keeper -> msgServer : error
    30  end
    31  
    32  keeper -> keeper : Delegate(del, returnAmount, status := valSrc.status, valDst, subtractAccount := false)
    33  note left : See delegation diagram
    34  ...
    35  
    36  alt validator is unbonded
    37      keeper -> msgServer : current time
    38  end
    39  
    40  alt unbonding not complete, or just started
    41      database store
    42      keeper -> store : create redelegation object
    43      keeper -> store : insert redelegation in queue, to be processed at the appropriate time
    44  end
    45  
    46  msgServer <-- keeper : completion time of the redelegation
    47  msgServer -> msgServer : emit event: delegator, valSrc, valSrc,\nsharesAmount, completionTime
    48  
    49  @enduml
    50