如何将polkadot{.js}导出的账户导入@polkadot/keyring?
导入Polkadot.js导出的账户至@polkadot/keyring
问题描述
我已安装polkadot{.js}浏览器扩展,并将一个账户导出为JSON文件。我希望在已安装@polkadot/keyring库的服务器上使用该账户,请问是否可以利用导出的JSON文件中的信息将账户添加到keyring中,使导入的账户使用相同的公钥/私钥?导出的JSON内容如下:
{"encoded":"e3/31ir...XXX","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3" }, "address":"5GTvRV9XXXX", "meta":{"genesisHash":"", "name":"Account3", "whenCreated":1676907491720}}
需求:将导出的polkadot{.js}账户添加至Keyring。
解决方案
完全可以,通过导出的JSON文件和账户密码,就能把原账户导入到@polkadot/keyring中,导入后的账户和原账户公钥/私钥完全一致。具体操作步骤如下:
1. 确认依赖安装
确保项目中已安装所需依赖,若未安装,执行以下命令:
npm install @polkadot/keyring @polkadot/util-crypto @polkadot/util
2. 编写导入代码
import { Keyring } from '@polkadot/keyring'; import { cryptoWaitReady } from '@polkadot/util-crypto'; // 如果是从文件读取JSON,需要引入fs模块:import fs from 'fs'; // 读取导出的账户JSON(如果是文件,用fs.readFileSync读取后解析) const accountJson = {"encoded":"e3/31ir...XXX","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3" }, "address":"5GTvRV9XXXX", "meta":{"genesisHash":"", "name":"Account3", "whenCreated":1676907491720}}; // 替换为你导出账户时设置的密码 const accountPassword = '你的账户密码'; async function importAndInitAccount() { // 等待加密库初始化完成 await cryptoWaitReady(); // 初始化Keyring,加密类型要和导出账户一致(这里是sr25519) const keyring = new Keyring({ type: 'sr25519' }); try { // 从JSON导入账户 const importedAccount = keyring.addFromJson(accountJson); // 用密码解锁账户,解锁后才能执行签名等操作 importedAccount.unlock(accountPassword); console.log('账户导入成功'); console.log('账户地址:', importedAccount.address); console.log('账户公钥:', importedAccount.publicKey.toString('hex')); } catch (err) { console.error('导入失败:', err.message); } } // 执行导入函数 importAndInitAccount();
3. 注意事项
- 必须保证Keyring初始化时的
type参数和导出JSON中encoding.content里的加密类型一致(示例中是sr25519) - 调用
unlock()方法是必要步骤,否则账户处于锁定状态,无法进行签名交易等操作 - 如果账户JSON存储在本地文件中,使用
fs.readFileSync读取后,记得用JSON.parse解析为对象
内容的提问来源于stack exchange,提问作者yodas_dev
相关产品推荐
相关产品推荐

