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. "module_name": "xkernel",
  3. "method_name": "NewAccount",
  4. "args" : {
  5. "account_name": "1111111111111111",
  6. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
  7. }
  8. }

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. ./xchain-cli multisig sign --keys data/account/bob --output bob.sign
    2. ./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. "module_name": "xkernel",
    3. "method_name": "NewAccount",
    4. "args" : {
    5. "account_name": "1111111111111111",
    6. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
    7. }
    8. }
    1. 重置合约账户的ACL,配置文件案例如下:
    1. {
    2. "module_name": "xkernel",
    3. "method_name": "SetMethodAcl",
    4. "args" : {
    5. "account_name": "1111111111111111",
    6. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
    7. }
    8. }
    1. 重置合约方法的ACL,配置文件案例如下:
    1. {
    2. "module_name": "xkernel",
    3. "method_name": "SetAccountAcl",
    4. "args" : {
    5. "contract_name": "math",
    6. "method_name": "transfer",
    7. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 0.6},\"aksWeight\": {\"AK1\": 0.5,\"AK2\": 0.5}}"
    8. }
    9. }