- 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
- rm -r data/keys
- ./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文件内容:
- {
- "module_name": "xkernel",
- "method_name": "NewAccount",
- "args" : {
- "account_name": "1234098776890654", # 说明:16位数字组成的字符串
- "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN\": 1}}" # 这里的address改成自己的address
- }
- }
- Step1: 多重签名需要收集多个账号的签名,在测试环境中主要是需要交易发起者以及黄反服务的签名,因此修改data/acl/addrs文件,将需要收集签名的address写入该文件中。以创建合约账号为例,需要黄反服务背书,因此在该文件中写入黄反服务address。
- XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
- Step2: 生成创建合约账号的原始交易,命令如下:
- ./xchain-cli multisig gen --desc newAccount.json -H 14.215.179.74:37101 --fee 1000 --output rawTx.out
- Step3: 向黄反服务获取签名,命令如下:
- ./xchain-cli multisig get --tx ./rawTx.out --host 14.215.179.74:37101 --output complianceCheck.out
- Step4: 自己对原始交易签名,命令如下:
- ./xchain-cli multisig sign --tx ./rawTx.out --output my.sign
- Step5: 将原始交易以及签名发送出去,命令如下:
- ./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中的地址顺序一致。
创建成功后,你可以通过这个命令去查看你刚才创建的合约账号:
- ./xchain-cli account query --host 14.215.179.74:37101
2.4.3. 设置合约账号ACL
注解
前置条件:将合约账号以及合约账号下的有权限的AK以合约账号/address形式以追加方式存放到data/acl/addrs
- Step1: 生成设置合约账号的原始交易,命令如下:
- ./xchain-cli multisig gen --desc accountAclSet.json -H 14.215.179.74:37101 --fee 10 --output rawTx.out
- Step2: 向黄反服务获取签名,命令如下:
- ./xchain-cli multisig get --tx ./rawTx.out --host 14.215.179.74:37101 --output complianceCheck.out
- Step3: 自己对原始交易签名,命令如下:
- ./xchain-cli multisig sign --tx ./rawTx.out --output my.sign
- Step4: 将原始交易以及签名发送出去,命令如下:
- ./xchain-cli multisig send my.sign complianceCheck.out,my.sign --tx ./rawTx.out -H 14.215.179.74:37101
accountAclSet.json模版如下:
- {
- "module_name": "xkernel",
- "method_name": "SetAccountAcl",
- "args" : {
- "account_name": "XC1234098776890654@xuper",
- "acl": "{\"pm\": {\"rule\": 1,\"acceptValue\": 1},\"aksWeight\": {\"ak1\": 1}}"
- }
- }