波卡提供了代理模块,你可以通过它来设置代理账户,从而增加一层安全性。本文是波卡百科(Polkadot Wiki)的一部分。Polkadot Wiki 是由波卡官方撰写的波卡介绍文档,PolkaWorld 正在逐步翻译和连载该文档。
Polkadot 提供了一个模块,允许用户设置代理帐户来代表他们执行有限行为的操作。与 Staking 中的存储和控制账户关系非常相似,代理账户允许用户将一个帐户保留在冷存储中,并使用该账户中代币的权重积极参与网络。
代理类型
你可以通过代理模块设置代理账户。设置代理账户时,必须为关系选择代理类型。Polkadot 提供以下关系:任何代理、非转账、治理、Staking、身份判断、当代理帐户进行代理交易时,Polkadot 会过滤这个交易,以确保代理账户具有代表 cold 帐户进行该交易的适当权限。
任何代理
顾名思义,代理类型 “Any” 允许代理账户进行任何交易,包括余额转账。在大多数情况下,应该避免这一点,因为代理账户比 cold 账户使用频率更高,安全性也较低。
非转账代理
“非转账”类型的代理账户是允许除了余额转账(包括 vested 类型的转账)以外的任何类型交易。
治理代理
“治理”类型将允许代理人进行与治理相关的交易(即民主、理事会、财政部、技术委员会和选举模块)。
有关治理代理的更多信息,请参见"治理" 部分:https://wiki.polkadot.network/docs/en/maintain-guides-democracy#governance-proxies
Staking 代理
“Staking”代理类型允许进行 staking 相关交易,但不要将 staking 代理与控制账户混淆。在 Staking 模块内,一些交易必须来自 Stash 存储账户,而其他交易必须来自 controller 控制账户。Stash 账户将保留在冷存储中,而 Controller 账户进行日常交易,例如设置 session 密钥或决定提名哪些验证人。不过,Stash 储蓄账户仍需进行一些交易,比如绑定额外资金或指定新的控制账户。代理账户不会更改存储账户和控制账户的角色,但可以使存储账户的访问频率更低。
身份判断代理
“Identity Judgement” 代理账户允许注册中心对账户的身份进行判断。如果你不熟悉链上的判断和身份,请参阅本页 :https://wiki.polkadot.network/docs/en/learn-identity#judgements
匿名代理
Polkadot 包含一个创建匿名代理的函数,该账户只能通过代理访问。也就是说,它生成一个地址,但没有相应的私钥。通常,主账户指定代理账户,但匿名代理则相反。创建代理关系的账户是代理账户,新账户是主账户。对匿名代理使用 exreme care,删除代理关系后,账户将无法访问。
为什么使用代理账户?
代理账户非常适合用于特定目的,因为它们添加了一层安全性。不同于在一个单独的账户中使用资金,具有独特角色的小型账户可以完成储蓄账户的主要任务。这会将注意力从主账户转移到代理账户。特别是匿名代理,可以用于无权限管理。在下面的示例中,有一个多重签名,里面有四个不同的账户。其中的两个账户,Alice 和 Bob,有一个匿名代理。如果多重签名帐户想在匿名代理中添加或删除 Alice 或 Bob,甚至添加一个新账户,则匿名代理将负责该更改。如果多重签名账户想在没有匿名代理的情况下修改自身,那么需要创建一个新的多重签名账户。
如何设置代理账户
使用 Polkadot-JS UI
要设置代理,请导航到 Polkadot JS UI(https://polkadot.js.org/apps/#/extrinsics)并单击“Developer”>“Extrinsics”。在这里我们将看到一个与此类似的页面:
要添加代理,请单击模块选择下拉菜单。下拉列表标记为“提交以下外部文件(submit the following extrinsic)”。选择 proxy 代理模块,然后选择 addProxy extrinsic(在其旁边的下拉菜单中)。要添加代理,需要选择 addProxy(proxy,proxy_type)函数。你设置的所选代理帐户将是具有代理的账户。顶部选定的账户是将作为主账户的账户。注意:如果在添加代理时看到“未使用”选项,则这不是代理类型。这是一个空的选项,如果你尝试将其添加作为代理账户,则不会发生任何事情。不会创建新代理。
在 Polkadot-JS UI 上创建匿名代理
对于匿名代理,需要调用另一个函数,即 anonymous(proxy_type, index) 。这会让你选择要设置哪种匿名代理,以及索引。
另一种创建代理的方法
还有另一种方法可以在 Polkadot JS UI 上设置代理。转到导航中的“账户”,然后单击“账户”按钮。对于你在这个页面上的每个账户,点击三个点按钮可以直接“添加代理”创建代理账户。然后将在你的屏幕上弹出一个窗口,你可以在其中选择该特定账户的代理类型。
注意:不能从“账户”页创建匿名函数,必须在“外部”页上。
移除代理
如果要删除代理,extrinsic 外部页面上有几个函数可以帮助你完成此操作。killAnonymous() 函数可以删除匿名代理。removeProxies()和 removeProxy() 都可以删除任何其他类型的代理,但前者将删除所有代理,而后者是删除一个选定的代理。
总结
如果代理类型及其应用程序的概念看起来很抽象,那么它的确很抽象。下面是一个如何使用这些账户的示例。假设你有一个账户作为你的主要代币持有账户,并且不想经常访问它,但是你确实希望参与治理和 Staking。你可以设置治理和 Staking 代理账户。
在本例中,主账户 A 只会进行两次交易,将账户 B 设置为治理代理账户,账户 C 设置为 staking 代理账户。现在,账户 B 可以代表 A 参与治理活动。同样,账户 C 可以执行通常与存储账户相关联的操作,例如绑定资金和设置控制账户 D。通常需要存储账户的操作,如绑定额外代币或设置新的控制账户,都可以由其代理账户 C 来处理。如果账户 C 受到破坏,它没有转账相关交易的权限,所以主帐户可以设置一个新的代理来替换它。通过创建多个账户来代理一个账户,它可以让你在保护私钥的同时还能积极参与网络,从而有更精细的安全措施。