2. BNS区块链域名合约
区块链域名服务(BlockChain Naming Service,简称BNS),是一个基于区块链技术的去中心化域名解决方案,旨在为用户提供安全、可靠且易于使用的区块链域名服务。类似于传统互联网的DNS服务,BNS合约允许用户在区块链上注册和管理域名,以实现对区块链地址、智能合约和其他资源的友好访问。
BNS合约具有以下功能:
域名注册与管理:用户可以通过BNS合约在区块链上注册和管理自己的域名。域名具有唯一性,可以与用户的区块链地址、智能合约或DApp关联。
域名解析:BNS合约支持将注册的域名解析为对应的区块链地址、智能合约或DApp,使得用户可以通过易于记忆的域名访问这些资源。
域名转移:用户可以将自己的域名转让给其他用户,实现域名的所有权转移。
BNS合约适用于以下场景:
区块链地址别名:用户可以将自己的区块链地址与注册的域名关联,实现对地址的友好访问。例如,通过将地址映射到域名,用户可以向
alice.cnbn
发送资产,而不是向复杂的区块链地址发送。智能合约访问:用户可以将注册的域名与智能合约关联,简化合约的访问和调用。例如,用户可以通过访问
mycontract.cnbn
来与智能合约进行交互。分布式应用(DApp)访问:开发者可以将注册的域名与自己的分布式应用关联,提高DApp的可用性和易用性。例如,用户可以通过访问
mydapp.cnbn
来使用分布式应用。域名交易:用户可以通过BNS合约进行域名的交易,包括购买、出售、转让和租赁等。
2.1. 合约标准
参照CMBNS合约标准实现 数据结构及详细方法见该文档
BNS 合约中的NFA的方法参考文档
BNS合约源码参考:https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-bns
2.2. 调用示例
2.2.1. 部署合约[admin证书部署]
./cmc client contract user create \
--contract-name=official_bns \
--runtime-type=DOCKER_GO \
--byte-code-path=./standard-bns.7z \
--version=1.0 \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true
2.2.2. 升级合约[admin证书升级]
./cmc client contract user upgrade \
--contract-name=official_bns \
--runtime-type=DOCKER_GO \
--byte-code-path=./standard-bns.7z \
--version=2.0 \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true
2.2.3. 获取BNS根域名
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Domain \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{}"
2.2.4. 注册BNS
BNS 注册,支持注册顶级域名,例如 sys.cnbn
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Register \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"owner\":\"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF111\",\"expirationTime\":\"4102415999\"}"
2.2.5. 子域名注册BNS
BNS 注册,先注册顶级域名再注册子域名,例如 abc.sys.cnbn
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Register \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"abc.test.cnbn\",\"owner\":\"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF111\",\"expirationTime\":\"4102415999\"}"
2.2.6. 续期BNS
BNS 续期,当BNS过期后可调用该方法对BNS进行续期
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Renew \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"expirationTime\":\"4102415999\"}"
2.2.7. 获取BNS详情
./cmc client contract user get \
--contract-name=official_bns \
--method=GetDomainInfo \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"domain\":\"test.cnbn\"}"
2.2.8. 获取BNS列表
./cmc client contract user get \
--contract-name=official_bns \
--method=GetDomainList \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"domainSearch\":\"test\",\"owner\":\"test\",\"start\":\"0\",\"count\":\"10\"}"
2.2.9. BNS 绑定
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Bind \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"resolveValue\":\"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF666\",\"resourceType\":\"1\"}"
2.2.10. BNS 解绑
./cmc client contract user invoke \
--contract-name=official_bns \
--method=Unbind \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"resourceType\":\"1\"}"
2.2.11. BNS 解析
./cmc client contract user get \
--contract-name=official_bns \
--method=Resolve \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"domain\":\"test.cnbn\",\"resourceType\":\"1\"}"
2.2.12. BNS 反向解析
./cmc client contract user get \
--contract-name=official_bns \
--method=ReverseResolve \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"resolveValue\":\"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF666\"}"
2.2.13. BNS 设置解析器
./cmc client contract user invoke \
--contract-name=official_bns \
--method=SetResolver \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"resolver\":\"self_bns\"}"
2.2.14. BNS 重置解析器
./cmc client contract user invoke \
--contract-name=official_bns \
--method=ResetResolver \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domain\":\"test.cnbn\",\"resourceType\":\"1\"}"
2.2.15. BNS 获取绑定的子域名列表
./cmc client contract user get \
--contract-name=official_bns \
--method=GetBindList \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"domainSearch\":\"tes\",\"start\":\"0\",\"count\":\"10\"}"
2.2.16. BNS 添加黑名单
./cmc client contract user invoke \
--contract-name=official_bns \
--method=AddBlackList \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domains\":[\"test.cnbn\"]}"
2.2.17. BNS 获取黑名单列表
./cmc client contract user get \
--contract-name=official_bns \
--method=GetBlackList \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--params="{\"domainSearch\":\"t\",\"start\":\"0\",\"count\":\"10\"}"
2.2.18. BNS 删除黑名单列表
./cmc client contract user invoke \
--contract-name=official_bns \
--method=DeleteBlackList \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--sync-result=true \
--params="{\"domains\":[\"test.cnbn\"]}"