2022年1月25日,区块链服务网络发展联盟(简称“BSN联盟”)推出了“BSN-DDC基础网络”(简称DDC网络)。DDC网络的推出,为NFT技术在我国的落地提供基础设施能力支撑,并为其合规发展保驾护航。
DDC(Distributed Digital Certificate)即分布式数字凭证,其属性和功能类似于NFT。NFT是现实或数字世界中某个事物在区块链上的数字化权益证明,尽管目前大多被用于数字艺术品版权领域,然而其本质上是一种区块链分布式数据库技术,并不带有特定的业务属性,它的潜在使用场景是非常广泛的,可应用在数字商品凭证、票证、账户管理、知识产权等各种领域。
DDC网络不直接向个人用户提供服务,而是向拥有DDC/NFT业务的平台方提供极其便捷的网络接入服务,以方便这些平台以极低的成本提供DDC/NFT的生成和管理服务。
DDC-SDK 是用于开发者与DDC合约交互的 API 工具。为了让运营方或各平台方对DDC-SDK整体设计有一个全面详细的了解,同时为项目的开发、测试、验证、交付等环节提供原始依据以及开发指导,BSN研习社推出BSN-DDC基础网络DDC SDK详细设计系列。分别从整体设计,DID功能设计,DDC权限管理、费用管理,官方合约BSN-DDC-721,官方合约 BSN-DDC-1155,交易查询、区块查询、签名事件,数据解析,示例等八个方面,全面详细的介绍DDC-SDK。
本期是系列文章第五期,官方合约BSN-DDC-1155。
3.2.4.1 安全生成
3.2.4.1.1 功能介绍
平台方或终端用户可以通过调用该方法进行DDC的安全生成。
3.2.4.1.2 API定义
方法定义:String safeMint(String sender,String to,BigInteger amount,String ddcURI,byte[] data);
合约方法:safeMint(address to,uint256 amount, string memory ddcURI, bytes memory data);
调用者:平台方、终端用户;
核心逻辑:
检查sender为标准备address格式;
检查接收者账户地址信息是否为空;
检查接收者账户地址格式是否正确;
检查需要生成的DDC数量是否大于0;
检查DDCURI信息是否为空;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
接收者账户 | to | String | 是 | |
DDC数量 | amount | BigInteger | 是 | |
DDCURI | ddcURI | String | 是 | |
附加数据 | data | byte[] | 否 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.2 批量安全生成
3.2.4.2.1 功能介绍
平台方或终端用户可以通过调用该方法进行DDC的批量安全生成。
3.2.4.2.2 API定义
方法定义:String safeMintBatch(String sender,String to,Multimap
合约方法:safeMintBatch(address to,uint256[] amounts, string[] ddcURIs, bytes memory data);
调用者:平台方、终端用户;
核心逻辑:
检查sender为标准备address格式;
检查接收者账户地址信息是否为空;
检查接收者账户地址格式是否正确;
检查生成的DDC数量集合大小是否大于0;
检查生成的DDC数量集合中每个DDC数量是否大于0;
检查生成的DDCURI集合大小是否大于0;
检查生成的DDCURI集合中每个DDCURI是否为空;
检查生成的DDC数量集合与DDCURI集合的大小是否相等;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
接收者账户 | to | String | 是 | |
DDC信息合计 | ddcInfo | Multimap | 是 | |
附加数据 | data | byte[] | 否 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.3 账户授权
3.2.4.3.1 功能介绍
DDC拥有者可以通过调用该方法进行账户授权,发起者需要是DDC的拥有者。
3.2.4.3.2 API定义
方法定义:
String setApprovalForAll(String sender,String operator, Boolean approved);
合约方法:
setApprovalForAll(address operator, bool approved);
调用者:DDC拥有者;
核心逻辑:
检查sender为标准备address格式;
检查授权者账户地址信息是否为空;
检查授权者账户地址格式是否正确;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
授权者账户 | operator | String | 是 | |
授权标识 | approved | Boolean | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.4 账户授权查询
3.2.4.4.1 功能介绍
运营方、平台方或终端用户可以通过调用该方法进行账户授权查询。
3.2.4.4.2 API定义
方法定义:
Boolean isApprovedForAll(String owner,String operator);
合约方法:
isApprovedForAll(address owner,address operator) returns (bool);
调用者:运营方、平台方或终端用户;
核心逻辑:
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查授权者账户地址信息是否为空;
检查授权者账户地址格式是否正确;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
拥有者账户 | owner | String | 是 | |
授权者账户 | operator | Boolean | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
Boolean | 是 |
3.2.4.5 安全转移
3.2.4.5.1 功能介绍
DDC拥有者或DDC授权者可以通过调用该方法进行DDC的转移。
3.2.4.5.2 API定义
方法定义:
String safeTransferFrom(String sender,String from,String to,BigInteger ddcId,BigInteger amount,byte[] data);
合约方法:
safeTransferFrom(address from,address to,uint256 ddcId,uint256 amount,bytes memory data);
调用者:DDC拥有者、DDC授权者;
核心逻辑:
检查sender为标准备address格式;
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查接收者账户地址信息是否为空;
检查接收者账户地址格式是否正确;
检查DDCID数值是否大于0;
检查DDC转移所对应的数量是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
拥有者账户 | from | String | 是 | |
接收者账户 | to | String | 是 | |
DDCID | ddcId | BigInteger | 是 | |
数量 | amount | BigInteger | 是 | DDCID所对应的数量 |
附加数据 | data | byte[] | 否 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.6 批量安全转移
3.2.4.6.1 功能介绍
DDC拥有者或DDC授权者可以通过调用该方法进行DDC的批量转移。
3.2.4.6.2 API定义
方法定义:
String safeBatchTransferFrom(String sender,String from,String to,Map
合约方法:
safeBatchTransferFrom(address from, address to,uint256[] ddcIds,uint256[] amounts,bytes memory data);
调用者:DDC拥有者、DDC授权者;
核心逻辑:
检查sender为标准备address格式;
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查接收者账户地址信息是否为空;
检查接收者账户地址格式是否正确;
检查转移的ddcs集合大小是否大于0;
检查转移的ddcs集合中每个DDCID是否大于0;
检查转移的ddcs集合中每个DDC数量是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
拥有者账户 | from | String | 是 | |
接收者账户 | to | String | 是 | |
拥有者DDCID集合 | ddcs | Map | 是 | |
附加数据 | data | byte[] | 否 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.7 销毁
3.2.4.7.1 功能介绍
DDC拥有者或DDC授权者可以通过调用该方法进行DDC的销毁。
3.2.4.7.2 API定义
方法定义:
String burn(String sender,String owner,BigInteger ddcId);
合约方法:burn(address owner,uint256 ddcId);
调用者:DDC拥有者、DDC授权者;
核心逻辑:
检查sender为标准备address格式;
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查需要销毁的DDCID集合长度是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
拥有者账户 | owner | String | 是 | |
DDCID | ddcId | BigInteger | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.8 批量销毁
3.2.4.8.1 功能介绍
DDC拥用者或DDC授权者可以通过调用该方法进行DDC的批量销毁。
3.2.4.8.2 API定义
方法定义:
String burnBatch(String sender,String owner,List
合约方法:
burnBatch(address owner,uint256[] ddcIds);
调用者:DDC拥用者、DDC授权者;
核心逻辑:
检查sender为标准备address格式;
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查需要销毁的DDCID集合大小是否大于0;
检查需要销毁的DDCID集合中每个DDCID数值是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
拥有者账户 | owner | String | 是 | |
DDCID集合 | ddcIds | List | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
3.2.4.9 查询数量
3.2.4.9.1 功能介绍
运营方、平台方以及终端用户可以通过调用该方法进行查询当前账户拥有的DDC的数量。
3.2.4.9.2 API定义
方法定义:
BigInteger balanceOf(String owner,BigInteger ddcId);
合约方法:
balanceOf(address owner, uint256 ddcId) returns (uint256);
调用者:运营方、平台方以及终端用户;
核心逻辑:
检查拥有者账户地址信息是否为空;
检查拥有者账户地址格式是否正确;
检查DDCID集合长度是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
拥有者账户 | owner | String | 是 | |
DDCID | ddcId | BigInteger | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
数量 | BigInteger | 是 | 拥有者账户所对应的DDCID所拥用的数量 |
3.2.4.10 批量查询数量
3.2.4.10.1 功能介绍
运营方、平台方以及终端用户可以通过调用该方法进行批量查询账户拥有的DDC的数量。
3.2.4.10.2 API定义
方法定义:
List
合约方法:
balanceOfBatch(address[] memory owners,uint256[] memory ddcIds) returns (uint256[] memory);
调用者:运营方、平台方以及终端用户;
核心逻辑:
检查ddcs集合大小是否大于0;
检查ddcs集合中拥有者账户地址信息是否为空;
检查ddcs集合中拥有者账户地址格式是否正确;
检查ddcs集合中每个DDCID数值是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
拥有者DDCID集合 | ddcs | Multimap | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
数量集合 | List | 是 | 拥有者账户所对应的每个DDCID所拥用的数量 |
3.2.4.11 获取DDCURI
3.2.4.11.1 功能介绍
运营方、平台方以及终端用户可以通过调用该方法进行查询当前DDC的资源标识符。
3.2.4.11.2 API定义
方法定义:String ddcURI(BigInteger ddcId);
合约方法:ddcURI(uint256 ddcId) returns (string memory);
调用者:运营方、平台方以及终端用户;
核心逻辑:
检查DDCID数值是否大于0;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
DDCID | ddcId | BigInteger | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
DDCURI | String | 是 |
3.2.4.12 URI设置
3.2.4.12.1 功能介绍
DDC拥有者或DDC授权者通过调用该方法对DDC的资源标识符进行设置。
3.2.4.12.2 API定义
方法定义:String setURI(String sender,String owner,BigInteger ddcId,String ddcURI);
合约方法:setURI(address owner,uint256 ddcId,string memory ddcURI);
调用者:DDC拥有者、DDC授权者;
核心逻辑:
检查sender为标准备address格式;
检查owner地址格式是否正确;
检查ddcId数值是否大于0;
检查ddcURI是否为空字符串;
检查签名事件是否被注册;
输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
调用者 | sender | String | 是 | 调用者地址 |
DDC拥有者 | owner | String | 是 | |
DDC唯一标识 | ddcId | BigInteger | 是 | |
DDC资源标识符 | ddcURI | String | 是 |
输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
String | 是 | 交易哈希 |
本文资料内容来源于BSN-DDC SDK详细设计-V1.0,GitHub地址为:
https://github.com/BSN-DDC/did-sdk
欲浏览更多信息,请您点击登录查看。