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