diff --git a/src/routing_layer/topo_node_sqlite.h b/src/routing_layer/topo_node_sqlite.h index 8c8b0253..dac65644 100644 --- a/src/routing_layer/topo_node_sqlite.h +++ b/src/routing_layer/topo_node_sqlite.h @@ -97,9 +97,9 @@ int topo_node_sqlite_member_in_channel(sqlite3* db, const char* channel_id, uint * БД заполняет проверяющий подписи member_sync/chat_join; BGP-placeholder не предоставляет доступ. */ int topo_node_sqlite_member_allowed(sqlite3* db, const char* channel_id, uint64_t node_id); -/* Обновить owner-блок и deleted из adm_tags; 0/-1, отсутствующая строка даёт 0 без вставки. - * adm_tags/adm_tags_sig могут быть NULL; ненулевая подпись — 64 байта, проверяется вызывающим. */ -/* Запись owner-блока в одну существующую строку;0/-1. Проверяет все bind/step/changes=1/finalize. +/* Обновить owner-блок и deleted из adm_tags в одной существующей строке;0/-1,отсутствующая строка — ошибка. + * adm_tags/adm_tags_sig могут быть NULL;ненулевая подпись64 байта,проверяется вызывающим. + * Проверяет все bind/step/changes=1/finalize. * Работает в транзакции caller;при отказе caller откатывает её до любых runtime-уведомлений. */ int topo_node_sqlite_member_owner_put(sqlite3* db, const char* channel_id, uint64_t node_id, const char* adm_tags, const uint8_t* adm_tags_sig, int storage); @@ -113,7 +113,8 @@ int topo_node_sqlite_member_del(sqlite3* db, const char* channel_id, uint64_t no /* Записать проверенные вызывающим ключи/имя в nodes; 0/-1. Пустое имя сохраняет прежнее при UPDATE. * Ключи заменяются независимо от update_ts; update_ts хранит максимум, created_at сохраняется, если не NULL. - * Новая строка online=1, при UPDATE online сохраняется. Подпись и свежесть здесь не проверяются. */ + * Новая строка online=1, при UPDATE online сохраняется. Подпись и свежесть здесь не проверяются. + * Проверяет changes=1:подавленная trigger запись не считается успехом. Транзакцией управляет caller. */ int topo_node_sqlite_node_update_verified(sqlite3* db, uint64_t node_id, const char* name, const uint8_t* x25519, const uint8_t* ed25519, uint64_t update_ts, time_t created_at); diff --git a/src/routing_layer/topo_node_sqlite_doc.md b/src/routing_layer/topo_node_sqlite_doc.md index 3f4222c9..50b13c7f 100644 --- a/src/routing_layer/topo_node_sqlite_doc.md +++ b/src/routing_layer/topo_node_sqlite_doc.md @@ -38,6 +38,10 @@ node_update_verified записывает уже проверенные ключ В nodes.update_ts сохраняется максимум прежнего и входного значения; это не фильтр замены ключей. created_at сохраняется, если уже не NULL. Новая строка получает online=1, обновление существующей строки online не меняет. +Проверяются bind/step/changes=1/finalize;подавленная trigger запись возвращает ошибку. +member_owner_put также требует ровно одну изменённую строку,проверяет все SQL-этапы +и принимает NULL adm_tags/подпись. Эти операции используют транзакцию caller: +caller откатывает ошибку до публикации runtime-состояния и уведомлений. ## Снимок и bootstrap