
# SDK概述
数字资产链开发工具包（DAC SDK，Digital Asset Chain Software Development Kit）是对DAC服务提供的REST API进行的封装，以简化用户的开发工作。目前提供40+业务和工具接口。用户在开发时只需要关注自己的业务逻辑，调用相应接口封装并发送消息即可，不需要关注底层区块链消息的封装细节，以及消息发送接收的具体过程。由于区块链为分布式系统，对同一链上资源进行并发操作会导致一致性冲突，出现交易上链失败等异常情况，因此对同一资源的多个操作需串行执行，本系统在交易平峰时，对同一资源的操作需要等待落块周期（约3s）完成后进行下一个操作。
#### SDK逻辑结构
SDK主要提供身份管理、数字资产管理模块及相应的配套组件。基于业界标准实现区块链上的数字资产管理模块，包括ERC721协议、ERC1155协议、ERC165协议、ERC998协议等功能接口，客户可根据业务需求使用一种或多种标准协议管理数字资产。配套组件主要包含密钥生成\&证书签发、配置文件解析、加密通讯等功能接口。
- 密钥生成\&证书签发 数字资产的铸造和流转都需要基于区块链上的用户。每个用户都有一套对应的证书和私钥，可以真正保护自己的资产所有权。SDK提供接口，用户在配置文件中配入组织CA的私钥，即可本地生成用户密钥和与之对应的用户证书。
  
- 身份管理 链上用户支持以下身份标识符：
  地址标识：通用模式。地址由用户公钥计算得到，在链上标识用户身份，完成数字资产管理。
  

- 数字资产集合管理 数字资产集合用于标识一类相似的数字资产，每一个数字资产都需要归属于某一个资产集合。数字资产集合的创建者可以管理集合信息，并在集合下铸造数字资产，他人可以查询集合信息。主要接口功能包括（详细参看接口列表）：
  - 创建数字资产集合（collection）：每一个集合中包含0个或多个数字资产。
  
  - 修改集合信息：创建者可以修改集合的名称和缩写。
  
  - 查询资产集合的名称：通过集合标识查询集合名称。
  
  - 查询资产集合的缩写：通过集合标识查询集合缩写。
  
  - 获取数字资产集合列表：通过该接口查询区块链上所有集合的标识。
   
- ERC721协议 根据业界标准实现了满足ERC721协议的接口，可通过该协议接口进行单一集合的数字资产管理。主要接口功能包括：
  - 铸造数字资产（tokenId）：每个数字资产必须归属于某个"资产集合"，编号从0开始。资产类型包括图片、视频、音频、3D模型等。
  
  - 数字资产流转：数字资产的所有权可以在用户身份标识之间流转。
  
  - 设置资产授权用户：所有者可为每个数字资产指定一个授权用户，授权用户拥有数字资产的流转操作权限。
  
  - 设置集合级授权用户：所有者可为某个"资产集合"指定一个授权用户，授权用户拥有该集合下所有者的每个数字资产的流转操作权限。
  
  - 查询数字资产：根据用户或者数字资产标识查询资产详情。
   
- ERC1155协议 根据业界标准实现了满足ERC1155协议的接口，可通过该协议接口进行多集合的数字资产管理，并且相较于ERC721接口，提供了批量操作数字资产的能力。主要接口功能包括：
  - 批量铸造数字资产：为某个"资产集合"，批量铸造1个或多个数字资产。
  
  - 批量流转数字资产：所有者可以流转属于不同或相同集合的若干个数字资产的所有权。
  
  - 批量查询数字资产所有权：批量查询多个用户是否拥有相对应的数字资产的所有权。
  
  - 设置用户级授权用户：用户可指定一个授权用户，授权用户拥有任意"资产集合"下该用户拥有的数字资产的流转操作权限。
   
- ERC998协议 根据业界标准实现了满足ERC998协议的接口，可通过该协议接口让一个可组合数字资产拥有其它若干数字资产，转移可组合数字资产就是转移其所拥有的整个层级结构和所属关系。主要接口功能包括：
  - 铸造可组合资产：为某个"资产集合"，铸造一个可组合资产，其为一种拥有"特殊能力"的资产，除此之外与其它资产并无区别，亦可调用ERC721或ERC1155协议进行数字资产管理。
  
  - 加入可组合资产：数字资产的所有者可将该资产加入到某一集合下的可组合资产中。
  
  - 拆分子资产给用户：可组合资产的所有者可将其中的子资产转移给其它用户。
  
  - 拆分子资产给其它可组合资产：可组合资产的所有者可将其中的子资产转移给其它可组合资产。
   
- 配置文件管理 配置可通过数字资产链控制台下载获取，内容参见[图1]。
  ![](https://support.huaweicloud.com/devg-dac/public_sys-resources/note_3.0-zh-cn.png)
  1. 登录[数字资产链控制台](https://console.huaweicloud.com/dac/?)。
  
  2. 左侧导航栏选择"调用指南"，在调用指南页面，单击"配置文件下载"。 ![](https://support.huaweicloud.com/devg-dac/zh-cn_image_0000001618024973.png "点击放大")
     
  
  3. 输入证书存放路径，单击"下载"。 ![](https://support.huaweicloud.com/devg-dac/zh-cn_image_0000001567785994.png "点击放大")
     
   
  - client：SDK客户端与数字资产服务通过https链接，需要配置服务器签发的tls证书及密钥，请妥善保管。
  
  - identities：数字资产用户列表，开发者可通过"密钥生成\&证书签发"接口生成任意个用户，并将绝对路径填入配置文件（用户名可自定义）。
  
  - service：数字资产平台服务端地址。
  
  - chainCfg：区块链相关配置。
  
  - orgCa:：组织Ca的信息，用于签发用户证书。
    图1数字资产平台SDK配置文件 conf.yaml   
    ![](https://support.huaweicloud.com/devg-dac/zh-cn_image_0000001235774426.png "点击放大") 
   
 
#### 基于SDK开发流程
基于SDK开发客户端需要执行以下步骤。
1. 初始化：创建SDK实例对象，然后进行初始化（初始化会加载默认的配置用户，建议仅用于测试，调试使用）。
2. 生成并配置用户：创建用户的私钥和证书，根据业务需要，可以提前创建也可以在用户注册时创建。做业务调用时需要配置当前SDK期望使用的用户。
3. 创建数字资产集合。
4. 铸造数字资产。
5. 数字资产流转及查询等。 
   可根据业务需要使用SDK中的功能接口。
   
   
 
DAC提供Java、Go以及PHP语言的SDK供开发者使用，参考如下：
表1DAC SDK各语言开发指南 
| 语言   | 开发指南                                                                |
|:---|:---|
| Go   | [Go](https://support.huaweicloud.com/devg-dac/dac_devg_0004.html)   |
| Java | [Java](https://support.huaweicloud.com/devg-dac/dac_devg_0038.html) |
| PHP  | [PHP](https://support.huaweicloud.com/devg-dac/dac_devg_0114.html)  |
   
