如何从 NEAR 协议中的私钥和/或帐户 ID 获取公钥?
Posted
技术标签:
【中文标题】如何从 NEAR 协议中的私钥和/或帐户 ID 获取公钥?【英文标题】:How to get a public key from private key and/or account id in NEAR protocol? 【发布时间】:2021-01-15 04:28:30 【问题描述】:在多种情况下,您可能拥有帐户 ID(这是公共信息)或拥有私有(秘密)密钥(例如从 NEAR 钱包本地存储中提取它),并且您想知道相应的公共密钥。
获取相关公钥的选项有哪些?
【问题讨论】:
【参考方案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 repl
nearAPI.KeyPair.fromString('ed25519:43qKAz3LfCTWpTAZPgA1DGsuwbiAjyosXpDrw24efAGP8Q3TcrnoUzTQHNRF5EbNTR38GRVdsHai9sRnzVu755gU').publicKey.toString()
(nearAPI
是REPL)
作为一个有用的链接,请参阅near.github.io/account-lookup 以查找有关帐户的更多信息,包括其关联的锁定合同和余额
如何以编程方式获取私钥以广播 TX?
@AndonMitev 请提出一个单独的问题,并提供有关您的用例的更多详细信息,包括您运行代码的上下文(浏览器、node.js、合同,还是其他东西?)以上是关于如何从 NEAR 协议中的私钥和/或帐户 ID 获取公钥?的主要内容,如果未能解决你的问题,请参考以下文章
使用元掩码扩展的 chrome 文件中的私钥和事务存储在哪里
hbuilder打包ios需要的私钥和profile文件和私钥证书怎么获得