帐户标识EOSIO区块链中的参与者,要使用EOSIO区块链,首先需要创建一个帐户。然后可以将智能合约部署到该帐户,并使用其他帐户权限来授权智能合约交易。本教程详细介绍了eosio.system智能合约中的账户和权限模块,适用于EOS智能合约的初级开发人员,熟悉如何进行账户的创建、短账户的竞标,以及自定义权限的创建、链接、取消链接、删除等。
01
概述
(一)账户简介
EOSIO帐户是由12个字符组成,仅包含小写字母a-z和数字1-5。每个账户的所有权仅由账户名称决定,因此一个帐户可以更新其密钥,而不必将它们重新分发给其他方。除了账户名,账户实例还与其他字段相关联,例如创建时间、ram配额/使用、cpu/net限制/权重等(如下图)。与此同时,每个帐户都拥有独立的命名权限列表,通过灵活的权限结构使单用户或多用户授权成为可能。
名称 | 类型 | 描述 |
---|---|---|
account_name | name | 编码的 12 个字符的帐户名称 |
created | time_point | 创建账户的时间 |
core_liquid_balance | asset | 代币资产的流动余额 |
ram_quota | int64_t | 账户的最大RAM数量 |
net_weight | int64_t | NET所占的百分比权重(权重/总量) |
cpu_weight | int64_t | CPU所占的百分比权重(权重/总量) |
net_limit | account_resource_limit | NET的使用量、可用量和最大值 |
cpu_limit | account_resource_limit | CPU的使用量、可用量和最大值 |
ram_usage | int64_t | 帐户使用的RAM数量(以字节为单位) |
permissions | array of permission | 命名权限列表 |
total_resources | variant | 所有账户的总的CPU/NET权重 |
(二)短账户竞拍
通常情况下,EOSIO帐户是由12个字符组成,仅包含小写字母a-z和数字1-5。我们在各大钱包注册账户的时候,也只能注册12位的账户地址。不过,EOSIO系统中是有短账户存在的。根据EOSIO账户名的格式限制,小于12位的账户必须启用竞拍机制。我们可以在EOSIO系统中进行【账户竞拍】,例如:a/com/cn/eos/1等短账户。假如我们竞拍到账户【a】,就可以创建任何以【.a】为后缀的所有账户,如:a.a/bb.a/111.a等。
(三)权限简介
通过权限可以控制EOSIO帐户允许做什么,以及如何进行授权操作。这是由一个灵活的权限结构来实现的,该结构将每个帐户链接到一个分层命名权限列表,并将每个命名权限链接到一个权限表(如下图)。EOSIO中允许分层权限级别,例如图中parent字段将命名权限级别链接到其父权限。
名称 | 类型 | 描述 |
---|---|---|
perm_name | name | 权限名称 |
parent | name | 父权限名称 |
required_auth | authority | 关联权限表 |
(四)权限级别
命名权限可以在另一个权限下创建,从而允许分层的父子权限结构。每个账户在创建时,默认会生成两个命名权限:owner和active,其中owner是acive的父权限。当然,这也可以通过添加其他权限级别和层次结构来自定义。
1、Owner权限
owner权限位于每个帐户权限层次结构的根部,是帐户在其权限结构中可以拥有的最高相对权限。尽管owner权限可以执行较低级别权限可以执行的任何操作,但它通常用于在较低级别权限遭到破坏时进行恢复。因此,与owner权限关联的密钥通常保存在冷藏库中,不用于签署常规操作。
2、Active权限
active权限位于层次结构中owner权限的下一级,在当前的EOSIO实现中,是链接到所有操作的隐式默认权限。因此,除了更改与owner关联的密钥外,active权限可以执行owner权限可以执行的任何操作。一般情况下,active权限可以用于投票、转账等账户操作。
3、自定义权限
自定义权限是EOSIO帐户自行创建的任意命名权限,通常作为owner,active或其他自定义权限的子权限。自定义权限需要指定公私钥对,可以链接到智能合约操作,同时指定执行该操作所需的权限。通过EOSIO账户和权限结构,可以对智能合约操作进行灵活且精细的控制。
02
账户的操作
(一)准备工作
1、一条正在运行且可访问的区块链
中移链(基于EOS)测试环境搭建:
https://mp.weixin.qq.com/s/NBNFk9Xk9FCukMVgl0tfHA
2、确保本地钱包已打开并解锁
如何创建钱包:
https://developers.eos.io/manuals/eos/latest/cleos/how-to-guides/how-to-create-a-wallet