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

Vla*_*lov 4 blockchain nearprotocol

当您可能拥有帐户 ID(这是公共信息)或拥有私钥(例如从 NEAR 钱包本地存储中提取),并且您想知道相应的公钥时,有多种情况。

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

Vla*_*lov 5

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())
Run Code Online (Sandbox Code Playgroud)

这样,有了私钥,就可以随时离线获取对应的公钥。

如果您没有密钥,您将无法签署交易,但您可能仍然想知道属于某个用户的公钥,在这种情况下,您可以通过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"
  }'
Run Code Online (Sandbox Code Playgroud)

或使用卷曲:

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"
    }
  }'
Run Code Online (Sandbox Code Playgroud)

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

  • 要从已知私钥快速获取公钥,您可以使用 NEAR CLI (`npm i -g near-cli`) 并运行: `near repl` `nearAPI.KeyPair.fromString('ed25519:43qKAz3LfCTWpTAZPgA1DGsuwbiAjyosXpDrw24efAGP8Q3TcrnoUzTQHNRF5EbNTR38GRVdsHai9sR nzVu755gU').publicKey .toString()`(`nearAPI` 是 [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) 中的可用对象之一) (2认同)
  • 作为有用的链接,请参阅 https://near.github.io/account-lookup 以查找有关帐户的更多信息,包括其相关的锁定合约和余额 (2认同)