diff --git a/apps/api/src/repo.ts b/apps/api/src/repo.ts index 4a158f3..1ac80c0 100644 --- a/apps/api/src/repo.ts +++ b/apps/api/src/repo.ts @@ -1,4 +1,5 @@ import type { Kysely } from 'kysely'; +import { canonicalPublicKey } from '@verifier/shared'; import type { Database, KeyWeight } from './db/schema.js'; import { SYNC_KEY } from './config.js'; import { classify, type HealthView } from './services/health-status.js'; @@ -53,7 +54,11 @@ export async function checkActiveKey( } const keys = last.keys as unknown as KeyWeight[]; - const active = !last.is_deleted && keys.some((k) => k.public_key === publicKey); + // Ключ из документа (`PUB_K1_...`, новый SDK) и ключ в индексе (`EOS...` из бэкфилла + // снапшота / `PUB_K1_...` из native-deltas) — один и тот же ключ в разных кодировках. + // Сравниваем по канонической форме, иначе C6 ложно отдаёт «не активен». + const target = canonicalPublicKey(publicKey); + const active = !last.is_deleted && keys.some((k) => canonicalPublicKey(k.public_key) === target); return { active, last_known_block: last.block_num, diff --git a/packages/shared/src/crypto/pubkey.ts b/packages/shared/src/crypto/pubkey.ts new file mode 100644 index 0000000..b7d39b9 --- /dev/null +++ b/packages/shared/src/crypto/pubkey.ts @@ -0,0 +1,20 @@ +import { PublicKey } from '@wharfkit/antelope'; + +/** + * Канонизация публичного ключа к единому строковому виду (`PUB__...`). + * + * Один и тот же secp256k1-ключ встречается в ДВУХ кодировках: legacy `EOS...` + * (снапшот цепи / бэкфилл прав, старый SDK) и современный `PUB_K1_...` (подписи нового + * SDK, native-deltas парсера). Это разные строки с разной контрольной суммой — сравнивать + * их как есть нельзя, иначе C6 ложно отдаёт «ключ не активен на момент подписи», хотя ключ + * тот же. Приводим оба операнда к `.toString()` (новый формат) перед сравнением. + * + * На невалидной строке возвращаем вход как есть (сравнение тогда просто не совпадёт). + */ +export function canonicalPublicKey(key: string): string { + try { + return PublicKey.from(key).toString(); + } catch { + return key; + } +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index ab10048..217c3b2 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,4 +1,5 @@ export * from './types/index.js'; export * from './canonicalize/index.js'; export * from './crypto/sha256.js'; +export * from './crypto/pubkey.js'; export * from './checks/index.js';