Как посчитать сложность proof of work для приёма события релеем Nostr
Два релея с порогом десять бит по-разному принимают одну заметку. Причина может быть в подсчёте только целых нулевых шестнадцатеричных цифр без учёта следующей цифры.
Считайте биты проверенного ID
Учебный ID начинается с 003. Два нуля дают восемь нулевых битов, а цифра 3 добавляет ещё два. Пример выводит десять. В настоящем обработчике сначала вычислите ID из подписанного события. Для полностью нулевой строки отдельно обработайте случай, когда первый единичный бит отсутствует.
const id = "003" + "f".repeat(61);
const bits = [...id].map(c => parseInt(c, 16).toString(2).padStart(4, "0")).join("");
console.log(bits.indexOf("1"));
Отдельно проверьте заявленную цель
Тег nonce может указывать сложность, к которой стремился издатель. Если политика требует десять бит и в результате, и в заявленной цели, удачный хеш при цели восемь пройдёт только первую проверку. Различайте эти причины в ответе об отказе. Такое доказательство удорожает рассылку событий Nostr и не связано с получением награды за блок.