数据共享交换资产化

数据共享交换

基于区块链实现的数据资源合约,完成数据的共享交换. 数据资源合约在内部调用数据加工合约,数据传输合约和数据归集合约,完成数据的归集,传输,加工和展示.如果包含文件附件,返回IPFS地址.
整体步骤如下:

  • 1.数据资源合约执行GetData合约方法,调用数据加工合约的Working方法
  • 2.数据加工合约执行Working合约方法,调用数据传输合约的transmission方法,使用私钥对数据解密,对数据Hash校验,格式转化数据清洗等.
  • 3.数据传输合约执行transmission方法,调用数据采集合约的Gather方法,采集数据,使用公钥加密
  • 4.数据采集合约执行Gather方法,执行数据采集逻辑

合约标准:
必须要有以上所描述的四个合约按照合约执行顺序执行,以上四个合约除了合约内执行的方法外还应包括以下所述所有方法. 合约必须包含

  • 1.获取执行步骤的方法,方法名:GetContractStep
  • 2.获取资源响应格式的合约方法,方法名:GetRespFormat
  • 3.获取响应数据全量数据格式的合约方法,方法名:GetFullDataFormat
  • 4.获取合约请求参数格式的合约方法,方法名:GetParamsFormat
  • 5.获取合约开放条件的合约方法,方法名:GetOpenCondition
  • 6.数据铸造NFT的方法,方法名:MintNFT

获取执行步骤合约的方法

方法名:GetContractStep 数据共享交换使用到的合约信息,返回每个合约的节点名.链名.合约名.所属资源等参数.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{   
    index:{
    "NodeHost":"所属节点主机(string类型)",
    "ChanName":"链名称(string类型)",
    "Name":"合约名(string类型)",
    "Res":"所属资源(string类型)",
    "Ext":"扩展属性(string类型)"
    }	
    
}

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{   
    0:{
      "NodeHost":"192.168.32.121:37101",
      "ChanName":"xuper",
      "Name":"res_dir",
      "Res":"xxx",
      "Ext":"xxx"
    },
    1:{
      "NodeHost":"192.168.32.121:37101",
      "ChanName":"xuper",
      "Name":"data_working",
      "Res":"xxx",
      "Ext":"xxx"
    },
    2:{
      "NodeHost":"192.168.32.121:37101",
      "ChanName":"xuper",
      "Name":"data_tran",
      "Res":"xxx",
      "Ext":"xxx"
    },
    3:{
      "NodeHost":"192.168.32.121:37101",
      "ChanName":"xuper",
      "Name":"data_gather",
      "Res":"xxx",
      "Ext":"xxx"
    }		
}

获取资源响应格式的合约方法

方法名:GetRespFormat 获取合约响应的数据格式,用于说明本合约的主方法的返回格式,例如json,string,file等,根据业务场景约定返回格式

响应数据全量数据格式的合约方法

方法名:GetFullDataFormat 获取合约主方法返回的数据格式结构,包含上链数据和返回的数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
 "statusCode":"状态码(string类型)",
 "errorMessage":"错误信息(string类型)",
 "dataFormat":"数据格式(string类型)",
 "onChainData":{
    "key1":"数据1(string类型)" ,
    "key2":"数据2(string类型)"
  },
 "returnData":{
    "key1":"数据1(string类型)" ,
    "key2":"数据2(string类型)"
  }
}
  • statusCode:本次处理的状态码,成功是success,失败是error
  • errorMessage:错误状态时,记录错误的信息
  • dataFormat:返回的数据格式,一般是json格式
  • onChainData:上链的数据,使用json格式,记录上链的key和value
  • returnData:返回数据的格式,格式和dataFormat对应,一般是json格式.

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
 "statusCode":"success",
 "errorMessage":"",
 "dataFormat":"json",
 "onChainData":{
    "name":"数据1(string类型)" ,
    "data":"数据2(string类型)"
  },
 "returnData":{
    "name":"数据1(string类型)" ,
    "data":"数据2(string类型)"
  }
}

获取请求参数格式的方法

方法名:GetParamsFormat 获取合约主方法的调用参数格式

1
2
3
{
"数据名称":"数据说明(数据类型)"
}

例如:

1
2
3
4
5
{
 "id":"主键(string类型)",
 "name":"名称(string类型)",
 "job":"任务作业名称(string类型)"
}

获取合约开放条件的方法

方法名:GetOpenCondition
返回合约主方法开放的条件,类型为字符串例如:获取授权或者是管理员

数据铸造NFT的方法

方法名:MintNFT
把数据内容铸造成NFT藏品,获取NFT藏品之后才可以正常调用数据资产参数如下:

  • tokenID:铸造的NFT藏品ID,每个数字资产商品保持唯一,(int64类型)
  • amount:铸造的数量(int类型)
  • data:藏品内容([]byte字节数组类型) 返回值为 error错误信息字符串.

