【发布时间】:2021-01-15 04:28:30
【问题描述】:
在多种情况下,您可能拥有帐户 ID(这是公共信息)或拥有私有(秘密)密钥(例如从 NEAR 钱包本地存储中提取它),并且您想知道相应的公共密钥。
获取相关公钥的选项有哪些?
【问题讨论】:
在多种情况下,您可能拥有帐户 ID(这是公共信息)或拥有私有(秘密)密钥(例如从 NEAR 钱包本地存储中提取它),并且您想知道相应的公共密钥。
获取相关公钥的选项有哪些?
【问题讨论】:
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 的权限。
【讨论】:
npm i -g near-cli) 并运行:near replnearAPI.KeyPair.fromString('ed25519:43qKAz3LfCTWpTAZPgA1DGsuwbiAjyosXpDrw24efAGP8Q3TcrnoUzTQHNRF5EbNTR38GRVdsHai9sRnzVu755gU').publicKey.toString()(nearAPI 是REPL)