【发布时间】:2020-07-04 23:46:19
【问题描述】:
我有一个已签名的交易,我想验证它是否由 NEAR 上存在的帐户 ID 签名。
【问题讨论】:
标签: nearprotocol
我有一个已签名的交易,我想验证它是否由 NEAR 上存在的帐户 ID 签名。
【问题讨论】:
标签: nearprotocol
问题分为三个方面:
验证签名对于给定的公钥是否有效。使用可以验证给定签名类型的任何可用工具。 Python中有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-* 或原始 RPC 调用检查给定帐户 ID 的密钥是否存在:
$ 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"
}
}
【讨论】: