jjzjj

BSN-DDC基础网络DDC SDK详细设计五:官方合约BSN-DDC-1155

BSN研习社 2024-02-07 原文

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.1  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);

  • 调用者:平台方、终端用户;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查接收者账户地址信息是否为空;

  3. 检查接收者账户地址格式是否正确;

  4. 检查需要生成的DDC数量是否大于0;

  5. 检查DDCURI信息是否为空;

  6. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
接收者账户toString
DDC数量amountBigInteger
DDCURIddcURIString
附加数据databyte[]
  • 输出参数:

字段名字段类型必传备注
String交易哈希

3.2.4.2  批量安全生成

3.2.4.2.1   功能介绍

平台方或终端用户可以通过调用该方法进行DDC的批量安全生成。

3.2.4.2.2   API定义

  • 方法定义:String safeMintBatch(String sender,String to,Multimap<BigInteger,String> ddcInfo,byte[] data);

  • 合约方法:safeMintBatch(address to,uint256[] amounts, string[] ddcURIs, bytes memory data);

  • 调用者:平台方、终端用户;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查接收者账户地址信息是否为空;

  3. 检查接收者账户地址格式是否正确;

  4. 检查生成的DDC数量集合大小是否大于0;

  5. 检查生成的DDC数量集合中每个DDC数量是否大于0;

  6. 检查生成的DDCURI集合大小是否大于0;

  7. 检查生成的DDCURI集合中每个DDCURI是否为空;

  8. 检查生成的DDC数量集合与DDCURI集合的大小是否相等;

  9. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
接收者账户toString
DDC信息合计ddcInfoMultimap<BigInteger,String>
附加数据databyte[]
  • 输出参数:

字段名字段类型必传备注
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拥有者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查授权者账户地址信息是否为空;

  3. 检查授权者账户地址格式是否正确;

  4. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
授权者账户operatorString
授权标识approvedBoolean
  • 输出参数:

字段名字段类型必传备注
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);

  • 调用者:运营方、平台方或终端用户;

  • 核心逻辑:

  1. 检查拥有者账户地址信息是否为空;

  2. 检查拥有者账户地址格式是否正确;

  3. 检查授权者账户地址信息是否为空;

  4. 检查授权者账户地址格式是否正确;

  5. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
拥有者账户ownerString
授权者账户operatorBoolean
  • 输出参数:

字段名字段类型必传备注
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授权者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查拥有者账户地址信息是否为空;

  3. 检查拥有者账户地址格式是否正确;

  4. 检查接收者账户地址信息是否为空;

  5. 检查接收者账户地址格式是否正确;

  6. 检查DDCID数值是否大于0;

  7. 检查DDC转移所对应的数量是否大于0;

  8. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
拥有者账户fromString
接收者账户toString
DDCIDddcIdBigInteger
数量amountBigIntegerDDCID所对应的数量
附加数据databyte[]
  • 输出参数:

字段名字段类型必传备注
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<BigInteger,BigInteger> ddcs, byte[] data);

  • 合约方法:

    safeBatchTransferFrom(address from, address to,uint256[] ddcIds,uint256[] amounts,bytes memory data);

  • 调用者:DDC拥有者、DDC授权者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查拥有者账户地址信息是否为空;

  3. 检查拥有者账户地址格式是否正确;

  4. 检查接收者账户地址信息是否为空;

  5. 检查接收者账户地址格式是否正确;

  6. 检查转移的ddcs集合大小是否大于0;

  7. 检查转移的ddcs集合中每个DDCID是否大于0;

  8. 检查转移的ddcs集合中每个DDC数量是否大于0;

  9. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
拥有者账户fromString
接收者账户toString
拥有者DDCID集合ddcsMap<BigInteger,BigInteger>
附加数据databyte[]
  • 输出参数:

字段名字段类型必传备注
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授权者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查拥有者账户地址信息是否为空;

  3. 检查拥有者账户地址格式是否正确;

  4. 检查需要销毁的DDCID集合长度是否大于0;

  5. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
拥有者账户ownerString
DDCIDddcIdBigInteger
  • 输出参数:

字段名字段类型必传备注
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<BigInteger> ddcIds);

  • 合约方法:

    burnBatch(address owner,uint256[] ddcIds);

  • 调用者:DDC拥用者、DDC授权者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查拥有者账户地址信息是否为空;

  3. 检查拥有者账户地址格式是否正确;

  4. 检查需要销毁的DDCID集合大小是否大于0;

  5. 检查需要销毁的DDCID集合中每个DDCID数值是否大于0;

  6. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
拥有者账户ownerString
DDCID集合ddcIdsList<BigInteger>
  • 输出参数:

字段名字段类型必传备注
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);

  • 调用者:运营方、平台方以及终端用户;

  • 核心逻辑:

  1. 检查拥有者账户地址信息是否为空;

  2. 检查拥有者账户地址格式是否正确;

  3. 检查DDCID集合长度是否大于0;

  4. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
拥有者账户ownerString
DDCIDddcIdBigInteger
  • 输出参数:

字段名字段类型必传备注
数量BigInteger拥有者账户所对应的DDCID所拥用的数量

3.2.4.10 批量查询数量

3.2.4.10.1 功能介绍

运营方、平台方以及终端用户可以通过调用该方法进行批量查询账户拥有的DDC的数量。

3.2.4.10.2 API定义

  • 方法定义:

    List<BigInteger> balanceOfBatch(Multimap<String,BigInteger>ddcs);

  • 合约方法:

    balanceOfBatch(address[] memory owners,uint256[] memory ddcIds) returns (uint256[] memory);

  • 调用者:运营方、平台方以及终端用户;

  • 核心逻辑:

  1. 检查ddcs集合大小是否大于0;

  2. 检查ddcs集合中拥有者账户地址信息是否为空;

  3. 检查ddcs集合中拥有者账户地址格式是否正确;

  4. 检查ddcs集合中每个DDCID数值是否大于0;

  5. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
拥有者DDCID集合ddcsMultimap<String,BigInteger>
  • 输出参数:

字段名字段类型必传备注
数量集合List<BigInteger>拥有者账户所对应的每个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);

  • 调用者:运营方、平台方以及终端用户;

  • 核心逻辑:

  1. 检查DDCID数值是否大于0;

  2. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
DDCIDddcIdBigInteger
  • 输出参数:

字段名字段类型必传备注
DDCURIString

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授权者;

  • 核心逻辑:

  1. 检查sender为标准备address格式;

  2. 检查owner地址格式是否正确;

  3. 检查ddcId数值是否大于0;

  4. 检查ddcURI是否为空字符串;

  5. 检查签名事件是否被注册;

  • 输入参数:

字段名字段类型必传备注
调用者senderString调用者地址
DDC拥有者ownerString
DDC唯一标识ddcIdBigInteger
DDC资源标识符ddcURIString
  • 输出参数:

字段名字段类型必传备注
String交易哈希

本文资料内容来源于BSN-DDC SDK详细设计-V1.0,GitHub地址为:

https://github.com/BSN-DDC/did-sdk

欲浏览更多信息,请您点击登录查看。

有关BSN-DDC基础网络DDC SDK详细设计五:官方合约BSN-DDC-1155的更多相关文章

  1. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  2. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  7. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  8. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  9. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  10. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

随机推荐