Восстановить адрес подписи Trezor, но вернуть другой адрес
Я создаю веб-сайт (Nextjs), который позволяет пользователю входить в систему с помощью кошелька Trezor, подписывая адрес Ethereum.
Во внешнем интерфейсе я использовал TrezorConnect для экспорта адресов Ethereum с путемm/44'/60'/0'/0/i
и подпишите сообщение:
const message = await TrezorConnect.ethereumSignMessage({
message: data,
path: m/44'/60'/0'/0/0,
hex: true,
});
await axios.post(`/login`, { signature: `0x${message.payload.signature}` });
В серверной части (Nodejs) я использовалeth-sig-util
восстановить подпись
const recoveredAddress = recoverPersonalSignature({
data,
sig: signature,
});
if (recoveredAddress.toLowerCase() !== expectedAddress.toLowerCase()) {
throw new HttpException('Signature is not correct.', 400);
}
Я видел, чтоrecoveredAddress
отличается отexpectedAddress
которым я подписывал сообщение. Но когда я использовал функцию «Проверить подпись сообщения» на EtherScan , оба были проверены с использованием одной и той же подписи (то есть0x${message.payload.signature}
).
Есть ли другие способы проверить подпись Трезора? Буду рад, если кто-нибудь подскажет мне какие-нибудь решения.