创建链上账户
进行权证发行或者发放权证给其他用户时,发行方和其他用户均需要有一个链上身份即链上账户,通过该接口可以创建一个链上身份,创建链上身份前,需要业务自己做好用户的实名认证处理,创建链上身份后需要业务自己做好现实用户和链上用户的关联。
接口方法
antchain.caasplatform.extend.rights.create
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
service_id | 是 | STRING | - | cme2021034016405521c119 | 合约实例id |
account_name | 是 | STRING | - | testAccount | 账号名称 |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
address | STRING | 01f661a065ebc437fa99ec1f867bd4d2965109f4fcacc2ae136fd0d35738099e52b1448bac137c7792753585352f3f4c5fe6c7484c1e71ecfbd9b0886ef83e13 | 链上账户地址 |
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
//强烈建议不要把合约服务的AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下合约服务的安全。
//本示例通过从环境变量中读取合约服务的AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量CONTRACT_SERVICE_ACCESS_KEY_ID和CONTRACT_SERVICE_ACCESS_SECRET。
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient(System.getenv("CONTRACT_SERVICE_ACCESS_KEY_ID"),
System.getenv("CONTRACT_SERVICE_ACCESS_SECRET"));
CreateExtendRightsRequest createExtendRightsRequest = new CreateExtendRightsRequest()
.setServiceId("cme2021034016405521c119")
.setAccountName("testAccount");
client.createExtendRights(createExtendRightsRequest);
}
}
响应示例
{
"address": "01f661a065ebc437fa99ec1f867bd4d2965109f4fcacc2ae136fd0d35738099e52b1448bac137c7792753585352f3f4c5fe6c7484c1e71ecfbd9b0886ef83e13",
"resultCode": "OK",
"reqMsgId": "7571290506d849e58d6fe9877eab7c99",
"resultMsg": "OK"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |
创建资源文件
权证铸造时需要有相应的资源文件,资源文件本身是JSON串,用于描述使用的资源信息,示例如下:
{
"name": "测试权证",
"description": "这个只是测试使用的权证描述",
"attributes": [
"{\"author\":\"testUser\",\"tag\":\"这个是扩展补充数据\"}"
],
"fileId": "https://test.al.com/lxsrpdpj3cdcea44_4.23.jpeg"
}
这里面,重点包括资源文件的名称、资源文件的描述、资源文件图片信息(fileId),以及属性信息,属性信息包括作者和标签为tag的扩展信息。
其中资源文件图片信息是一个图片资源的URL地址,可以是自己的一个可供访问的URL资源地址,也可以通过OpenAPI来上传资源图片,由合约服务来托管相关图片,同时分配一个可供访问的资源图片URL地址。
如果传入的是一个非直接可访问的地址,为自己内部系统管理的一个文件ID,则在后续查询资源文件时进行转换。
接口方法
antchain.caasplatform.extend.rights.upload
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
name | 是 | STRING | - | 测试权证 | 资源名称 |
description | 否 | STRING | - | 这个只是测试使用的权证描述 | 资源描述 |
file_id | 是 | STRING | - | 略 | 资源文件id,如果使用合约服务进行文件托管,可以不设置文件ID,通过SDK提供的方式来做文件上传。如果文件自己管理,可以存放具体的可访问的文件URL(建议)或者文件ID,如果是文件ID,最后结果输出需要自己进行文件可访问地址转换 |
data | 否 | STRING | - | 这个是扩展补充数据 | 扩展字段 |
author | 是 | STRING | - | testUser | 作者或发行方,该部分主要用于资源描述文件使用,可用作页面展示 |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
rights_id | LONG | 略 | 数据资产id,后续资产铸造等都会用到 |
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 强烈建议不要把合约服务的AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下合约服务的安全。
// 本示例通过从环境变量中读取合约服务的AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量CONTRACT_SERVICE_ACCESS_KEY_ID和CONTRACT_SERVICE_ACCESS_SECRET。
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient(System.getenv("CONTRACT_SERVICE_ACCESS_KEY_ID"),
System.getenv("CONTRACT_SERVICE_ACCESS_SECRET"));
UploadExtendRightsRequest uploadExtendRightsRequest = new UploadExtendRightsRequest()
.setData("这个是扩展补充数据")
.setAuthor("testUser")
.setName("测试权证")
.setDescription("这个只是测试使用的权证描述");
//以下通过托管文件方式来进行资源文件创建,上传资源文件
File file = new File("资产文件相关位置");
uploadExtendRightsRequest.setFileObjectName(file.getName());
uploadExtendRightsRequest.setFileObject(new FileInputStream(file));
client.uploadExtendRights(uploadExtendRightsRequest);
}
}
如果不使用文件托管,资源文件自己进行管理,则需要对上述示例中的以下内容进行调整。
//以下通过托管文件方式来进行资源文件创建,上传资源文件
File file = new File("资产文件相关位置");
uploadExtendRightsRequest.setFileObjectName(file.getName());
uploadExtendRightsRequest.setFileObject(new FileInputStream(file));
可以调整为提供直接可供访问的URL文件地址的方式。
//以下提供直接可供访问的URL文件地址 uploadExtendRightsRequest.setFileId("https://test.al.com/lxsrpdpj3cdcea44_4.23.jpeg");
也可以调整为自己管理文件的方式
//以下提供自己管理文件的相关唯一ID,后续查询资源文件返回的数据中, //对FileID再进行转换,转为可供访问的文件URL uploadExtendRightsRequest.setFileId("asfainnerasda1313asda1r");
响应示例
{
"rightsId": 171922085292216,
"resultCode": "OK",
"reqMsgId": "70f7a36d3b3140c0b13a69de09747b4c",
"resultMsg": "OK"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |
权证铸造
权证铸造即权证发行,数字权证合约可以发行一批权证,这一批权证将共用一个tokenId
。
接口方法
antchain.caasplatform.general.rights.register
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
service_id | 是 | STRING | - | cme2021034016405521c119 | 合约实例id |
account | 是 | STRING | - | testAccount | 创建链上账户时指定的accountName |
id | 是 | LONG | - | 171922085292216 | 通过调用托管资源接口返回的资源id:rights_id |
amount | 是 | LONG | - | 100 | 要铸造的数据资产数量 |
data | 否 | STRING | - | 略 | 扩展参数 |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
tx_hash | STRING | c73c751472a9f9fbceef29665101377ba7e170b649b83db33b4634d4484ac626 | 合约调用交易哈希 |
block_number | LONG | 10000 | 合约调用交易块高 |
code | LONG | 0 | 合约调用的错误码,0表示成功 |
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 强烈建议不要把合约服务的AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下合约服务的安全。
// 本示例通过从环境变量中读取合约服务的AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量CONTRACT_SERVICE_ACCESS_KEY_ID和CONTRACT_SERVICE_ACCESS_SECRET。
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient(System.getenv("CONTRACT_SERVICE_ACCESS_KEY_ID"),
System.getenv("CONTRACT_SERVICE_ACCESS_SECRET"));
RegisterGeneralRightsRequest registerGeneralRightsRequest = new RegisterGeneralRightsRequest()
.setServiceId("cme2021034016405521c119")
.setAccount("testAccount")
.setAmount(100L)
.setId(171922085292216L);
client.registerGeneralRights(registerGeneralRightsRequest);
}
}
响应示例
{
"code": 0,
"blockNumber": 20929865,
"resultCode": "OK",
"txHash": "4309817fd1fb76e9b47b07619dc48cd14d0c8118553bb39f24ec629e935eb465",
"reqMsgId": "4715d546c5804bb9b16cf451357ed833",
"resultMsg": "OK"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |
权证转移
用户购买或者发行方赠送时,将权证从发行方转移到购买方。
接口方法
antchain.caasplatform.general.rights.pay
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
service_id | 是 | STRING | - | cme2021034016405521c119 | 合约实例id |
from | 是 | STRING | - | testAccount | 持有资产的链上账号名称 |
to | 是 | STRING | - | toUserAccount | 接收资产的链上账号名称 |
id | 是 | LONG | - | 171922085292216 | 数据资产ID |
amount | 是 | LONG | - | 10 | 要转增的数据资产数量 |
data | 否 | STRING | - | 略 | 扩展数据 |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
tx_hash | STRING | c73c751472a9f9fbceef29665101377ba7e170b649b83db33b4634d4484ac626 | 合约调用交易哈希 |
block_number | LONG | 10000 | 合约调用交易块高 |
code | LONG | 0 | 合约调用的错误码,0表示成功 |
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 强烈建议不要把合约服务的AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下合约服务的安全。
// 本示例通过从环境变量中读取合约服务的AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量CONTRACT_SERVICE_ACCESS_KEY_ID和CONTRACT_SERVICE_ACCESS_SECRET。
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient(System.getenv("CONTRACT_SERVICE_ACCESS_KEY_ID"),
System.getenv("CONTRACT_SERVICE_ACCESS_SECRET"));
PayGeneralRightsRequest payGeneralRightsRequest = new PayGeneralRightsRequest()
.setServiceId("cme2021034016405521c119")
.setFrom("testAccount")
.setTo("toUserAccount")
.setId(171922085292216L)
.setAmount(1L);
client.payGeneralRights(payGeneralRightsRequest);
}
}
响应示例
{
"code": 0,
"blockNumber": 20930209,
"resultCode": "OK",
"txHash": "d3e5f5bc657ba4fec8301abf8fc9aa4f4d4789af02489d9bae0e367be52cd71a",
"reqMsgId": "55ee78971a794e3bb82c56fed015808a",
"resultMsg": "OK"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |
资源文件查询
创建资源文件后即可调用该接口查询资源描述文件的内容。
接口方法
antchain.caasplatform.general.rights.get
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
service_id | 是 | STRING | - | cme2021034016405521c119 | 合约实例id |
token_id | 是 | LONG | - | 171922085292216 | 数据资产id |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
tx_hash | STRING | c73c751472a9f9fbceef29665101377ba7e170b649b83db33b4634d4484ac626 | 合约调用交易哈希 |
block_number | LONG | 10000 | 合约调用交易块高 |
code | LONG | 0 | 合约调用的错误码,0表示成功 |
result | STRING | https://caas-backend-prod.antdigital.com/caas/contract/extend/getAssetUri/171922085292216 | 资产对应资源文件的描述文件,为JSON字符串 |
针对result
,请求后将获得资源描述文件,文件的详细格式与说明参考创建资源文件。
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
// 强烈建议不要把合约服务的AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下合约服务的安全。
// 本示例通过从环境变量中读取合约服务的AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量CONTRACT_SERVICE_ACCESS_KEY_ID和CONTRACT_SERVICE_ACCESS_SECRET。
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient(System.getenv("CONTRACT_SERVICE_ACCESS_KEY_ID"),
System.getenv("CONTRACT_SERVICE_ACCESS_SECRET"));
GetGeneralRightsRequest getGeneralRightsRequest = new GetGeneralRightsRequest()
.setTokenId(171922085292216L)
.setServiceId("cme2021034016405521c119");
client.getGeneralRights(getGeneralRightsRequest);
}
}
响应示例
{
"result": "https://caas-backend-prod.antdigital.com/caas/contract/extend/getAssetUri/171922085292216",
"code": 0,
"blockNumber": 20929866,
"resultCode": "OK",
"txHash": "d8aa1ed871a6f1c3574f253b5cc67337e0f91cb300b2f5b3fde343858eb87832",
"reqMsgId": "25af2ab547e547f487e91b4747b45d14",
"resultMsg": "OK"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |
账户资产余额查询
查询某个账户的某个资产的拥有数量。
接口方法
antchain.caasplatform.general.rightsbalance.get
请求参数
名称 | 是否必选 | 类型 | 取值约束 | 示例值 | 描述 |
service_id | 是 | STRING | - | cme2021034016405521c119 | 合约实例id |
account | 是 | STRING | - | sltest24081303 | 账号的地址 |
id | 是 | LONG | - | 171922085292216 | 数据资产id |
返回参数
名称 | 类型 | 示例值 | 描述 |
req_msg_id | STRING | b20167e21a8d4cc2b5f1022d24f43815 | 请求唯一ID,用于链路跟踪和问题排查 |
result_code | STRING | OK | 结果码,一般OK表示调用成功 |
result_msg | STRING | OK | 请求返回的消息,如果失败则为失败的相关描述 |
tx_hash | STRING | c73c751472a9f9fbceef29665101377ba7e170b649b83db33b4634d4484ac626 | 合约调用交易哈希 |
block_number | LONG | 10000 | 合约调用交易块高 |
code | LONG | 0 | 合约调用的错误码,0表示成功 |
result | STRING | 资产对应资源文件的描述文件,为JSON字符串 |
针对result
,请求后将获得资源描述文件,文件的详细格式与说明参考创建资源文件。
接口示例
// This file is auto-generated, don't edit it. Thanks.
package com.antgroup.antchain.openapi.sample;
import com.aliyun.tea.*;
import com.antgroup.antchain.openapi.caasplatform.*;
import com.antgroup.antchain.openapi.caasplatform.models.*;
public class Client {
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.antgroup.antchain.openapi.caasplatform.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config();
// 您的AccessKey ID
config.accessKeyId = accessKeyId;
// 您的AccessKey Secret
config.accessKeySecret = accessKeySecret;
return new com.antgroup.antchain.openapi.caasplatform.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.antgroup.antchain.openapi.caasplatform.Client client = Client.createClient("accessKeyId", "accessKeySecret");
GetGeneralRightsbalanceRequest request = new GetGeneralRightsbalanceRequest();
request.setServiceId("cme2021034016405521c119");
request.setAccount("sltest24081303");
request.setId(171922085292216L);
GetGeneralRightsbalanceResponse response = caasClient.getGeneralRightsbalance(request);
}
}
响应示例
{
"blockNumber": 120384752,
"code": 0,
"reqMsgId": "043b28078b354266b4d04ae372bf65de",
"result": "21",
"resultCode": "OK",
"resultMsg": "OK",
"txHash": "6466ed67793ba561e672a93863ce2f0dc548cf2acc12dfe8e2602f36604ee3a5"
}
结果码
果码 | 说明 | 解决方案 |
OK | 成功结果码 |