Как извлечь автора из nprofile и отдельно сохранить подсказки о релеях
Контакт прислал nprofile с двумя адресами релеев. Для подписки нужен один ключ автора, а адреса помогут найти события. Передача всей строки nprofile в фильтр авторов может дать пустую ленту.
Прочитайте тип поля после декодирования Bech32
Декодером NIP-19 проверьте контрольную сумму и получите двоичные данные. В nprofile поле типа ноль содержит 32-байтный открытый ключ, а поле типа один — подсказку о релее. Пример для Node.js показывает одну запись «тип, длина, значение» после декодирования. Он выводит тип, длину и ключ в шестнадцатеричной записи.
const key = Buffer.alloc(32, 0xab);
const value = Buffer.concat([Buffer.from([0,32]), key]);
console.log(value[0], value[1], value.subarray(2).toString("hex"));
Соберите фильтр, независимый от адреса релея
Передайте извлечённый ключ в authors. Подсказки о релеях храните отдельно: повторная ссылка на профиль с другим адресом добавит место поиска, сохранив одну карточку автора. До чтения непроверенных данных сверьте длины полей. Если рекомендованный сервер недоступен, события с подписью того же автора можно запросить на другом.