2. BNS区块链域名合约

区块链域名服务(BlockChain Naming Service,简称BNS),是一个基于区块链技术的去中心化域名解决方案,旨在为用户提供安全、可靠且易于使用的区块链域名服务。类似于传统互联网的DNS服务,BNS合约允许用户在区块链上注册和管理域名,以实现对区块链地址、智能合约和其他资源的友好访问。

BNS合约具有以下功能:

  1. 域名注册与管理:用户可以通过BNS合约在区块链上注册和管理自己的域名。域名具有唯一性,可以与用户的区块链地址、智能合约或DApp关联。

  2. 域名解析:BNS合约支持将注册的域名解析为对应的区块链地址、智能合约或DApp,使得用户可以通过易于记忆的域名访问这些资源。

  3. 域名转移:用户可以将自己的域名转让给其他用户,实现域名的所有权转移。

BNS合约适用于以下场景:

  1. 区块链地址别名:用户可以将自己的区块链地址与注册的域名关联,实现对地址的友好访问。例如,通过将地址映射到域名,用户可以向alice.cnbn发送资产,而不是向复杂的区块链地址发送。

  2. 智能合约访问:用户可以将注册的域名与智能合约关联,简化合约的访问和调用。例如,用户可以通过访问mycontract.cnbn来与智能合约进行交互。

  3. 分布式应用(DApp)访问:开发者可以将注册的域名与自己的分布式应用关联,提高DApp的可用性和易用性。例如,用户可以通过访问mydapp.cnbn来使用分布式应用。

  4. 域名交易:用户可以通过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\"]}"