# 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合约进行域名的交易,包括购买、出售、转让和租赁等。 ## 合约标准 参照CMBNS合约标准实现 [数据结构及详细方法见该文档](https://git.code.tencent.com/ChainMaker/contracts/standard/blob/master/draft/CM-CS-231201-BNS.md) BNS 合约中的NFA的方法[参考文档]( https://git.chainmaker.org.cn/contracts/standard/-/blob/master/README.md) BNS合约源码参考:[https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-bns](https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-bns) ## 调用示例 ### 部署合约[admin证书部署] ```sh ./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 ```` ### 升级合约[admin证书升级] ```sh ./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 ``` ### 获取BNS根域名 ```sh ./cmc client contract user invoke \ --contract-name=official_bns \ --method=Domain \ --sdk-conf-path=./testdata/sdk_config_pk.yml \ --sync-result=true \ --params="{}" ``` ### 注册BNS BNS 注册,支持注册顶级域名,例如 sys.cnbn ```sh ./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\"}" ``` ### 子域名注册BNS BNS 注册,先注册顶级域名再注册子域名,例如 abc.sys.cnbn ```sh ./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\"}" ``` ### 续期BNS BNS 续期,当BNS过期后可调用该方法对BNS进行续期 ```sh ./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\"}" ``` ### 获取BNS详情 ```sh ./cmc client contract user get \ --contract-name=official_bns \ --method=GetDomainInfo \ --sdk-conf-path=./testdata/sdk_config_pk.yml \ --params="{\"domain\":\"test.cnbn\"}" ``` ### 获取BNS列表 ```sh ./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\"}" ``` ### BNS 绑定 ```sh ./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\"}" ``` ### BNS 解绑 ```sh ./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\"}" ``` ### BNS 解析 ```sh ./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\"}" ``` ### BNS 反向解析 ```sh ./cmc client contract user get \ --contract-name=official_bns \ --method=ReverseResolve \ --sdk-conf-path=./testdata/sdk_config_pk.yml \ --params="{\"resolveValue\":\"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF666\"}" ``` ### BNS 设置解析器 ```sh ./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\"}" ``` ### BNS 重置解析器 ```sh ./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\"}" ``` ### BNS 获取绑定的子域名列表 ```sh ./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\"}" ``` ### BNS 添加黑名单 ```sh ./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\"]}" ``` ### BNS 获取黑名单列表 ```sh ./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\"}" ``` ### BNS 删除黑名单列表 ```sh ./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\"]}" ```