Polkadot 提供了一个模块,允许用户设置代理帐户来代表他们执行有限行为的操作。与 Staking 中的存储和控制账户关系非常相似,代理账户允许用户将一个帐户保留在冷存储中,并使用该账户中代币的权重积极参与网络。
代理类型
你可以通过代理模块设置代理账户。设置代理账户时,必须为关系选择代理类型。Polkadot 提供以下关系:
· 任何代理
· 非转账
· 治理
· Staking
· 身份判断
当代理帐户进行代理交易时,Polkadot 会过滤这个交易,以确保代理账户具有代表 cold 帐户进行该交易的适当权限。
任何代理
顾名思义,代理类型 “Any” 允许代理账户进行任何交易,包括余额转账。在大多数情况下,应该避免这一点,因为代理账户比 cold 账户使用频率更高,安全性也较低。
非转账代理
“非转账”类型的代理账户是允许除了余额转账(包括 vested 类型的转账)以外的任何类型交易。
治理代理
“治理”类型将允许代理人进行与治理相关的交易(即民主、理事会、财政部、技术委员会和选举模块)。
Staking 代理
“Staking”代理类型允许进行 staking 相关交易,但不要将 staking 代理与控制账户混淆。在 Staking 模块内,一些交易必须来自 Stash 存储账户,而其他交易必须来自 controller 控制账户。Stash 账户将保留在冷存储中,而 Controller 账户进行日常交易,例如设置 session 密钥或决定提名哪些验证人。不过,Stash 储蓄账户仍需进行一些交易,比如绑定额外资金或指定新的控制账户。代理账户不会更改存储账户和控制账户的角色,但可以使存储账户的访问频率更低。
身份判断代理
“Identity Judgement” 代理账户允许注册中心对账户的身份进行判断。
匿名代理
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 受到破坏,它没有转账相关交易的权限,所以主帐户可以设置一个新的代理来替换它。
通过创建多个账户来代理一个账户,它可以让你在保护私钥的同时还能积极参与网络,从而有更精细的安全措施。