51 lines
1.5 KiB
Plaintext
51 lines
1.5 KiB
Plaintext
@startuml
|
|
'https://plantuml.com/sequence-diagram
|
|
|
|
title: Redelegation
|
|
|
|
msgServer -> keeper : BeginRedelegation(delAddr, valSrcAddr, valDstAddr, sharesAmount)
|
|
participant "keeper (staking)" as keeper
|
|
keeper -> keeper : get number of sharew
|
|
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.
|
|
keeper -> keeper : check the redelegation uses correct denom
|
|
|
|
alt valSrcAddr == valDstAddr
|
|
keeper --> msgServer : error
|
|
end
|
|
alt transitive redelegation
|
|
keeper --> msgServer : error
|
|
end
|
|
alt already has max redelegations
|
|
keeper --> msgServer : error
|
|
note left : this is the number of redelegations for a specific (del, valSrc, valDst) triple\ndefault : 7
|
|
end
|
|
|
|
|
|
keeper -> keeper : Unbond(del, valSrc) returns returnAmount
|
|
...
|
|
note left : See unbonding diagram
|
|
|
|
alt returnAmount is zero
|
|
keeper -> msgServer : error
|
|
end
|
|
|
|
keeper -> keeper : Delegate(del, returnAmount, status := valSrc.status, valDst, subtractAccount := false)
|
|
note left : See delegation diagram
|
|
...
|
|
|
|
alt validator is unbonded
|
|
keeper -> msgServer : current time
|
|
end
|
|
|
|
alt unbonding not complete, or just started
|
|
database store
|
|
keeper -> store : create redelegation object
|
|
keeper -> store : insert redelegation in queue, to be processed at the appropriate time
|
|
end
|
|
|
|
msgServer <-- keeper : completion time of the redelegation
|
|
msgServer -> msgServer : emit event: delegator, valSrc, valSrc,\nsharesAmount, completionTime
|
|
|
|
@enduml
|
|
|