如何从NEAR协议中的私钥和/或帐户id中获取公钥



在各种情况下,您可能拥有帐户id(这是公共信息(或拥有私钥(秘密((例如,从NEAR钱包本地存储中提取(,并且您想知道相应的公钥。

获取相关公钥的选项有哪些?

NEAR协议使用EdDSA签名,因此使用ed25519密钥。有了私钥(秘密(,就可以派生相应的公钥(但不能从公钥派生私钥(。大多数实现EdDSA签名的库都允许从密钥派生公钥,下面是如何使用near-api-js:实现这一点

const nearApi = require('near-api-js')
// NEVER SHARE your private (secret) keys! (The key I used below is not used anywhere)
const keyPair = nearApi.KeyPair.fromString('ed25519:43qKAz3LfCTWpTAZPgA1DGsuwbiAjyosXpDrw24efAGP8Q3TcrnoUzTQHNRF5EbNTR38GRVdsHai9sRnzVu755gU')
console.log(keyPair.getPublicKey().toString())

因此,有了密钥,您总是可以离线获得相应的公钥。

如果你没有密钥,你将无法签署交易,但你可能仍然想知道属于某个用户的公钥,在这种情况下,你可以通过RPC:查询NEAR协议网络

http post https://rpc.testnet.near.org jsonrpc=2.0 id=dontcare method=query 
params:='{
"request_type": "view_access_key_list",
"finality": "final",
"account_id": "near.test"
}'

或使用cURL:

curl -X POST https://rpc.testnet.near.org -H 'content-type: application/json' --data 
'{
"jsonrpc": "2.0",
"id": "dontcare",
"method": "query",
"params": {
"request_type": "view_access_key_list",
"finality": "final",
"account_id": "near.test"
}
}'

作为响应,您将找到具有给定(near.test(帐户id权限的所有公钥。

最新更新