У меня есть подписанная транзакция, и я хочу убедиться, что она подписана идентификатором учетной записи, существующим в NEAR.
Вопрос в три раза:
Убедитесь, что подпись действительна для данного открытого ключа c. Используйте любые доступные инструменты, которые могут проверить данный тип подписи. В Python есть пакет ed25519, поэтому вот пример:
ed25519
import ed25519 import base58 transaction = { "hash": "EzvvJEqdxKA62oAjG32y5herDtRGYEdmZXHDDyxorJ48", "public_key": "ed25519:oNCFEmRotRHTySKqmAwifNZ8VRpYS973p8cL61y7eiE", "signature": "ed25519:46WsywQYe31isWcHASrnR2pYCja4Mtjzs4n87isrTHWyDdX5uwrUaUn4SbhY9BMwWKvWwdcuyCjMsXdkXdPJv8ko", } pk_bytes = base58.b58decode(transaction['public_key'][len('ed25519:'):]) pk = ed25519.VerifyingKey(pk_bytes) # OK: pk.verify( sig=base58.b58decode(transaction['signature'][len('ed25519:'):]), msg=base58.b58decode(transaction['hash']) ) # Exception BadSignatureError: pk.verify( sig=base58.b58decode('66666666' + transaction['signature'][len('ed25519:') + 8:]), msg=base58.b58decode(transaction['hash']) )
Проверьте, существует ли ключ для данного идентификатора учетной записи с Near-Shell, Near-API - * или необработанный RP C вызов:
$ http post https://rpc.nearprotocol.com method=query params:='["access_key/test/ed25519:oNCFEmRotRHTySKqmAwifNZ8VRpYS973p8cL61y7eiE", ""]' id=123 jsonrpc=2.0 { ... "result": { "block_height": 3297678, "nonce": 10493, "permission": "FullAccess" } }