• 2.4. 创建账号
    • 2.4.1. 创建个人账号(AK)
    • 2.4.2. 创建合约账号(Account)
    • 2.4.3. 设置合约账号ACL

    2.4. 创建账号

    2.4.1. 创建个人账号(AK)

    个人账号(AK)其实是一组公私钥对,个人帐号地址(address)是根据公钥经过一定规则导出的一个散列值。个人账号可以离线生成,不需要上链,只有在个人账号产生测试资源变动时(例如转入了一部分测试资源)才会在UTXO中产生记录。

    在data/keys下会有一个默认的个人账号(AK),包括address(你的地址)、private.key(你的私钥)、public.key(你的公钥),建议按照如下命令重新生成一个独有的个人账号。

    • 指定私钥目录:在data/test_demo下生成address、private.key、public.key: ./xchain-cli account newkeys —output data/test_demo
    • 覆盖默认目录: 覆盖data/keys下的文件,需要先删除data/keys目录,然后重新生成新的address、private.key、public.key
    1. rm -r data/keys
    2. ./xchain-cli account newkeys

    个人账号地址默认在data/keys/address文件中,可通过cat data/keys/address 查看自己的个人账号地址。

    2.4.2. 创建合约账号(Account)

    合约账号可以用来部署智能合约,创建合约账号是一个上链操作,因此也需要消耗一定量的测试资源。合约账号可以设置为多个个人账号共同持有,只有一个交易中的背书签名满足一定合约账号的ACL要求,才能代表这个合约账号进行操作。关于合约账号和ACL权限相关的内容,可以参考

    注解

    创建合约账号需要向黄反服务拿一个签名,对应地,需要将黄反服务的address写到 data/acl/addrs 中,需要注意的是,multisig最终合入签名时需要将签名顺序与 data/acl/addrs 里面的地址顺序保持一致,否则会签名校验失败。

    • Step0: 创建合约账号是一个系统合约,可以通过多重签名的方式发起系统合约调用。系统合约调用需要先创建一个合约调用描述文件,例如下面newAccount.json是一个创建合约账号的描述文件。 newAccount.json文件内容:
    1. {
    2. "module_name": "xkernel",
    3. "method_name": "NewAccount",
    4. "args" : {
    5. "account_name": "1234098776890654", # 说明:16位数字组成的字符串
    6. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN\": 1}}" # 这里的address改成自己的address
    7. }
    8. }
    • Step1: 多重签名需要收集多个账号的签名,在测试环境中主要是需要交易发起者以及黄反服务的签名,因此修改data/acl/addrs文件,将需要收集签名的address写入该文件中。以创建合约账号为例,需要黄反服务背书,因此在该文件中写入黄反服务address。
    1. XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
    • Step2: 生成创建合约账号的原始交易,命令如下:
    1. ./xchain-cli multisig gen --desc newAccount.json -H 14.215.179.74:37101 --fee 1000 --output rawTx.out
    • Step3: 向黄反服务获取签名,命令如下:
    1. ./xchain-cli multisig get --tx ./rawTx.out --host 14.215.179.74:37101 --output complianceCheck.out
    • Step4: 自己对原始交易签名,命令如下:
    1. ./xchain-cli multisig sign --tx ./rawTx.out --output my.sign
    • Step5: 将原始交易以及签名发送出去,命令如下:
    1. ./xchain-cli multisig send my.sign complianceCheck.out --tx ./rawTx.out -H 14.215.179.74:37101

    注解

    Step5 中放签名的地方:第一个my.sign签名对应的是交易发起者(Initiator),第二个complianceCheck.out签名对应的是需要背书(AuthRequire)的地址,发起者签名和背书签名用空格分开,如果需要多个账号背书,那么多个背书签名用,隔开,且签名顺序需要与data/acl/addrs中的地址顺序一致。

    创建成功后,你可以通过这个命令去查看你刚才创建的合约账号:

    1. ./xchain-cli account query --host 14.215.179.74:37101

    2.4.3. 设置合约账号ACL

    注解

    前置条件:将合约账号以及合约账号下的有权限的AK以合约账号/address形式以追加方式存放到data/acl/addrs

    • Step1: 生成设置合约账号的原始交易,命令如下:
    1. ./xchain-cli multisig gen --desc accountAclSet.json -H 14.215.179.74:37101 --fee 10 --output rawTx.out
    • Step2: 向黄反服务获取签名,命令如下:
    1. ./xchain-cli multisig get --tx ./rawTx.out --host 14.215.179.74:37101 --output complianceCheck.out
    • Step3: 自己对原始交易签名,命令如下:
    1. ./xchain-cli multisig sign --tx ./rawTx.out --output my.sign
    • Step4: 将原始交易以及签名发送出去,命令如下:
    1. ./xchain-cli multisig send my.sign complianceCheck.out,my.sign --tx ./rawTx.out -H 14.215.179.74:37101

    accountAclSet.json模版如下:

    1. {
    2. "module_name": "xkernel",
    3. "method_name": "SetAccountAcl",
    4. "args" : {
    5. "account_name": "XC1234098776890654@xuper",
    6. "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"ak1\": 1}}"
    7. }
    8. }