10 UMLClass 470 80 180 90 Find the latest validated ledger index. Call this value A. style=wordwrap Relation 540 40 30 60 lt=<- 10.0;40.0;10.0;10.0 UMLSpecialState 540 30 20 20 type=initial UMLClass 470 200 180 110 Construct transaction JSON including Sequence and LastLedgerSequence. (LastLedgerSequence is > A) style=wordwrap Relation 540 160 30 60 lt=<- 10.0;40.0;10.0;10.0 Relation 540 300 30 60 lt=<- 10.0;40.0;10.0;10.0 UMLClass 470 340 180 50 Sign transaction. style=wordwrap UMLClass 470 420 180 130 Save transaction to persistent storage. Be sure to include the hash, Sequence, LastLedgerSequence, and the validated ledger index. style=wordwrap Relation 540 380 30 60 lt=<- 10.0;40.0;10.0;10.0 Relation 540 540 30 60 lt=<- 10.0;40.0;10.0;10.0 Text 490 0 160 30 New transaction style=wordwrap UMLClass 470 580 180 50 Submit transaction. style=wordwrap UMLTimer 480 660 140 90 Wait ~4s for next validated ledger UMLClass 460 790 180 50 Check status of transaction by hash. style=wordwrap Relation 540 740 30 70 lt=<- 10.0;50.0;10.0;10.0 UMLSpecialState 530 880 40 40 type=decision Relation 540 830 30 70 lt=<- 10.0;50.0;10.0;10.0 Relation 560 880 220 50 lt=<- [transaction is not in a validated ledger] 200.0;20.0;10.0;20.0 Relation 540 910 180 130 lt=<- [transaction is in a validated ledger] 10.0;110.0;10.0;10.0 UMLClass 460 1020 180 50 Save final outcome to persistent storage. style=wordwrap UMLSpecialState 540 1100 20 20 type=final Relation 540 1060 30 60 lt=<- 10.0;40.0;10.0;10.0 Text 530 1120 60 30 Done style=wordwrap UMLSpecialState 760 880 40 40 type=decision Relation 570 670 410 230 lt=<- r2=[latest validated leger \nis < LastLedgerSequence] 10.0;10.0;210.0;10.0;210.0;210.0 Relation 770 910 280 70 lt=<- r1=[latest validated leger \nis ≥ LastLedgerSequence] 260.0;50.0;10.0;50.0;10.0;10.0 UMLSpecialState 1030 940 40 40 type=decision Relation 1040 970 320 90 lt=<- [server has continuous ledger history from A to LastLedgerSequence, inclusive] 10.0;70.0;10.0;10.0 UMLSpecialState 1030 1140 40 40 type=decision Relation 1040 1100 30 60 lt=<- 10.0;40.0;10.0;10.0 Relation 1060 710 300 270 lt=<- [server does not have continuous ledger history from A to LastLedgerSequence (inclusive)] 70.0;10.0;70.0;250.0;10.0;250.0 UMLClass 1020 660 180 60 Wait for gaps to fill in or ask a different server. style=wordwrap Relation 770 670 270 30 lt=<- 10.0;10.0;250.0;10.0 UMLClass 970 1040 180 70 Look up account Sequence number in latest validated ledger. style=wordwrap Relation 860 1140 190 60 lt=<- [Account Sequence is less than or equal to transaction Sequence] 10.0;20.0;170.0;20.0 UMLSpecialState 770 1310 20 20 type=flow_final UMLClass 690 1120 180 80 Transaction has not been included in any validated ledger and never will be. style=wordwrap UMLClass 690 1230 180 50 Save final outcome to persistent storage. style=wordwrap Relation 770 1190 30 60 lt=<- 10.0;40.0;10.0;10.0 Relation 770 1270 30 60 lt=<- 10.0;40.0;10.0;10.0 Text 760 1330 60 30 Done style=wordwrap UMLSpecialState 210 250 20 20 type=initial Text 140 220 190 30 Recover from outage style=wordwrap Relation 1060 1140 260 60 lt=<- [Account Sequence is greater than transaction Sequence] 240.0;20.0;10.0;20.0 UMLClass 1300 1130 180 80 Unknown transaction has been validated. Manual intervention recommended. style=wordwrap UMLClass 140 300 180 80 Check persistent storage for transactions without a final outcome saved. style=wordwrap Relation 210 260 30 60 lt=<- 10.0;40.0;10.0;10.0 Relation 210 370 30 60 lt=<- 10.0;40.0;10.0;10.0 UMLSpecialState 200 410 40 40 type=decision Relation 230 420 210 110 lt=<- [final outcomes of all transactions are recorded] 70.0;90.0;70.0;10.0;10.0;10.0 Text 280 530 60 30 Done style=wordwrap UMLSpecialState 290 510 20 20 type=final Relation 0 420 240 250 lt=<- r2=[final outcomes of\nsome transactions\nare not recorded] r2pos=-50,100 220.0;230.0;220.0;190.0;140.0;190.0;140.0;10.0;200.0;10.0 Relation 540 620 30 60 lt=<- 10.0;40.0;10.0;10.0 UMLClass 140 650 180 100 Repeat the following steps for each transaction without a final outcome recorded. style=wordwrap Relation 220 740 260 90 lt=<- 240.0;70.0;10.0;70.0;10.0;10.0