• 1. 合约账号
    • 1.1. 访问控制列表(ACL)
    • 1.2. 合约账号创建
    • 1.3. 合约账号基本操作
      • 1.3.1. 查询账号ACL
      • 1.3.2. 查询账号余额
      • 1.3.3. 修改账号ACL

    1. 合约账号

    1.1. 访问控制列表(ACL)

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

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

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

    了解了访问控制列表的概念,下面我们就来演示一下如何创建一个合约账号

    1.2. 合约账号创建

    Xchain的客户端工具提供了新建账号的功能,基本用法如下:

    1. xchain-cli account new --desc account.des

    这里的 account.des 就是创建账号所需要的配置了,内容如下:

    1. {
    2. "module_name": "xkernel",
    3. "method_name": "NewAccount",
    4. "args" : {
    5. "account_name": "1111111111111111", # 说明:账号名称是16位数字组成的字符串
    6. # acl 中的内容注意转义
    7. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.3,\"AK2\": 0.3}}"
    8. }
    9. }

    命令运行后就会调用xchain的系统合约功能 NewAccount 创建一个名为 XC1111111111111111@xuper (如果链名字为xuper)的账号

    新建合约账号新建合约账号

    除了上述方法,我们还提供了一个比较简易的方式来创建合约账号,命令如下:

    1. xchain-cli account new --account 1111111111111111 # 16位数字组成的字符串

    上述命令也会创建一个名为 XC1111111111111111@xuper 的账号,由于我们没有制定ACL的具体内容,其ACL被赋值为默认状态,即背后有权限的账号只有当前节点上默认账号一个(地址默认位于 data/keys/address)

    注解

    创建合约账号的操作需要提供手续费,需要按照命令行运行结果给出的数值,添加一个不小于它的费用(使用 —fee 参数)

    1.3. 合约账号基本操作

    1.3.1. 查询账号ACL

    Xchain的客户端工具提供了ACL查询功能,只需如下命令

    1. xchain-cli acl query account XC1111111111111111@xuper # account参数为合约账号名称

    查询合约账号ACL查询合约账号ACL

    1.3.2. 查询账号余额

    合约账号查询余额和普通账号类似,只是命令行的参数有些许变化

    1. ./xchain-cli account balance XC1111111111111111@xuper -H 127.0.0.1:37101

    使用此命令即可查询XC1111111111111111@xuper的余额

    查询合约账号查询合约账号余额

    1.3.3. 修改账号ACL

    修改ACL的配置和创建账号的配置类似

    1. {
    2. "module_name": "xkernel",
    3. "method_name": "SetAccountAcl", # 这里的方法有了变更
    4. "args" : {
    5. "account_name": "1111111111111111",
    6. # acl字段为要修改成的新ACL
    7. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK3\": 0.3,\"AK4\": 0.3}}"
    8. }
    9. }

    修改ACL的操作,需要符合当前ACL中设置的规则,即需要具有足够权重的账号签名

    我们首先生成一个多重签名的交易

    1. ./xchain-cli multisig gen --desc acl_new.json --from XC1111111111111111@xuper

    生成多重签名交易成多重签名交易

    这样就会生成一个默认为tx.out的文件,之后使用原ACL中的账号对其进行签名

    1. ./xchain-cli multisig sign --keys data/account/AK1 --output AK1.sign
    2. ./xchain-cli multisig sign --keys data/account/AK2 --output AK2.sign

    签名交易签名交易

    最后把生成的tx.out发出去

    1. ./xchain-cli multisig send --tx tx.out AK1.sign,AK2.sign AK1.sign,AK2.sign

    发送交易发送交易

    至此便完成了ACL的修改