3. 账号与权限管理

3.1. 创建合约账号

  1. 快速创建一个合约账号

1
./xchain-cli account new —account 1111111111111111 --fee 1000 -H 127.0.0.1:37101
  1. 按照json文件创建一个合约账号

1
./xchain-cli account new —desc account.json --fee 1000 -H 127.0.0.1:37101

account.json模版如下:

1
2
3
4
5
6
7
8
{
    "module_name": "xkernel",
    "method_name": "NewAccount",
    "args" : {
        "account_name": "1111111111111111",
        "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
    }
}

3.2. 管理合约账号/合约方法ACL

  1. 重新设置一个账号/合约方法的ACL

    走multisig命令

    step1: 准备好ACL的json文件,该json文件中有新的ACL配置,文件名记为acl_new.json

    step2: 针对acl_new.json生成原始交易

    先查看合约账号余额是否充足:

    1
    ./xchain-cli account balance XC1111111111111111@xuper
    

    如果不足,可以把当前个人账户(data/keys/address)的资产转移一些给合约账户

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

    step3: 使用旧有的acl权限模型对新生成的原始交易做签名(假设旧有的权限模型的成员包括bob和alice)

    1
    2
    ./xchain-cli multisig sign --keys data/account/bob --output bob.sign
    ./xchain-cli multisig sign --keys data/account/alice --output alice.sign
    

    step4:将签名后的交易post出去

    1
    ./xchain-cli multisig send --tx tx.out bob.sign,alice.sign bob.sign,alice.sign
    
  2. 查询一个账号的Acl

1
./xchain-cli acl query —account XC1111111111111111@xuper
  1. 查询一个合约方法的Acl

1
./xchain-cli acl query —contract contractName —method methodName

3.3. 常见问题

  1. 创建合约账户,重置合约账户/合约方法的ACL时,配置文件的案例:

    1. 创建合约账号,配置文件案例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    {
        "module_name": "xkernel",
        "method_name": "NewAccount",
        "args" : {
            "account_name": "1111111111111111",
            "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
        }
    }
    
    1. 重置合约账户的ACL,配置文件案例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    {
        "module_name": "xkernel",
        "method_name": "SetMethodAcl",
        "args" : {
            "account_name": "1111111111111111",
            "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
        }
    }
    
    1. 重置合约方法的ACL,配置文件案例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
        "module_name": "xkernel",
        "method_name": "SetAccountAcl",
        "args" : {
            "contract_name": "math",
            "method_name": "transfer",
            "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
        }
    }