第二章 | 使用 eosc 更改帐户的权限结构
在我们的多签和权限系列的第二部分,我们向大家介绍下如何在 EOSIO 区块链上更新你帐户的权限结构,这个功能对许多用户来说仍然有些神秘。通过使用正确的工具并准确的理解区块链开发的需求,它就变得相当简单了,你可以全面的发挥这个独特而强大的功能。
探索帐户的权限
如果要查看其他帐户的权限结构,有两种方法
第一种是使用区块浏览器,例如 eosq,这是本文中屏幕截图的网站。 它的界面干净又易懂,明确的展示帐户所有的权限是如何嵌套和结构化的,如下所示。
另一种方法是使用 eosc 命令行工具,命令为 eosc get account ACCOUNT_NAME
。 如果你更喜欢查看 json 格式,可以加上\--json
的 flag。
编写 .yaml 文件
确定了新结构之后,就需要创建yaml文件,上载到链上。 文件的结构非常严格、必须严格遵守、否则在更新时会出错。 有一点需要注意,相关文档里是没记录的,但是密钥和帐户是必须按字母顺序排列的。 否则,它将报出"action validate exception"
(操作验证异常)错误。
上面的屏幕截图是标准权限的示例,其中包含 active
(活跃)权限和 owner
(所有者)权限各自的密钥。
如果要向 active
权限添加第二个密钥,可以像这样制作一个 yaml 文件:
---
threshold: 2
keys:
- key: EOS6qiF84rDueuGuRYjJe6HwHN9hGPAUetpGGSVgBZp25zr34xcQ9
weight: 1
permission: active
- key: EOS7WXh1FtKTnbg3GE9GWJX9KKqMxHzra7anCWaRFBJ46mj3oVtep
weight: 1
permission: active
---
示例文件托管在我们的 GitHub 存储库中,可以在这里找到
记住确保以字母数字顺序排列密钥以避免错误。 另请注意,你可以为每个密钥定义不同的权重,并根据需要为权限定义阈值。
文件制作完成后,在 eosc 中运行以下命令:
eosc system updateauth [ACCOUNT_NAME] [PERMISSION_NAME] [PARENT_PERMISSION] [FILENAME.yaml]
从 eosq 上看,新结构现在将成为:
将权限分配给其他帐户
如果你想将一个帐户的签名权限分配给另一个帐户,你可以使用如下所示制作的 yaml 文件:
---
threshold: 2
accounts:
- permission:
actor: msigexample2
permission: active
weight: 1
- permission:
actor: msigexample3
permission: active
weight: 1
---
文件可在这里下载
在这种情况下,需要 msigexample2
和 msigexample3
的 active
权限满足此 active
权限。请注意确保你是按字母数字顺序排列帐户名称的。
使用时间延迟
所有 EOSIO 区块链都有一个非常独特的功能:给交易添加的延迟可以计入多签名阈值的计算。 请注意,交易不能仅通过一个时间延迟授权,至少需要一个加密签名。 例如:
---
threshold: 2
keys:
- key: EOS6qiF84rDueuGuRYjJe6HwHN9hGPAUetpGGSVgBZp25zr34xcQ9
weight: 1
permission: active
waits:
- wait_sec: 60
weight: 1
permission: active
---
以上样本文件可以在此处找到
要满足 active
权限,把 \--delay-sec
flag 设成等于(或大于)wait_sec
在权限中定义的延迟。例如:
eosc transfer [SENDER] [RECIPIENT] 1.0000 --delay-sec 60
如果你在权限中设定多个延迟,它们则会累积起作用。 因此,如果你有类似如下的权限结构,则60秒的 \--delay-sec
将满足 active
权限。
为什么要使用延时?
时间延迟是有用的,因为它允许在延迟时间内取消交易。 例如,如果你很少使用你的帐户,并且你从来都不需要比延迟时间更快地转代币,你可以用此方法来捕捉并取消未经你授权的交易。
使用 eosc
来取消交易,运行命令:eosc tx cancel [ACCOUNT_NAME] [TX_ID]
请注意,由于满足上述 active
权限所需的延迟,你需要利用 owner
权限来运行此命令。 为此,你需要添加 \--permission [ACCOUNT_NAME]@owner
的 flag。
结合所有三个步骤
你可以混合三种不同类型的设置,来实现各种密钥、帐户和延迟的配置。 这有一个3个 key 中的任何2个可以满足阈值的设定。
---
threshold: 2
keys:
- key: EOS6qiF84rDueuGuRYjJe6HwHN9hGPAUetpGGSVgBZp25zr34xcQ9
weight: 1
permission: active
waits:
- wait_sec: 60
weight: 1
permission: active
accounts:
- permission:
actor: msigexample2
permission: active
weight: 1
---
以上样本文件在此处
确保当你最终更改帐户权限之前时,请仔细检查你用 owner
权限做出的任何更改。 唯一可以对 owner
权限做出改变的是 owner
本身。
在之后的文章中,我们将探讨如何将这些权限与 msig (多签)结合使用。 在更改你的权限之前,建议在testnet上的测试帐户上练习一下。
第一章 | EOSIO 多签和权限总览
第二章 | 使用 eosc 更改帐户的权限结构
第三章 | 满足 multisig(多签)权限
第四章 | 嵌套权限和 linkauth (链接验证)
第五章 | 收集一个 multisig (多签)签名