【问题标题】:How to get a public key from private key and/or account id in NEAR protocol?如何从 NEAR 协议中的私钥和/或帐户 ID 获取公钥?
【发布时间】:2021-01-15 04:28:30
【问题描述】:

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

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

【问题讨论】:

    标签: blockchain nearprotocol


    【解决方案1】:

    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())
    

    因此,有了秘钥,你可以随时离线获取对应的公钥。

    如果你没有秘钥,你将无法签署交易,但你可能仍想知道属于某个用户的公钥,此时你可以通过@查询 NEAR 协议网络987654323@:

    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 的权限。

    【讨论】:

    • 要快速从已知私钥中获取公钥,您可以使用 NEAR CLI (npm i -g near-cli) 并运行:near replnearAPI.KeyPair.fromString('ed25519:43qKAz3LfCTWpTAZPgA1DGsuwbiAjyosXpDrw24efAGP8Q3TcrnoUzTQHNRF5EbNTR38GRVdsHai9sRnzVu755gU').publicKey.toString()nearAPIREPL)
    • 作为一个有用的链接,请参阅near.github.io/account-lookup 以查找有关帐户的更多信息,包括其关联的锁定合同和余额
    • 如何以编程方式获取私钥以广播 TX?
    • @AndonMitev 请提出一个单独的问题,并提供有关您的用例的更多详细信息,包括您运行代码的上下文(浏览器、node.js、合同,还是其他东西?)
    猜你喜欢
    • 2021-12-03
    • 2012-01-02
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2017-04-02
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多