NFT资产交易

允许在同一个智能合约中无限量地重复使用同质化或者非同质化的Token,数据资源合约调用NFT合约,实现数据资源的NFT铸造基于ERC-1155合约改造,统一使用Action方法作为入口,实现NFT铸造,转移,销毁等功能

Action入口方法

方法名:Action
NFT的入口方法,action参数标识需要执行的动作,其他参数是动作方法需要的参数

获取NFT资产的uri方法

返回一个 https://token-cdn-domain/{id}.json 字符串,id会使用tokenID 替换成64位字符串, 不够使用0补齐,类似https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json json文件内是Token的额外扩展信息,

调用Action 方法,传递参数action=uri,具体参数如下:

1
2
3
4
{
  "action":"uri",
  "tokenID":"NFT资产的TokenID(int64类型)"
}

例如:

1
2
3
4
{
  "action":"uri",
  "tokenID":12635527497359748
}

铸造NFT Token的方法

to 账户铸造数量 amount 个的 tokenID NFT资产
调用Action 方法,传递参数action=mint,具体参数如下:

1
2
3
4
5
6
{
  "action":"mint",
  "to":"铸造token的账户地址(string类型)",
  "amount":"铸造的token数量(int64类型)",
  "tokenID":"NFT资产的TokenID(int64类型)"
}

例如:

1
2
3
4
5
6
{
  "action":"mint",
  "to":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "amount":1000,
  "tokenID":12635527497359748
}

销毁NFT Token的方法

销毁 from 账户 amounttokenID NFT资产调用Action 方法,传递参数action=burn,具体参数如下:

1
2
3
4
5
6
{
  "action":"burn",
  "from":"销毁token的账户地址(string类型)",
  "amount":"销毁的token数量(int64类型)",
  "tokenID":"NFT资产的TokenID(int64类型)"
}

例如:

1
2
3
4
5
6
{
  "action":"burn",
  "from":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "amount":1000,
  "tokenID":12635527497359748
}

转移NFT Token的方法

amounttokenIDfrom 账户转移到 to账户 (安全的)
调用者必须得到授权才可以从参数 from 指定的账户转账token
如果参数 to 设定的地址为零地址,则交易必须回滚
对参数 tokenID 所指的token,如果其转出账户的余额小于参数 amount 所定义的金额,则交易必须回滚
如果转账交易出现任何其它错误,交易也必须回滚
调用Action 方法,传递参数action=safeTransferFrom,具体参数如下:

1
2
3
4
5
6
7
8
{
  "action":"safeTransferFrom",
  "from":"需要转移token的账户地址(string类型)",
  "to":"接受token的账户地址(string类型)",
  "amount":"销毁的token数量(int64类型)",
  "tokenID":"NFT资产的TokenID(int64类型)",
  "data":"参数数据([]byte字节数组)"
}

例如:

1
2
3
4
5
6
7
8
{
  "action":"safeTransferFrom",
  "from":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "to":"bQJ4yoQdAkrNqnzbDcETJGQTr5mJpf4YB",
  "amount":1000,
  "tokenID":12635527497359748,
  "data":[]
}

获取账户余额的方法

获取 owner 账户中的token余额,需要授权才能查询账户余额调用Action 方法,传递参数action=balanceOf,具体参数如下:

1
2
3
4
5
{
  "action":"balanceOf",
  "owner":"token持有者账户(string类型)",
  "tokenID":"NFT资产的TokenID(int64类型)"
}

例如:

1
2
3
4
5
{
  "action":"balanceOf",
  "owner":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "tokenID":12635527497359748
}

授权管理NFT资产方法

授权或撤销其他操作者to管理其所有的token 调用Action 方法,传递参数action=setApprovalForAll,具体参数如下:

1
2
3
4
5
{
  "action":"setApprovalForAll",
  "to":"被授权人账户(string类型)",
  "approved":"true 给{to}授权,false 撤销 {to}授权(bool 布尔类型)"
}

例如:

1
2
3
4
5
{
  "action":"setApprovalForAll",
  "to":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "approved":true
}

获取NFT授权管理状态

owner 资产给 operator 的授权状态,返回bool值调用Action 方法,传递参数action=isApprovedForAll,具体参数如下:

1
2
3
4
5
{
  "action":"isApprovedForAll",
  "owner":"NFT拥有人的账户(string类型)",
  "operator":"被授权人账户(string类型)"
}

例如:

1
2
3
4
5
{
  "action":"isApprovedForAll",
  "owner":"TeyyPLpp9L7QAcxHangtcHTu7HUZ6iydY",
  "operator":"bQJ4yoQdAkrNqnzbDcETJGQTr5mJpf4YB"
}