10 UMLClass 160 60 180 90 Find the latest validated ledger index. Call this value A. style=wordwrap Relation 50 50 130 70 lt=<- 110.0;50.0;10.0;50.0;10.0;10.0 UMLSpecialState 50 40 20 20 type=initial UMLClass 390 50 180 110 Construct transaction JSON including Sequence and LastLedgerSequence. (LastLedgerSequence is > A) style=wordwrap Relation 330 90 80 30 lt=<- 60.0;10.0;10.0;10.0 Relation 560 90 70 30 lt=<- 50.0;10.0;10.0;10.0 UMLClass 610 80 180 50 Sign transaction. style=wordwrap UMLClass 840 50 180 130 Save transaction to persistent storage. Be sure to include the hash, Sequence, LastLedgerSequence, and the validated ledger index. style=wordwrap Relation 780 90 80 30 lt=<- 60.0;10.0;10.0;10.0 Relation 1010 90 80 30 lt=<- 60.0;10.0;10.0;10.0 Text 10 10 160 30 New transaction style=wordwrap UMLClass 1070 80 180 50 Submit transaction. style=wordwrap UMLTimer 1080 230 140 90 Wait ~4s for next validated ledger UMLClass 90 530 180 50 Check status of transaction by hash. style=wordwrap UMLSpecialState 370 530 40 40 type=decision Relation 260 540 130 30 lt=<- 110.0;10.0;10.0;10.0 Relation 400 530 240 60 lt=<- [transaction not found, or is found in a non-validated ledger] 220.0;20.0;10.0;20.0 Relation 160 560 250 120 lt=<- [transaction is in a validated ledger] 10.0;100.0;10.0;60.0;230.0;60.0;230.0;10.0 UMLClass 90 660 180 50 Save final outcome to persistent storage. style=wordwrap UMLSpecialState 160 740 20 20 type=final Relation 160 700 30 60 lt=<- 10.0;40.0;10.0;10.0 Text 150 760 60 30 Done style=wordwrap UMLSpecialState 620 530 40 40 type=decision Relation 630 240 640 310 lt=<- r2=[latest validated ledger \nis < LastLedgerSequence] r2pos=20,5 550.0;10.0;620.0;10.0;620.0;270.0;10.0;270.0;10.0;290.0 Relation 650 540 240 50 lt=<- r1=[latest validated ledger \nis ≥ LastLedgerSequence] r1pos=-10,30 220.0;10.0;10.0;10.0 UMLSpecialState 870 530 40 40 type=decision Relation 420 560 490 160 lt=<- [server has continuous ledger history from A to LastLedgerSequence, inclusive] 10.0;140.0;10.0;90.0;470.0;90.0;470.0;10.0 UMLSpecialState 630 710 40 40 type=decision Relation 520 720 130 30 lt=<- 110.0;10.0;10.0;10.0 Relation 900 530 230 130 lt=<- [server does not have continuous ledger history from A to LastLedgerSequence (inclusive)] 210.0;20.0;10.0;20.0 UMLClass 1110 530 180 60 Wait for gaps to fill in or ask a different server. style=wordwrap Relation 1240 240 90 330 lt=<- 10.0;10.0;70.0;10.0;70.0;310.0;50.0;310.0 UMLClass 350 700 180 70 Look up account Sequence number in latest validated ledger. style=wordwrap Relation 240 740 430 140 lt=<- [Account Sequence is less than or equal to transaction Sequence] 10.0;120.0;10.0;70.0;410.0;70.0;410.0;10.0 UMLSpecialState 690 880 20 20 type=flow_final UMLClass 200 860 180 80 Transaction has not been included in any validated ledger and never will be. style=wordwrap UMLClass 450 870 180 50 Save final outcome to persistent storage. style=wordwrap Relation 370 880 100 30 lt=<- 80.0;10.0;10.0;10.0 Relation 620 880 90 30 lt=<- 70.0;10.0;10.0;10.0 Text 680 900 60 30 Done style=wordwrap UMLSpecialState 50 220 20 20 type=initial Text 10 190 190 30 Recover from outage style=wordwrap Relation 660 710 240 60 lt=<- [Account Sequence is greater than transaction Sequence] 220.0;20.0;10.0;20.0 UMLClass 880 700 180 80 Unknown transaction has been validated. Manual intervention recommended. style=wordwrap UMLClass 160 240 180 80 Check persistent storage for transactions without a final outcome saved. style=wordwrap Relation 50 230 130 60 lt=<- 110.0;40.0;10.0;40.0;10.0;10.0 Relation 330 260 100 30 lt=<- 80.0;10.0;10.0;10.0 UMLSpecialState 410 250 40 40 type=decision Relation 420 280 150 130 lt=<- [final outcomes of all transactions are recorded] 10.0;110.0;10.0;10.0 Text 410 410 60 30 Done style=wordwrap UMLSpecialState 420 390 20 20 type=final Relation 440 250 230 60 lt=<- [final outcomes of some transactions are not recorded] 210.0;20.0;10.0;20.0 Relation 1140 120 30 130 lt=<- 10.0;110.0;10.0;10.0 UMLClass 650 220 180 100 Repeat the following steps for each transaction without a final outcome recorded. style=wordwrap Relation 850 310 320 160 lt=<- 10.0;140.0;300.0;140.0;300.0;10.0 UMLNote 1080 700 230 230 bg=yellow transparency=0 style=wordwrap Some reasons an unknown transaction may have been validated: - The transaction was malleable and succeeded with a different hash. - A different program or person with your secret key is also sending transactions from the same account. - You previously sent a transaction, but lost your record of it. Relation 50 260 830 310 lt=<- 40.0;290.0;10.0;290.0;10.0;190.0;810.0;190.0;810.0;10.0;780.0;10.0