5.4.1 账户权限相关概念
权限
EOS采用父子分层的权限结构,低级权限(子权限)由高级权限(父权限)派生而来,父权限拥有子权限所有的能力。子权限能做的事父权限也能做,但是反过来,父权限能做的事,子权限不一定能做。
- owner 是最高等级权限,拥有owner权限就意味着拥有账户的所有权,我们可以把owner理解为超级管理员权限。
- active 是owner的子权限,主要用来发送交易、投票或者进行高级别的账户修改操作。
权重
权限拥有者在权限中的重要程度,具体以不小于1的整数表示。
阈值
执行该权限的最低权重的临界值,大于此临界值就可以执行该权限了。
账户
执行操作的执行体,当一个账户被创建时,就具备了两种基本权限(permission)。每个权限绑定在一个公钥或多个公钥上,还可以绑定到另一个有效的账户的权限(permission)上。
账户权限由权限(permission)、对应公钥或另一个账户的权限(嵌套权限)、权重(weight)以及阈值(threshold)四个部分组成,账户下的权限结构如下:
5.4.2 交易鉴权过程
当执行一笔交易时,通过权限验证,可以开始执行,分成两步:
1.获取账户权限中的公钥,通过钱包找到私钥,然后通过私钥对交易进行签名;
2.从签名串中解出公钥,进行数字签名认证(查看公钥是否在账户权限中存在),如果存在则获取此公钥的权重,并比较权重是否大于权限的阈值,若大于阈值则鉴权通过;如果账户权限是多重嵌套权限,则需要把每个权限鉴权通过后的权重相加,把最后权重的总和与权限阈值做比较;
我们通过一个例子来说明权限的验证过程:
账户account1加载token合约,执行account1转账给account2,5个SDF代币,由account1执行;
./cleos set contract account1 ../../contracts/eosio.token -p account1@active
./cleos push action account1 transfer '[ "account1", "account2", "5.00 SDF", "m" ]' -p account1@active
创建账户时,系统同时会把账户下默认的权限设置好,写入chainbase数据库中,但可以通过命令修改账户下的权限的公钥,嵌套关系,权重,阈值;
比如:账户account1的权限表如下表所示: