【概述】
资产设好了白名单后,不在名单内的账号,将不能对该资产进行转账(包括转入转出)、交易(包括买入卖出),不能使用该资产支付系统手续费。至于已经启动的分期付款是否可以继续执行,或者发行人可否强制收回该账户拥有的资产,或者其他高级功能,有待测试。
这个功能用于满足资产发行的合规要求。
另外系统还支持黑名单功能,但本教程里不包含黑名单的具体介绍。
【教程内容】
假设你有一个资产 NEWASSET ,要设置白名单。
1,通过命令行获取资产的详细属性设置
命令格式:
get_asset [资产代码]
示例:
unlocked >>> get_asset NEWASSET
get_asset NEWASSET
{
"id": "1.3.123",
"symbol": "NEWASSET",
"precision": 4,
"issuer": "1.2.695",
"options": {
"max_supply": "1000000000000",
"market_fee_percent": 0,
"max_market_fee": 0,
"issuer_permissions": 79,
"flags": 2,
"core_exchange_rate": {
"base": {
"amount": 100000,
"asset_id": "1.3.0"
},
"quote": {
"amount": 10000,
"asset_id": "1.3.123"
}
},
"whitelist_authorities": [],
"blacklist_authorities": [],
"whitelist_markets": [],
"blacklist_markets": [],
"description": "{\"main\":\"\",\"market\":\"TEST\"}",
"extensions": []
},
"dynamic_asset_data_id": "2.3.123"
}
在上述结果中,
"issuer_permissions": 79 表示该资产的白名单启用状态是否可以修改。
实际上, issuer_permissions 是资产多个权限参数的集合,将 issuer_permissions 转为二进制,从右边数第 2 位表示白名单,如果是 1 则为可修改,是 0 则为不可修改。
"flags": 2 表示已经启用了白名单。
实际上,flags是资产多个旗标参数的集合,将 flags 转为二进制,从右边数第 2 位表示白名单,如果是 1 则为开启,是 0 则为关闭。
"whitelist_authorities": [] 表示没有设置具体名单,这时,白名单功能不生效(结果可测试)。
实际上, whitelist_authorities 里设置的是“白名单管理员”名单,而不是白名单本身。这样的设计很灵活,可以指定多个管理员,修改名单不一定要使用发行者账号,不需要频繁修改资产参数。
2,开启白名单功能
1) 可以在GUI里修改资产的“旗标”设置开启白名单。
不过需要注意,如果在命令行设置过资产参数,则不要在 GUI 进行操作,以免导致问题。
2) 通过命令行开启或关闭资产白名单
先将 flags 二进制里相应位置修改为1或0,然后转为十进制,执行 upate_asset 命令。可以和下面步骤合并,具体在下面会介绍。
3,将管理员账号加入白名单管理员名单
比如,你要将 newaccount1 设置为 NEWASSET 的白名单管理员。
3.1 首先要知道 newaccount1 的 ID,这个 ID 可以通过GUI的浏览账号功能或者命令行 get_account 命令取到。命令格式:
get_account [账户名]
示例:
unlocked >>> get_account newaccount1
get_account newaccount1
{
"id": "1.2.695",
...
}
上面结果显示, newaccount1 的 ID 是 1.2.695
3.2 然后,将上述 get_asset 命令获取的结果中 "options" 后的花括号里面的内容合成一行,再将 "1.2.695" 加入到 whitelist_authorities 后面的方括号中,比如(包含方括号) ["1.2.695"],执行 update_asset 命令。如果有多个管理员,则一起放入方括号中,使用逗号分隔,比如 ["1.2.695","1.2.696"] 。
命令格式:
update_asset [资产代码] [新发行人] [新资产参数] [是否广播]
示例:
update_asset NEWASSET null {"max_supply":"1000000000000","market_fee_percent": 0,"max_market_fee": 0,"issuer_permissions": 79,"flags": 2,"core_exchange_rate": {"base": {"amount": 100000,"asset_id":"1.3.0" },"quote": {"amount": 10000,"asset_id":"1.3.123" } },"whitelist_authorities": ["1.2.695"],"blacklist_authorities": [],"whitelist_markets": [],"blacklist_markets": [],"description":"{\"main\":\"\",\"market\":\"TEST\"}","extensions": []} true
其中,
第 1 个参数 NEWASSET 是资产代码;
第 2 个参数 null 表示不修改资产发行人(如果要把资产转给名叫 null 的账户,请使用引号,比如 "null")
第 3 个参数,花括号 {} 里是新的资产参数, 由前面得到的 options 加入一个管理员账号后得出。如果同时需要启用白名单,则修改 flags 后面的数值。
第 4 个参数 true 表示执行,如果填 false 表示对命令格式进行测试,不会执行
命令执行完成后,可以使用 get_asset 命令重新查看资产白名单管理员是否已经设好
注意:
1) update_asset 命令的第 3 个参数会将资产的所有属性设置完全覆盖,所以务必仔细检查,使用完整数据。
比如要删掉某个管理员,必须在参数中指定所有其他管理员。
2) 使用命令行设置后,不要再用 GUI 来修改资产属性,因为 GUI 目前不支持白名单设置,通过 GUI 操作可能导致数据丢失
4. 管理员管理白名单
现在管理员 newaccount1 可以管理资产 NEWASSET 的白名单了。默认名单是空,也就是说现在没人可以对该资产进行转账、交易等操作(可测试)。
4.1 查询白名单
这里有个问题:我使用的命令行有个 BUG ,导致不显示管理员设置的具体名单。如果 BUG 修复,可以使用 get_account 命令查看当前设置的白名单。
示例:
unlocked >>> get_account newaccount1
get_account newaccount1
{
...
"whitelisting_accounts": [],
"blacklisting_accounts": [],
"whitelisted_accounts": [],
"blacklisted_accounts": [],
...
}
其中 whitelisted_accounts 就是当前管理员设置的白名单。
另外 whitelisting_accounts 表示有哪个人把当前账号加入了他自己的白名单。
4.1 修改白名单
使用 whitelist_account 命令可以将账号加入白名单,或者从白名单移除。命令格式:
whitelist_account [操作人账号] [操作对象账号] [增加或删除] [是否广播]
示例1(加入白名单):
unlocked >>> whitelist_account newaccount1 newaccount2 true false
上述命令是将 newaccount2 加入 newaccount1 的白名单,需要 newaccount1 的权限才能执行。
执行完成后,使用 get_account 命令查看是否生效:
unlocked >>> get_account newaccount2
get_account newaccount2
{
...
"whitelisting_accounts": [
"1.2.695"
],
"blacklisting_accounts": [],
"whitelisted_accounts": [],
"blacklisted_accounts": [],
...
}
可以看到, newaccount2 已经在 1.2.695 也就是 newaccount1 的白名单里了。因为 newaccount1 是 NEWASSET 资产的白名单管理员,这时 newaccount2 可以正常使用 NEWASSET 资产。
注意:
当资产设置了白名单管理人后,管理员、甚至发行人自己,如果需要使用该资产,也需要先加入白名单。
示例2(从白名单移除):
unlocked >>> whitelist_account newaccount1 newaccount2 false false
上述命令是将 newaccount2 从 newaccount1 的白名单移除,需要 newaccount1 的权限才能执行。
用户从白名单移除后,即使持有资产,也不能转出或者卖出。