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

时间:2020-09-29 14:26:08

标签: blockchain nearprotocol

在多种情况下,您可能拥有帐户ID(这是公共信息)或拥有私有(秘密)密钥(例如,从NEAR Wallet本地存储中提取),并且想要知道相应的公共密钥。 / p>

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

1 个答案:

答案 0 :(得分:2)

NEAR协议使用EdDSA signature,因此使用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())

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

如果您没有秘密密钥,将无法签署交易,但是您可能仍想知道属于某个用户的公共密钥,在这种情况下,您可以通过{ {3}}:

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的所有公共密钥及其权限。