@@ -147,7 +147,6 @@ namespace ccf
147147 std::vector<ccf::kv::Version> view_history;
148148 ::consensus::Index last_recovered_signed_idx = 0 ;
149149 RecoveredEncryptedLedgerSecrets recovered_encrypted_ledger_secrets = {};
150- LedgerSecretsMap recovered_ledger_secrets = {};
151150 ::consensus::Index last_recovered_idx = 0 ;
152151 static const size_t recovery_batch_size = 100 ;
153152
@@ -1147,7 +1146,6 @@ namespace ccf
11471146 // Open the service
11481147 if (consensus->can_replicate ())
11491148 {
1150- setup_one_off_secret_hook ();
11511149 auto tx = network.tables ->create_tx ();
11521150
11531151 // Clear recovery shares that were submitted to initiate the recovery
@@ -1493,18 +1491,24 @@ namespace ccf
14931491 }
14941492 }
14951493
1494+ // Decrypts chain of ledger secrets, and writes those to the ledger
1495+ // encrypted for each node. On a commit hook for this write, each node
1496+ // (including this one!) will begin_private_recovery().
14961497 void initiate_private_recovery (ccf::kv::Tx& tx) override
14971498 {
14981499 std::lock_guard<pal::Mutex> guard (lock);
14991500 sm.expect (NodeStartupState::partOfPublicNetwork);
15001501
1501- recovered_ledger_secrets = share_manager.restore_recovery_shares_info (
1502- tx, recovered_encrypted_ledger_secrets);
1502+ LedgerSecretsMap recovered_ledger_secrets =
1503+ share_manager.restore_recovery_shares_info (
1504+ tx, recovered_encrypted_ledger_secrets);
15031505
15041506 // Broadcast decrypted ledger secrets to other nodes for them to
15051507 // initiate private recovery too
15061508 LedgerSecretsBroadcast::broadcast_some (
1507- network, self, tx, recovered_ledger_secrets);
1509+ InternalTablesAccess::get_trusted_nodes (tx),
1510+ tx.wo (network.secrets ),
1511+ std::move (recovered_ledger_secrets));
15081512 }
15091513
15101514 //
@@ -1699,7 +1703,9 @@ namespace ccf
16991703 auto new_ledger_secret = make_ledger_secret ();
17001704 share_manager.issue_recovery_shares (tx, new_ledger_secret);
17011705 LedgerSecretsBroadcast::broadcast_new (
1702- network, tx, std::move (new_ledger_secret));
1706+ InternalTablesAccess::get_trusted_nodes (tx),
1707+ tx.wo (network.secrets ),
1708+ std::move (new_ledger_secret));
17031709
17041710 return true ;
17051711 }
@@ -1991,14 +1997,11 @@ namespace ccf
19911997 threading::get_current_thread_id (), std::move(msg));
19921998 }
19931999
1994- void backup_initiate_private_recovery ()
2000+ void begin_private_recovery ()
19952001 {
1996- if (!consensus->is_backup ())
1997- return ;
1998-
19992002 sm.expect (NodeStartupState::partOfPublicNetwork);
20002003
2001- LOG_INFO_FMT (" Initiating end of recovery (backup) " );
2004+ LOG_INFO_FMT (" Beginning private recovery" );
20022005
20032006 setup_private_recovery_store ();
20042007
@@ -2121,42 +2124,18 @@ namespace ccf
21212124 // recovery protocol (backup only)
21222125 network.ledger_secrets ->restore_historical (
21232126 std::move (restored_ledger_secrets));
2124- backup_initiate_private_recovery ();
2127+ begin_private_recovery ();
21252128 return ;
21262129 }
21272130 }
2128- }));
2129-
2130- network.tables ->set_global_hook (
2131- network.encrypted_submitted_shares .get_name (),
2132- network.encrypted_submitted_shares .wrap_commit_hook (
2133- [this ](
2134- ccf::kv::Version hook_version,
2135- const EncryptedSubmittedShares::Write& w) {
2136- // Initiate recovery procedure from global hook, once all recovery
2137- // shares have been submitted (i.e. recovered_ledger_secrets is
2138- // set)
2139- if (!recovered_ledger_secrets.empty ())
2140- {
2141- network.ledger_secrets ->restore_historical (
2142- std::move (recovered_ledger_secrets));
21432131
2144- LOG_INFO_FMT (" Initiating end of recovery (primary)" );
2145-
2146- setup_private_recovery_store ();
2147- reset_recovery_hook ();
2148-
2149- // Start reading private security domain of ledger
2150- last_recovered_idx = recovery_store->current_version ();
2151- read_ledger_entries (
2152- last_recovered_idx + 1 ,
2153- last_recovered_idx + recovery_batch_size);
2154-
2155- sm.advance (NodeStartupState::readingPrivateLedger);
2156- }
2157-
2158- return ;
2159- }));
2132+ LOG_INFO_FMT (
2133+ " Found no ledger secrets for this node ({}) in global commit hook "
2134+ " for {} @ {}" ,
2135+ self,
2136+ network.secrets .get_name (),
2137+ hook_version);
2138+ }));
21602139
21612140 network.tables ->set_global_hook (
21622141 network.nodes .get_name (),
0 commit comments