账号和权限

个人账号AK

个人账号是指一个具体的地址Addr,用户的创建是离线的行为,可以通过命令行工具或者API进行创建

合约账号

合约账号是超级链智能合约的管理单元

  • 账号的创建:
    • 任何账号或者AK都可以调用系统级智能合约创建账号

    • 创建账号需要指定账号对应的拥有者的地址集,如果一个账号中只有一个地址, 那么这个Addr对账号完全控制;

    • 创建账号需要指定ACL控制策略,用于账号其他管理动作的权限控制;

    • 创建账号需要消耗账号资源;

  • 账号名命名规则;
    • 合约账号由三部分组成,分为前缀,中间部分,后缀。

    • 前缀为XC,后缀为@链名

    • 中间部分为16个数字组成。

    • 在创建合约账号的时候,只需要传入16位数字,在使用合约账号的时候,使用完整的账号。

  • 账号管理:依地址集合据创建时指定的地址集和权限策略,管理账号其他操作
    • 账号股东剔除和加入

    • 账号资产转账

    • 创建合约,创建智能合约需要消耗账号资源,先将utxo资源打到账号下,通过消耗账号的utxo资源创建合约,验证的逻辑需要走账号的ACL控制

    • 合约Method权限模型管理

  • 智能合约:超级链中的一个具体的合约,属于某个账号
    • 账号所属人员允许在账号内部署合约

    • 账号所属人员可以定义合约管理的权限模型

    • 设置合约方法的权限模型,合约内有一个权限表,记录:{ contract.method,permission_model}

  • 合约命名规则:长度为4~16个字符(包括4和16),首字母可选项为[a-ZA-Z_],末尾字符可选项为[a-zA-Z0-9_],中间部分的字符可选项为[a-zA-Z_.]

权限系统

超级链权限系统主要实现两个功能:账号权限管理、合约权限管理

账号权限管理 账号的创建、添加和删除AK、设置AK权重、权限模型

合约权限管理 设置合约调用权限,支持2种权限模型:

背书阈值:在名单中的AK或Account签名且他们的权重值加起来超过一定阈值,就可以调用合约

AK集合: 定义多组AK集合,集合内的AK需要全部签名,集合间只要有一个集合有全部签名即可

访问控制列表(ACL)

如果把合约账号当作一家股份制公司,那么ACL便是公司股东投票的机制,ACL可以规定合约账号背后各“股东”账号的权重,只有当“股东”签名的权重之和大于设定阈值时操作才会有效地进行。

超级链中ACL配置格式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
    "pm": {
        "rule": 1,              # rule=1表示签名阈值策略,rule=2表示AKSet签名策略
        "acceptValue": 0.6      # acceptValue为签名需达到的阈值
    },
    "aksWeight": {              # aksWeight里规定了每个地址对应账号签名的权重
        "AK1": 0.3,
        "AK2": 0.3
    }
}