波卡(Polkadot)浏览器扩展插件 {.js}
Polkadot{.js} Extension 是一个轻量级的浏览器扩展程序,它为网页注入了一个@polkadot/api签署者和相关的账户,使任何去中心化应用(dapp)都能直接利用。这个概念验证(POC)实现是一个可扩展的 Polkadot/Substrate 浏览器签名工具。
目前,该扩展的主要功能是管理账户,并允许使用这些账户进行交易签名。它不直接为 dapp 注入提供者,也不执行构建并提交到网络的交易钱包功能。
安装
在 Chrome 和 Firefox 上安装 Polkadot{.js} Extension 非常简单:
- Chrome:通过Chrome网络商店安装。
- Firefox:通过Mozilla附加组件安装。
文档与示例
了解更多如何作为 dapp 开发人员使用该扩展的详细信息,包括食谱和常见问题解答,请参阅Polkadot-js 扩展文档。
开发版本
如果你想构建开发版并在浏览器中查看你的改动:
- 使用
yarn build
构建。 - 安装扩展:
- Chrome:
- 访问
chrome://extensions/
。 - 确保“开发者模式”设置开启。
- 点击“加载已解压的扩展程序”,指向
packages/extension/build
。 - 如果正在开发,修改后刷新扩展。
- 访问
- Firefox:
- 访问
about:debugging#addons
。 - 启动“启用附加组件调试”。
- 点击“临时加载附加组件”,选择
packages/extension/build/manifest.json
。 - 如果开发中,更改后重新加载扩展。
- 访问
- Chrome:
- 当访问
https://polkadot.js.org/apps/
时,它将注入扩展。
添加后,你可以创建新账户(通过自动生成种子),或导入现有种子。在访问 apps UI 时,会显示这些账户为 <account name> (extension)
。
开发者
仓库分为多个包:
- extension - 主入口,包含注入和后台处理逻辑。
- extension-ui - 构建弹出窗口的 UI 组件。
- extension-dapp - 用于简化数据提取的方便包装器,适用于希望集成扩展的任何 dapp。
- extension-inject - 用于注入扩展以便 dapp 使用的薄包装器。
Dapp 开发者
Dapp 开发者的详细技术说明可在下一节找到,以了解如何与注入的对象直接交互。不过,提供了便利的包装器,使得任何 dapp 可以轻松使用此扩展(或其他符合接口的扩展),而无需管理额外信息。
Dapp 开发的文档可在 polkadot-js 文档中找到。更多关于便利包装器 @polkadot/extension-dapp
的信息以及使用样本,请查阅。
API 接口
扩展注入接口是通用的,设计目的是让任何扩展开发者可以轻松地注入扩展(只要遵循特定接口),同时也让任何 dapp 开发者能够轻松地启用来自多个扩展的接口。这不是全有或全无的方法,而是生态系统,让用户可以选择最适合自己的扩展。
从 dapp 开发者的角度来看,唯一的工作就是包含 @polkadot/extension-dapp
包并调用适当的启用函数以获取所有扩展及其相关接口。
对于扩展开发者来说,唯一需要做的就是通过极简的 @polkadot/extension-inject
包装器启用扩展。使用上述接口的 dapp 将可以通过这个接口访问扩展。
如果有多个扩展,每个都会通过注入接口填充条目,并向 dapp 提供。由 enable
返回的 Injected
接口包含以下信息,对所有兼容的扩展都是可用的。
interface Injected {
// 账户接口,如下面详细描述
readonly accounts: Accounts;
// 标准 API 的签署者接口,如下面详细描述
readonly signer: Signer;
// 目前尚未注入,API 的订阅提供者,可以在 dapp 中的 API 构造过程中传递
// readonly provider?: Provider
}
interface Account = {
// SS58 编码的地址
readonly address: string;
// 此账户的创世哈希(如果适用所有,则为空)
readonly genesisHash?: string;
// (可选)用于显示的名称
readonly name?: string;
};
// 暴露账户
interface Accounts {
// 获取当前的账户列表
get: () => Promise<Account[]>;
// (可选)订阅所有账户,当它们改变时更新
subscribe?: (cb: (accounts: Account[]) => any) => () => void
}
// 通过 sendMessage 进行通信的签署者
interface Signer extends SignerInterface {
// 没有特定的签署者扩展,仅暴露 `sign` 接口,供 polkadot-js API 使用,
// 符合该 API 的 Signer 接口
}
注射信息
本部分中的信息可能会变化和发展。因此,建议所有 dapp 通过 @polkadot/extension-dapp
(对于 dapp)和 extension-inject
(对于扩展)包进行访问,从而避免与较低级别的目标直接交互。
扩展将 injectedWeb3
注入全局 window
对象,暴露出以下内容:(这是为了扩展通用,允许任何 dapp 利用多个签名人,从多个扩展中获取账户。)
window.injectedWeb3 = {
// 此为扩展名,可能有多个注入,
// 每个都有自己的键,这里的 `polkadot-js` 是针对此扩展的
'polkadot-js': {
// 包的语义版本
version: '0.1.0',
// 这被调用来启用注入,返回一个注入对象,
// 其中包含账户、签署者和提供者接口
// 或在未授权的情况下拒绝
enable (originName: string): Promise<Injected>
}
}
库纳词、密码和导入/导出
从扩展中使用库纳词和密码
通过扩展创建密钥对时,会提供一个12字库纳词种子,并要求您创建一个密码。此密码只在磁盘上加密私钥,因此需要密码才能在 polkadot-js/apps
中花费资金或从备份导入账户。但密码并不能保护库纳词短语。也就是说,如果攻击者获得了库纳词短语,他们就能在没有密码的情况下花费资金。
导入库纳词自其他密钥生成工具
一些密钥生成工具(如 Subkey)支持硬和软密钥派生以及加密库纳词短语的密码。这样,即使库纳词短语不足以为资金支出提供防护。
扩展支持这些高级特性。导入账户时,可以以以下格式在库纳词后面添加这些派生路径或密码:
<mnemonic phrase>//<hard>/<soft>///<password>
即,硬派生路径前面加上 //
,软派生路径加上 /
,密码前面加上 ///
。
扩展仍然会要求您输入账户的密码。如同以前一样,此密码仅用于加密磁盘上的私钥。不需要与加密库纳词短语的密码相同。
也可以从现有账户派生新的账户——在账户下拉菜单中选择“衍生新账户”。提供父账户的密码,以及派生账户的名称和密码后,输入以下格式的派生路径:
//<hard>/<soft>
路径将被添加到父账户的库纳词短语中。
波卡(Polkadot)浏览器扩展插件 {.js} 结构清晰,易于集成,并提供强大的账户管理和安全签署功能。无论你是 dapp 开发者还是普通用户,都可以利用其强大的功能来体验 Polkadot 生态系统的无限潜力。立即安装并体验吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考