Commit 62e4848f authored by tangtuo's avatar tangtuo

版权相关功能开发

parent 7968f009
......@@ -102,11 +102,4 @@ public class NftController {
List<NftTransferRecordVo> list = nftTransferRecordService.getTransferRecordList(nftHash, fromAddress, toAddress, startDate, endDate);
return ResponseModel.success(new PageInfo<>(list));
}
@GetMapping("/send")
public String send(@RequestParam String msg) {
rabbitTemplate.convertAndSend("copyright.direct", "copyright.apply", msg);
log.info("发送消息:{}", msg);
return "SUCCESS";
}
}
package com.fzm.admin.listener;
import cn.fzm.chain.simplesdk.client.ParaChainClient;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.fzm.common.config.RabbitMQConfig;
import com.fzm.common.entity.CopyrightApply;
import com.fzm.common.entity.Nft;
import com.fzm.common.entity.dto.CopyrightQueryRequest;
import com.fzm.common.entity.dto.CopyrightQueryResponse;
import com.fzm.common.entity.dto.CopyrightResponse;
import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.enums.CopyrightApplyState;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.CopyrightProperties;
import com.fzm.common.service.CopyrightApplyService;
import com.fzm.common.service.NftService;
import com.fzm.common.utils.CopyrightSignUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.TreeMap;
import java.util.concurrent.ExecutionException;
/**
* @author tangtuo
......@@ -30,13 +40,30 @@ public class CopyrightLister {
@Resource
private CopyrightProperties copyrightProperties;
@Resource
private RabbitTemplate rabbitTemplate;
@Resource
private CopyrightApplyService copyrightApplyService;
@Resource
private ParaChainClient paraChainClient;
@Resource
private NftService nftService;
private static String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
@Value("${chain.para.cAddr}")
private String contractAddr;
/**
* 主动查询当前流水号对应的版权审批结果
*
* @param serial_code
*/
@RabbitListener(queues = RabbitMQConfig.COPYRIGHT_QUEUE)
public void listerCopyrightApply(String serial_code) {
public void listerCopyrightApply(String serial_code) throws ExecutionException, InterruptedException {
log.info("监听者接收消息, 流水号为: {}", serial_code);
CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId());
TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret());
......@@ -56,16 +83,55 @@ public class CopyrightLister {
if (!copyrightResponse.isSuccess()) {
throw GlobalException.newException(ResultCode.COPYRIGHT_FAILED, copyrightResponse.getMessage());
}
// 如果审核结果还是审核中的话,就继续把流水号丢进延时队列,2小时后再查一次
// 审核成功或失败的话,更新审核结果
//审核状态(0:未提交,1:待审核,2:同意,3:驳回,4:已提交,5:待终审,6:审核通过)
if (!copyrightResponse.getAudit_status().equals(3) && !copyrightResponse.getAudit_status().equals(6)) {
// 审核中, 需要把当前流水号丢进死信队列, 6小时后再去查询
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
} else {
CopyrightApply copyrightApply = copyrightApplyService.getBySerialNum(serial_code);
if (copyrightResponse.getAudit_status().equals(6)) {
// 审核成功
String nftHash = copyrightApply.getNftHash();
Nft nft = nftService.getByNftHash(nftHash);
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), nft.getPublishAddress());
NftVo detail = nftService.getDetail(nftHash);
String newTokenInfo = appendTokenInfo(tokenInfo, detail.getCopyright());
String hash = paraChainClient.evmSetTokenInfo(abi, contractAddr, 0l, nft.getTokenId(), newTokenInfo, nft.getPublishAddress(), null, true);
String realTxHash = paraChainClient.getRealTxHashFromGrp(hash);
copyrightApply.setEvidenceHash(realTxHash);
copyrightApply.setEvidenceDate(DateUtil.parse(copyrightResponse.getApply_time(), "yyyy-MM-dd"));
copyrightApply.setRegisterCode(copyrightResponse.getCertificate().getRegister_code());
copyrightApply.setRegisterState(CopyrightApplyState.SUCCEEDED.getCode());
} else {
// 审核失败
copyrightApply.setRegisterState(CopyrightApplyState.FAILED.getCode());
}
copyrightApplyService.updateById(copyrightApply);
}
}
private TreeMap<String, String> beanToMap(CopyrightQueryRequest request, String app_secret) {
TreeMap<String, String> map = JSONUtil.toBean(JSONUtil.toJsonStr(request), new TypeReference<TreeMap<String, String>>() {
}, true);
map.put("biz_content", JSONUtil.toJsonStr(request.getBiz_content()));
map.put("app_secret", app_secret);
return map;
}
private String appendTokenInfo(String tokenInfo, NftVo.Copyright copyright) {
StringBuilder stringBuilder = new StringBuilder(tokenInfo);
stringBuilder.append("&").
append("evidencer").append("=").append(copyright.getEvidencer()).append("&").
append("opusName").append("=").append(copyright.getOpusName()).append("&").
append("opusType").append("=").append(copyright.getOpusType()).append("&").
append("author").append("=").append(copyright.getAuthor()).append("&").
append("copyrightOwner").append("=").append(copyright.getCopyrightOwner()).append("&").
append("registerCode").append("=").append(copyright.getRegisterCode());
return stringBuilder.toString();
}
public static void main(String[] args) {
String param = "{\"charset\":\"utf-8\",\"biz_content\":\"{\\\"serial_code\\\":\\\"21122777035\\\"}\",\"sign\":\"0447d87137e87ab5533821688d70da2c\",\"version\":\"1.0\",\"app_id\":\"289391457858\",\"sign_type\":\"md5\",\"timestamp\":\"2021-12-27 14:51:00\"}";
String response = HttpUtil.post("https://p.yareiot.com/ccct/api/copyright/query", param, 10000);
System.out.println(response);
}
}
......@@ -97,7 +97,8 @@ aliyun:
encrypt-bucket: test-nft-2
copyright:
url: https://p.yareiot.com/ccct/api/copyright/create
apply-url: https://p.yareiot.com/ccct/api/copyright/create
query-url: https://p.yareiot.com/ccct/api/copyright/query
app-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
......@@ -79,14 +79,15 @@ swagger:
chain:
para:
rpc-url: http://146.56.197.42:12021
withhold-addr: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withhold-key: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
rpcUrl: http://146.56.197.42:12021
tokenManager: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
tokenManagerKey: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
withhold: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withholdKey: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
title: user.p.mall.
admin: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
admin-key: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
contract-name: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
contract-address: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
cName: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
cAddr: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
aliyun:
oss:
......
spring:
profiles:
active: nj
active: local
application:
name: ly-admin
......
......@@ -68,7 +68,7 @@
<dependency>
<groupId>cn.fzm.chain</groupId>
<artifactId>simple-sdk</artifactId>
<version>2.6.1</version>
<version>2.9.6</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
......
......@@ -61,7 +61,7 @@ public class RabbitMQConfig {
@Bean
public Queue dlQueue() {
return QueueBuilder.durable(DEAD_LETTER_QUEUE)
.ttl(1000 * 60 * 60 * 2)
.ttl(1000 * 60 * 2)
.deadLetterExchange(DEAD_LETTER_DIRECT)
.deadLetterRoutingKey("copyright.notify")
.build();
......
......@@ -95,6 +95,12 @@ public class CopyrightApply {
@ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败")
private Integer registerState;
@ApiModelProperty(value = "存证哈希")
private String evidenceHash;
@ApiModelProperty(value = "存证日期")
private Date evidenceDate;
@ApiModelProperty(value = "驳回理由")
private String rejectReason;
......@@ -102,6 +108,9 @@ public class CopyrightApply {
@ApiModelProperty("json串")
private String content;
@ApiModelProperty("登记证书编号,在版权登记审核通过后生成")
private String registerCode;
private Date createDate;
private Date updateDate;
......
package com.fzm.common.entity;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fzm.common.entity.dto.CopyrightDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
......@@ -87,7 +84,6 @@ public class CopyrightOwner {
@ApiModelProperty(value = "证件照片(营业执照等)")
private String certificatesPhoto;
@NotBlank(message = "委托证明不能为空")
@ApiModelProperty(value = "委托证明")
private String entrustProve;
......
......@@ -94,7 +94,6 @@ public class CopyrightDTO {
@ApiModelProperty(value = "权力归属方式")
private String authorityAscriptionMode;
@NotBlank(message = "权力归属材料不能为空")
@ApiModelProperty(value = "权力归属证明材料的文件地址")
private String authorityAscriptionProve;
......
package com.fzm.common.entity.dto;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -20,7 +21,7 @@ public class CopyrightQueryRequest {
private String sign_type = "md5";
private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
private String version = "1.0";
private BizContent biz_content;
private String biz_content;
@Data
@AllArgsConstructor
......@@ -30,6 +31,6 @@ public class CopyrightQueryRequest {
public CopyrightQueryRequest(String serial_code, String app_id) {
this.app_id = app_id;
this.biz_content = new BizContent(serial_code);
this.biz_content = JSONUtil.toJsonStr(new BizContent(serial_code));
}
}
......@@ -9,6 +9,8 @@ import lombok.Data;
@Data
public class CopyrightQueryResponse {
private String apply_time;
private Integer audit_status;
private CertificateInfo certificate;
......
......@@ -4,6 +4,7 @@
package com.fzm.common.entity.dto;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.fzm.common.entity.*;
import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.enums.*;
......@@ -31,7 +32,7 @@ public class CopyrightRequest {
private String sign_type = "md5";
private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
private String version = "1.0";
private CopyrightDetail biz_content;
private String biz_content;
@Data
public static class CopyrightDetail {
......@@ -353,7 +354,7 @@ public class CopyrightRequest {
public CopyrightRequest(CopyrightVo copyrightVo, OpusCategory category, String app_id, String sign) {
this.biz_content = new CopyrightDetail(copyrightVo, category);
this.biz_content = JSONUtil.toJsonStr(new CopyrightDetail(copyrightVo, category));
this.app_id = app_id;
this.sign = sign;
}
......
package com.fzm.common.entity.vo;
import com.fzm.common.entity.CopyrightApply;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author tangtuo
* @date 2021/7/1 10:35
*/
@Data
public class CopyrightCertificateVo {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("作品名称")
private String opusName;
@ApiModelProperty("证书哈希")
private String evidenceHash;
@ApiModelProperty("作品性质")
private String opusProperty;
@ApiModelProperty("存证人")
private String evidencer;
@ApiModelProperty("存证时间")
private Date evidenceDate;
@ApiModelProperty(value = "作品分类")
private String opusCategory;
public CopyrightCertificateVo(CopyrightApply copyrightApply, String evidencer, String opusCategory) {
this.id = copyrightApply.getId();
this.opusName = copyrightApply.getOpusName();
this.evidenceHash = copyrightApply.getEvidenceHash();
this.opusProperty = copyrightApply.getOpusProperty();
this.evidenceDate = copyrightApply.getEvidenceDate();
this.evidencer = evidencer;
this.opusCategory = opusCategory;
}
}
......@@ -87,6 +87,18 @@ public class CopyrightVo {
@ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败")
private Integer registerState;
@ApiModelProperty(value = "存证哈希")
private String evidenceHash;
@ApiModelProperty(value = "存证日期")
private Date evidenceDate;
@ApiModelProperty("登记证书编号,在版权登记审核通过后生成")
private String registerCode;
@ApiModelProperty(value = "作品类别")
private OpusCategory opusCategory;
@ApiModelProperty(value = "文件列表")
private List<CopyrightFile> files;
......
......@@ -18,20 +18,13 @@ public class NftCertificateVo {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("名称")
@ApiModelProperty("存证名称")
private String name;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("发行人")
@ApiModelProperty("存证人")
private String publisher;
@ApiModelProperty("发行人地址")
private String wallet;
@ApiModelProperty("剧本hash")
private String fileHash;
@ApiModelProperty("nft哈希")
private String nftHash;
......@@ -39,26 +32,13 @@ public class NftCertificateVo {
@ApiModelProperty("存证时间")
private Date publishTime;
@ApiModelProperty("二维码")
private String qrCode;
@ApiModelProperty("剧本审核状态 0-未审核 1-已审核")
private Integer examineStatus;
@ApiModelProperty("版权证明: 0-未认证 1-已认证")
private Integer copyrightStatus;
public NftCertificateVo(Nft nft, User user, String qrCode) {
public NftCertificateVo(Nft nft, User user) {
this.name = nft.getName();
this.fileHash = nft.getFileHash();
this.nftHash = nft.getNftHash();
this.id = nft.getId();
this.publisher = user.getNickname();
this.publishTime = nft.getPublishTime();
this.wallet=nft.getPublishAddress();
this.qrCode = qrCode;
this.examineStatus = 0;
this.copyrightStatus = 0;
this.cover=nft.getCover();
}
}
package com.fzm.common.entity.vo;
import cn.hutool.core.date.DateUtil;
import com.fzm.common.entity.CopyrightApplyOwnerRelation;
import com.fzm.common.entity.CopyrightAuthor;
import com.fzm.common.entity.Nft;
import com.fzm.common.entity.User;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import sun.management.counter.perf.PerfInstrumentation;
import java.util.Date;
import java.util.stream.Collectors;
/**
* @author tangtuo
* @date 2021/7/1 10:35
......@@ -17,82 +23,100 @@ public class NftVo {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("nft拥有者的用户id")
private Integer userId;
@ApiModelProperty("名称")
@ApiModelProperty("存证名称")
private String name;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("nft编号")
private String nftId;
@ApiModelProperty("存证哈希")
private String nftHash;
@ApiModelProperty("发行个数")
private Integer count = 1;
@ApiModelProperty("类目")
private String category;
@ApiModelProperty("发行状态")
private String publishStatus = "已发行";
@ApiModelProperty("存证人")
private String evidencer;
@ApiModelProperty("发行人")
private String publisher;
@ApiModelProperty("头像")
private String avatar;
@ApiModelProperty("文件哈希")
private String fileHash;
@ApiModelProperty("钱包地址")
private String wallet;
@ApiModelProperty(value = "存证时间")
private Date evidenceTime;
@ApiModelProperty("个性签名")
private String signature;
@ApiModelProperty("版权详情")
private Copyright copyright;
@ApiModelProperty("nft编号")
private String nftId;
@ApiModelProperty("持有人用户id")
private Integer userId;
@ApiModelProperty("剧本hash")
private String fileHash;
@ApiModelProperty("文件名")
private String fileName;
@Data
@NoArgsConstructor
public static class Copyright {
@ApiModelProperty("存证哈希")
private String evidenceHash;
@ApiModelProperty("文件地址")
private String fileUrl;
@ApiModelProperty("存证人")
private String evidencer = "湖北版权局";
@ApiModelProperty("nft哈希")
private String nftHash;
@ApiModelProperty("登记号")
private String registerCode;
@ApiModelProperty("发行时间")
private String publishTime;
@ApiModelProperty("作品名称")
private String opusName;
@ApiModelProperty("作品类型")
private String opusType;
@ApiModelProperty("作者")
private String author;
@ApiModelProperty("简介")
private String synopsis;
@ApiModelProperty("著作权人")
private String copyrightOwner;
@ApiModelProperty("作品完成时间")
private Date opusCompleteDate;
@ApiModelProperty("作品首次发表时间")
private Date firstPublishDate;
@ApiModelProperty("登记时间")
private Date registerDate;
@ApiModelProperty("是否收藏")
private Boolean collection;
@ApiModelProperty("存证时间")
private Date evidenceTime;
@ApiModelProperty("关于nft")
private String aboutNft;
@ApiModelProperty("是否是纪念版nft 0-否 1-是")
private Integer isCommemorate;
public NftVo(Nft nft, User user) {
public Copyright(CopyrightVo copyrightVo, Date evidenceTime) {
this.registerCode = copyrightVo.getRegisterCode();
this.opusName = copyrightVo.getOpusName();
this.opusType = copyrightVo.getOpusCategory().getValue();
this.author = copyrightVo.getAuthors().stream().map(CopyrightAuthor::getName).collect(Collectors.joining());
this.copyrightOwner = copyrightVo.getOwners().stream().map(CopyrightApplyOwnerRelation::getOwner).collect(Collectors.joining());
this.opusCompleteDate = copyrightVo.getOpusCompleteDate();
this.firstPublishDate = copyrightVo.getFirstPublishDate();
this.evidenceTime = evidenceTime;
this.evidenceHash = copyrightVo.getEvidenceHash();
}
}
public NftVo(Nft nft, CopyrightVo copyrightVo) {
this.id = nft.getId();
this.author = nft.getAuthor();
this.evidencer = nft.getAuthor();
this.userId = nft.getUserId();
this.name = nft.getName();
this.fileHash = nft.getFileHash();
this.nftId = nft.getNftId();
this.synopsis = nft.getSynopsis();
this.publisher = user.getNickname();
this.avatar = user.getAvatar();
this.wallet = nft.getPublishAddress();
this.publishTime = DateUtil.format(nft.getPublishTime(), "yyyy/MM/dd HH:mm:ss");
this.userId = nft.getUserId();
this.cover = nft.getCover();
this.collection = false;
this.fileName = nft.getFileName();
this.fileUrl = nft.getFileUrl();
this.isCommemorate = nft.getIsCommemorate();
this.nftHash = nft.getNftHash();
this.signature = user.getSignature();
this.fileHash = nft.getFileHash();
this.evidenceTime = nft.getPublishTime();
this.copyright = copyrightVo == null ? new Copyright() : new Copyright(copyrightVo, nft.getPublishTime());
}
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.CopyrightApply;
import com.fzm.common.entity.dto.CopyrightDTO;
import com.fzm.common.entity.vo.CopyrightApplyVo;
import com.fzm.common.entity.vo.CopyrightCertificateVo;
import com.fzm.common.entity.vo.CopyrightVo;
import com.github.pagehelper.PageInfo;
......@@ -103,4 +104,26 @@ public interface CopyrightApplyService extends IService<CopyrightApply> {
*/
int getSuccessCount();
/**
* 根据流水号查询
*
* @param serial_code
* @return
*/
CopyrightApply getBySerialNum(String serial_code);
/**
* 根据nft查询详情
*
* @param nftHash
* @return
*/
CopyrightVo getByNftHash(String nftHash) throws ExecutionException, InterruptedException;
/**
* 查看证书
* @param id
* @return
*/
CopyrightCertificateVo getCertificate(Integer id);
}
......@@ -6,10 +6,12 @@ import com.fzm.common.entity.NftDto;
import com.fzm.common.entity.vo.CollectionNftVo;
import com.fzm.common.entity.vo.NftCertificateVo;
import com.fzm.common.entity.vo.NftListVo;
import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.params.NftTransferParam;
import com.github.pagehelper.PageInfo;
import java.util.List;
import java.util.concurrent.ExecutionException;
/**
* @author tangtuo
......@@ -159,4 +161,12 @@ public interface NftService extends IService<Nft> {
* @return
*/
Nft getByTokenId(Long tokenId);
/**
* 获取nft详情
*
* @param nftHash
* @return
*/
NftVo getDetail(String nftHash) throws ExecutionException, InterruptedException;
}
package com.fzm.common.service.impl;
import cn.fzm.chain.simplesdk.client.ParaChainClient;
import cn.fzm.chain.simplesdk.constant.EvmTransferEnum;
import cn.fzm.chain.simplesdk.constant.EvmTokenEnum;
import cn.fzm.chain.simplesdk.constant.TxStatusEnum;
import cn.fzm.chain.simplesdk.model.TxResult;
import cn.hutool.core.bean.BeanUtil;
......@@ -10,20 +10,19 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.Admin;
import com.fzm.common.entity.CommemorateNft;
import com.fzm.common.entity.Nft;
import com.fzm.common.entity.User;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.AdminMapper;
import com.fzm.common.mapper.CommemorateNftMapper;
import com.fzm.common.service.*;
import com.fzm.common.utils.JsonUtil;
import com.fzm.common.service.CommemorateNftService;
import com.fzm.common.service.NftChainInfoService;
import com.fzm.common.service.NftService;
import com.fzm.common.service.UserService;
import com.fzm.common.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -31,10 +30,10 @@ import org.redisson.api.RLock;
import org.redisson.api.RSemaphore;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
......@@ -57,10 +56,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
@Resource
private ParaChainClient paraChainClient;
@Value("${chain.para.contract-name}")
private String contractName;
@Value("${chain.para.contract-address}")
@Value("${chain.para.cAddr}")
private String contractAddr;
@Resource
......@@ -72,6 +69,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
@Resource
private RedisUtil redisUtil;
private static String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
@Override
public Integer publish(CommemorateNft commemorateNft) {
User user = userService.getUserByToken();
......@@ -89,15 +88,12 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
String tokenInfo = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
log.info("加密上链数据: {}", tokenInfo);
// 发行nft
// 生产tokenId
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long tokenId = snowflake.nextId();
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTransferEnum.ERC1155, 1000000L, wallet, privkey, tokenId, 1, str, true);
long tokenId = getTokenId();
String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTokenEnum.ERC1155, 0L, wallet, wallet, privkey, tokenId, 1, str, true);
if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.FAILED, "nft发行失败");
}
String tradeHash = paraChainClient.evmSetTokenInfoNew(abi, contractAddr, 1000000L, tokenId, tokenInfo, wallet, privkey, true);
String tradeHash = paraChainClient.evmSetTokenInfo(abi, contractAddr, 1000000L, tokenId, tokenInfo, wallet, privkey, true);
if (StringUtils.isBlank(tradeHash)) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败");
}
......@@ -120,6 +116,7 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
public Boolean receive(Integer id) throws InterruptedException {
User user = userService.getUserByToken();
// 加锁,避免一个用户可以并发领取
RLock lock = redisson.getLock("receive:nft:" + user.getId());
boolean tryLock = lock.tryLock(30, TimeUnit.SECONDS);
if (!tryLock) {
......@@ -144,9 +141,9 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
throw GlobalException.newException(ResultCode.FAILED, "抱歉,此纪念版nft已全部被领取完");
}
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String tokenInfo = paraChainClient.evmGetTokenInfoNew(abi, contractAddr, commemorateNft.getTokenId(), commemorateNft.getPublishAddress());
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, commemorateNft.getTokenId(), commemorateNft.getPublishAddress());
// 领取纪念版nft
String hash = paraChainClient.evmTransferNew(abi, contractAddr, EvmTransferEnum.ERC1155, 1000000L, user.getWallet(), commemorateNft.getTokenId(), 1, tokenInfo, commemorateNft.getPublishAddress(), null, true);
String hash = paraChainClient.evmTransfer(abi, contractAddr, EvmTokenEnum.ERC1155, 1000000L, user.getWallet(), commemorateNft.getTokenId(), 1, tokenInfo, commemorateNft.getPublishAddress(), null, true);
if (StringUtils.isBlank(hash)) {
// 领取失败要释放信号量
semaphore.release();
......@@ -183,6 +180,17 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
}
private long getTokenId() {
String key = "next-tokenId";
if (!redisUtil.hasKey(key)) {
long second = Instant.now().getEpochSecond();
redisUtil.set(key, String.valueOf(second));
return second;
}
return redisUtil.incrBy(key, 1);
}
public static void main(String[] args) {
int a = 12;
String code = "00000" + a;
......
......@@ -15,6 +15,7 @@ import com.fzm.common.entity.dto.CopyrightDTO;
import com.fzm.common.entity.dto.CopyrightRequest;
import com.fzm.common.entity.dto.CopyrightResponse;
import com.fzm.common.entity.vo.CopyrightApplyVo;
import com.fzm.common.entity.vo.CopyrightCertificateVo;
import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.enums.CopyrightApplyState;
import com.fzm.common.enums.ResultCode;
......@@ -200,6 +201,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
CopyrightApply copyrightApply = getById(id);
return new CopyrightVo(copyrightApply);
}, threadPoolTaskExecutor);
CompletableFuture<Void> categoryFuture = applyFuture.thenAcceptAsync((result) -> {
// 查询类别
OpusCategory category = opusCategoryService.getById(result.getOpusCategoryId());
result.setOpusCategory(category);
}, threadPoolTaskExecutor);
CompletableFuture<Void> filesFuture = applyFuture.thenAcceptAsync((result) -> {
// 查询附件列表
List<CopyrightFile> files = copyrightFileService.getByCopyrightId(id);
......@@ -221,7 +227,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
result.setAuthorities(authorities);
}, threadPoolTaskExecutor);
// 等所有异步任务都完成以后返回结果
CompletableFuture.allOf(applyFuture, filesFuture, authorsFuture, ownerFuture, authoritiesFuture).get();
CompletableFuture.allOf(categoryFuture, filesFuture, authorsFuture, ownerFuture, authoritiesFuture).get();
return applyFuture.get();
}
......@@ -346,7 +352,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
String serial_code = copyrightResponse.getSerial_code();
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
copyright.setSerialNum(serial_code);
copyright.setRegisterState(CopyrightApplyState.SUCCEEDED.getCode());
copyright.setRegisterState(CopyrightApplyState.SUBMITTED.getCode());
copyright.setRejectReason("");
return updateById(copyright);
}
......@@ -354,7 +360,6 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
private TreeMap<String, String> beanToMap(CopyrightRequest copyrightRequest, String app_secret) {
TreeMap<String, String> treeMap = JSONUtil.toBean(JSONUtil.toJsonStr(copyrightRequest), new TypeReference<TreeMap<String, String>>() {
}, true);
treeMap.put("biz_content", JSONUtil.toJsonStr(copyrightRequest.getBiz_content()));
treeMap.put("app_secret", app_secret);
return treeMap;
......@@ -367,4 +372,36 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
return this.count(wrapper);
}
@Override
public CopyrightApply getBySerialNum(String serial_code) {
QueryWrapper<CopyrightApply> wrapper = new QueryWrapper<>();
wrapper.eq("serial_num", serial_code);
return getOne(wrapper);
}
@Override
public CopyrightVo getByNftHash(String nftHash) throws ExecutionException, InterruptedException {
QueryWrapper<CopyrightApply> wrapper = new QueryWrapper<>();
wrapper.eq("nft_hash", nftHash);
CopyrightApply copyrightApply = this.getOne(wrapper);
if (copyrightApply == null) {
return null;
}
return this.getDetail(copyrightApply.getId());
}
@Override
public CopyrightCertificateVo getCertificate(Integer id) {
CopyrightApply copyrightApply = this.getById(id);
if (copyrightApply == null) {
throw GlobalException.newException(ResultCode.SELECT_FAILED, "没找到此证书");
}
if (!copyrightApply.getRegisterState().equals(CopyrightApplyState.SUCCEEDED.getCode())) {
throw GlobalException.newException(ResultCode.FAILED, "当前版权申请还未审批通过,暂不支持查看证书");
}
OpusCategory category = opusCategoryService.getById(copyrightApply.getOpusCategoryId());
User user = userService.getById(copyrightApply.getUserId());
return new CopyrightCertificateVo(copyrightApply, user.getNickname(), category.getValue());
}
}
package com.fzm.common.service.impl;
import cn.fzm.chain.simplesdk.client.ParaChainClient;
import cn.fzm.chain.simplesdk.constant.EvmTransferEnum;
import cn.fzm.chain.simplesdk.constant.EvmTokenEnum;
import cn.fzm.chain.simplesdk.constant.TxStatusEnum;
import cn.fzm.chain.simplesdk.model.TxResult;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
......@@ -19,7 +15,9 @@ import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.*;
import com.fzm.common.entity.vo.CollectionNftVo;
import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.entity.vo.NftListVo;
import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.enums.AuthStatus;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
......@@ -35,6 +33,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
......@@ -42,7 +41,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
/**
......@@ -87,12 +88,18 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
@Resource
private HttpServletRequest request;
@Value("${chain.para.contract-name}")
private String contractName;
@Resource
private Redisson redisson;
@Value("${chain.para.contract-address}")
@Value("${chain.para.cAddr}")
private String contractAddr;
@Resource
private CopyrightApplyService copyrightApplyService;
//private static String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
private static String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
@Override
public NftDto saveNft(Nft nft) {
Integer userId = JwtUtil.getUserIdFromToken(request.getHeader("Authorization"));
......@@ -119,24 +126,23 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
// 获取用户的私钥
String privkey = paraChainClient.walletDumpPrivkey(wallet);
// 生产tokenId
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long tokenId = snowflake.nextId();
long tokenId = getTokenId();
Nft nft = getById(nftDto.getId());
Map<String, String> map = new HashMap<>();
TreeMap<String, String> map = new TreeMap<>();
map.put("hash", nftDto.getFileHash());
map.put("publishAddress", wallet);
map.put("author", nft.getAuthor());
map.put("synopsis", nft.getSynopsis());
String str = JSONUtil.toJsonStr(map);
String tokenInfo = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
String tokenInfo = this.formatTokenInfo(map);
log.info("tokenInfo:{}", tokenInfo);
// 发行nft
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTransferEnum.ERC1155, 0L, wallet, privkey, tokenId, 1, str, true);
String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTokenEnum.ERC1155, 0L, wallet, wallet, privkey, tokenId, 1, str, true);
if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.FAILED, "nft发行失败");
}
String tradeHash = paraChainClient.evmSetTokenInfoNew(abi, contractAddr, 0L, tokenId, tokenInfo, wallet, privkey, true);
String tradeHash = paraChainClient.evmSetTokenInfo(abi, contractAddr, 0L, tokenId, tokenInfo, wallet, privkey, true);
System.out.println("tradeHash = " + tradeHash);
if (StringUtils.isBlank(tradeHash)) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败");
}
......@@ -145,7 +151,6 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, txResult.getErrMsg().getValue());
}
String realHash = paraChainClient.getRealTxHashFromGrp(hash);
/*TxResult txResult = paraChainClient.cycleConfirmTxWithHash(realHash, false, 1000);
if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) {
......@@ -182,14 +187,11 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "短信验证码校验失败");
}
/*// 不能自己向自己转让nft
if (user.getWallet().equals(receiveUser.getWallet())) {
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "不能向自己转让nft");
}*/
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String tokenInfo = paraChainClient.evmGetTokenInfoNew(abi, contractAddr, nft.getTokenId(), user.getWallet());
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), user.getWallet());
log.info("tokenInfo:{}", tokenInfo);
// 转让nft
String hash = paraChainClient.evmTransferNew(abi, contractAddr, EvmTransferEnum.ERC1155, 1000000L, param.getReceiveWallet(), nft.getTokenId(), param.getCount(), tokenInfo, user.getWallet(), null, true);
String hash = paraChainClient.evmTransfer(abi, contractAddr, EvmTokenEnum.ERC1155, 0L,
param.getReceiveWallet(), nft.getTokenId(), param.getCount(), tokenInfo, user.getWallet(), null, true);
if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "nft转让失败");
}
......@@ -242,6 +244,17 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
}
@Override
public NftVo getDetail(String nftHash) throws ExecutionException, InterruptedException {
Nft nft = this.getByNftHash(nftHash);
if (nft == null) {
throw GlobalException.newException(ResultCode.SELECT_FAILED, "没找到此nft详情,请核对后再试");
}
CopyrightVo copyrightVo = copyrightApplyService.getByNftHash(nftHash);
return new NftVo(nft, copyrightVo);
}
private String getCodeType(String type) {
switch (type) {
case "sms":
......@@ -379,9 +392,27 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (nft == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情");
}
String token = request.getHeader("Authorization");
Integer userId = JwtUtil.getUserIdFromToken(token);
ossUtil.downloadFile(nft.getFileUrl(), nft.getFileName());
}
private long getTokenId() {
String key = "next-tokenId";
if (!redisUtil.hasKey(key)) {
long second = Instant.now().getEpochSecond();
redisUtil.set(key, String.valueOf(second));
return second;
}
return redisUtil.incrBy(key, 1);
}
public String formatTokenInfo(TreeMap<String, String> map) {
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
stringBuilder.append(key).append("=").append(value).append("&");
}
return stringBuilder.deleteCharAt(stringBuilder.length() - 1).toString();
}
}
......@@ -3,6 +3,7 @@ package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.CopyrightApply;
import com.fzm.common.entity.dto.CopyrightDTO;
import com.fzm.common.entity.vo.CopyrightCertificateVo;
import com.fzm.common.entity.vo.CopyrightStateVo;
import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.enums.CopyrightApplyState;
......@@ -25,7 +26,6 @@ import java.util.concurrent.ExecutionException;
* @author tangtuo
* @date 2021/12/9 14:31
*/
@Authentication
@RestController
@Api(tags = "版权申请")
@RequestMapping("/copyright/apply")
......@@ -34,6 +34,7 @@ public class CopyrightApplyController {
@Resource
private CopyrightApplyService copyrightApplyService;
@Authentication
@PostMapping("/submit")
@ApiOperation("/提交申请")
public ResponseModel<Integer> submit(@Validated @RequestBody CopyrightDTO copyrightDTO) {
......@@ -42,6 +43,7 @@ public class CopyrightApplyController {
}
@Authentication
@GetMapping("/list")
@ApiOperation(value = "查询版权登记列表")
public ResponseModel<List<CopyrightApply>> list(@RequestHeader(value = "Authorization") String token, @ApiParam("状态 0-全部 1-进行中 2-已完成") @RequestParam Integer state) {
......@@ -50,6 +52,7 @@ public class CopyrightApplyController {
return ResponseModel.success(list);
}
@Authentication
@PostMapping(value = "/withdraw")
@ApiOperation(value = "撤回")
public ResponseModel<Boolean> withdraw(@RequestParam Integer id) {
......@@ -57,6 +60,7 @@ public class CopyrightApplyController {
return ResponseModel.success(result);
}
@Authentication
@PostMapping(value = "/delete")
@ApiOperation(value = "删除")
public ResponseModel<Boolean> delete(@RequestParam Integer id) {
......@@ -71,6 +75,7 @@ public class CopyrightApplyController {
return ResponseModel.success(copyrightVo);
}
@Authentication
@PostMapping(value = "/update")
@ApiOperation(value = "编辑")
public ResponseModel<Boolean> update(@RequestBody CopyrightDTO copyrightDTO) {
......@@ -104,4 +109,11 @@ public class CopyrightApplyController {
}
@GetMapping("/certificate/{id}")
@ApiOperation(value = "查看版权存证证书")
public ResponseModel<CopyrightCertificateVo> getCertificate(@PathVariable Integer id){
CopyrightCertificateVo copyrightCertificateVo = copyrightApplyService.getCertificate(id);
return ResponseModel.success(copyrightCertificateVo);
}
}
......@@ -35,6 +35,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
/**
......@@ -82,6 +83,7 @@ public class NftController {
@ApiOperation("发行nft")
public ResponseModel<Integer> publish(@Validated @RequestBody NftDto nftDto) {
Integer id = nftService.publish(nftDto);
return ResponseModel.success(id);
}
......@@ -96,27 +98,10 @@ public class NftController {
return ResponseModel.success(list);
}
@GetMapping("get/{id}")
@GetMapping("get/{nftHash}")
@ApiOperation(value = "获取nft详情")
public ResponseModel<NftVo> getById(@PathVariable Integer id, @RequestHeader(required = false) String Authorization) {
Nft nft = nftService.getById(id);
if (nft == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft的详情");
}
User user = userService.getUserByWallet(nft.getPublishAddress());
if (user == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft的发布人的信息");
}
NftVo nftVo = new NftVo(nft, user);
nftVo.setCategory(categoryService.getById(nft.getCategoryId()).getCategoryName());
if (StringUtils.isNotBlank(Authorization)) {
String realToken = Authorization.substring(TokenConstant.TOKEN_PREFIX.length());
if (StringUtils.isNotBlank(realToken) && !"null".equals(realToken)) {
Integer userId = JwtUtil.getUserIdFromToken(Authorization);
Boolean collection = redisUtil.sIsMember(RedisConstant.COLLECTION_USER_PREFIX + userId, id.toString());
nftVo.setCollection(collection);
}
}
public ResponseModel<NftVo> get(@PathVariable String nftHash) throws ExecutionException, InterruptedException {
NftVo nftVo = nftService.getDetail(nftHash);
return ResponseModel.success(nftVo);
}
......@@ -170,8 +155,7 @@ public class NftController {
throw GlobalException.newException(ResultCode.FORBIDDEN, "您无权查看别人的nft证书");
}
User user = userService.getUserByWallet(nft.getPublishAddress());
String qrCode = QRCodeUtil.encode(PATH, null, false);
NftCertificateVo vo = new NftCertificateVo(nft, user, qrCode);
NftCertificateVo vo = new NftCertificateVo(nft, user);
return ResponseModel.success(vo);
}
......@@ -205,7 +189,7 @@ public class NftController {
@Authentication
@ApiOperation(value = "查询用户还未成功申请版权的nft列表")
@GetMapping(value = "/list/copyright")
public ResponseModel<List<CollectionNftVo>> listCopyright(@RequestHeader(value = "Authorization") String token){
public ResponseModel<List<CollectionNftVo>> listCopyright(@RequestHeader(value = "Authorization") String token) {
Integer userId = JwtUtil.getUserIdFromToken(token);
List<CollectionNftVo> list = nftService.listCopyright(userId);
return ResponseModel.success(list);
......
......@@ -76,16 +76,29 @@ sms:
transfer-nft-email-codetype: notice_transfer
transfer-nft-voice-codetype: notice_transfer
#chain:
# para:
# rpc-url: http://146.56.197.42:12021
# withhold-addr: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
# withhold-key: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
# title: user.p.mall.
# admin: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
# admin-key: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
# contract-name: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
# contract-address: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
chain:
para:
rpc-url: http://146.56.197.42:12021
withhold-addr: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withhold-key: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
rpcUrl: http://146.56.197.42:12021
tokenManager: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
tokenManagerKey: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
withhold: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withholdKey: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
title: user.p.mall.
admin: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
admin-key: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
contract-name: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
contract-address: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
cName: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
cAddr: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
aliyun:
oss:
......
......@@ -101,4 +101,15 @@ class LyPortalApplicationTests {
}
@Test
void test2() {
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String contractAddr = "15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW";
long tokenId = 1475397751335424000L;
String wallet = "143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm";
String tokenInfoStr = paraClient.evmGetTokenInfo(abi, contractAddr, tokenId, wallet);
System.out.println(tokenInfoStr);
}
}
package com.fzm.portal;
import cn.fzm.chain.simplesdk.base.RpcApi;
import cn.fzm.chain.simplesdk.constant.EvmTokenEnum;
import cn.fzm.chain.simplesdk.constant.RpcConfig;
import cn.fzm.chain.simplesdk.constant.TxStatusEnum;
import cn.fzm.chain.simplesdk.model.TxResult;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.springframework.stereotype.Component;
import org.w3c.dom.stylesheets.LinkStyle;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author lyz
* @mail lyz@disanbo.com
* @create 2021/2/26 10:44
* @description
*/
public class NftEvm {
private static String rpcUrl = "http://146.56.197.42:12021";
private static String withhold = "1417K9fd5vt4zYW86xinWiCbAkNP794aNy";
private static String withholdKey = "0x19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0";
private static String tokenManager = "1KEBcdmMPfUV2suAqgkyDpdm4brZbYmdfF";
private static String tokenManagerKey = "0x5d872407fb2769854dcca6203d70696feced7099c588a6d9146a122025585e41";
private static String title = "user.p.mall.";
private static String cName = "user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99";
private static String cAddr = "15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW";
private static RpcApi ra = new RpcApi(rpcUrl, withhold, withholdKey, title);
private static String code = "60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000033565b506200012f565b8051620000489060029060208401906200004c565b5050565b8280546200005a90620000f2565b90600052602060002090601f0160209004810192826200007e5760008555620000c9565b82601f106200009957805160ff1916838001178555620000c9565b82800160010185558215620000c9579182015b82811115620000c9578251825591602001919060010190620000ac565b50620000d7929150620000db565b5090565b5b80821115620000d75760008155600101620000dc565b600181811c908216806200010757607f821691505b602082108114156200012957634e487b7160e01b600052602260045260246000fd5b50919050565b61203a806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80638c7a63ae11610097578063e985e9c511610066578063e985e9c514610227578063ed8c593814610263578063f240ec3614610276578063f242432a1461028957600080fd5b80638c7a63ae146101db578063a08fad67146101ee578063a22cb46514610201578063aba7e0fd1461021457600080fd5b806323a36d2b116100d357806323a36d2b146101825780632eb2c2d6146101955780634e1273f4146101a8578063519dc8d2146101c857600080fd5b8062fdd58e1461010457806301ffc9a71461012a578063036ebef91461014d5780630e89341c14610162575b600080fd5b610117610112366004611553565b61029c565b6040519081526020015b60405180910390f35b61013d610138366004611596565b610336565b6040519015158152602001610121565b61016061015b3660046115ba565b610386565b005b6101756101703660046115fc565b6103e3565b6040516101219190611662565b610160610190366004611675565b610477565b6101606101a33660046117f4565b6104d2565b6101bb6101b636600461189e565b610569565b60405161012191906119a4565b6101bb6101d63660046119b7565b610693565b6101756101e93660046115fc565b6106fe565b6101606101fc366004611a1e565b61071b565b61016061020f366004611a9f565b610830565b610160610222366004611adb565b61083f565b61013d610235366004611b57565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b610160610271366004611675565b610858565b610160610284366004611a1e565b610863565b610160610297366004611b8a565b6108d1565b60006001600160a01b03831661030d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061036757506001600160e01b031982166303a24d0760e21b145b8061033057506301ffc9a760e01b6001600160e01b0319831614610330565b6103a284848484604051806020016040528060008152506108d1565b6103ac8383610958565b156103dd576001600160a01b0383166000908152600460209081526040822080546001810182559083529120018290555b50505050565b6060600280546103f290611bef565b80601f016020809104026020016040519081016040528092919081815260200182805461041e90611bef565b801561046b5780601f106104405761010080835404028352916020019161046b565b820191906000526020600020905b81548152906001019060200180831161044e57829003601f168201915b50505050509050919050565b61049283838360405180602001604052806000815250610a11565b61049c8383610958565b156104cd576001600160a01b0383166000908152600460209081526040822080546001810182559083529120018290555b505050565b6001600160a01b0385163314806104ee57506104ee8533610235565b6105555760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610304565b6105628585858585610ae1565b5050505050565b606081518351146105ce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610304565b6000835167ffffffffffffffff8111156105ea576105ea6116a8565b604051908082528060200260200182016040528015610613578160200160208202803683370190505b50905060005b845181101561068b5761065e85828151811061063757610637611c2a565b602002602001015185838151811061065157610651611c2a565b602002602001015161029c565b82828151811061067057610670611c2a565b602090810291909101015261068481611c56565b9050610619565b509392505050565b6001600160a01b03811660009081526004602090815260409182902080548351818402810184019094528084526060939283018282801561046b57602002820191906000526020600020905b8154815260200190600101908083116106df5750505050509050919050565b60008181526003602052604090208054606091906103f290611bef565b6107978585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092018290525060408051602081019091529081529250610c75915050565b60005b83811015610828576107c4868686848181106107b8576107b8611c2a565b90506020020135610958565b15610816576001600160a01b03861660009081526004602052604090208585838181106107f3576107f3611c2a565b835460018101855560009485526020948590209190940292909201359190920155505b8061082081611c56565b91505061079a565b505050505050565b61083b338383610dc0565b5050565b60008381526003602052604090206103dd90838361149e565b6104cd838383610ea1565b6105628585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250610fa392505050565b6001600160a01b0385163314806108ed57506108ed8533610235565b61094b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610304565b610562858585858561111f565b6001600160a01b0382166000908152600460209081526040808320805482518185028101850190935280835284938301828280156109b557602002820191906000526020600020905b8154815260200190600101908083116109a1575b5050505050905060005b8151811015610a0657838282815181106109db576109db611c2a565b602002602001015114156109f457600092505050610330565b806109fe81611c56565b9150506109bf565b506001949350505050565b6001600160a01b038416610a375760405162461bcd60e51b815260040161030490611c71565b33610a5181600087610a488861123c565b6105628861123c565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610a81908490611cb2565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461056281600087878787611287565b8151835114610b025760405162461bcd60e51b815260040161030490611cca565b6001600160a01b038416610b285760405162461bcd60e51b815260040161030490611d12565b3360005b8451811015610c0f576000858281518110610b4957610b49611c2a565b602002602001015190506000858381518110610b6757610b67611c2a565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610bb75760405162461bcd60e51b815260040161030490611d57565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610bf4908490611cb2565b9250508190555050505080610c0890611c56565b9050610b2c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c5f929190611da1565b60405180910390a46108288187878787876113e3565b6001600160a01b038416610c9b5760405162461bcd60e51b815260040161030490611c71565b8151835114610cbc5760405162461bcd60e51b815260040161030490611cca565b3360005b8451811015610d5857838181518110610cdb57610cdb611c2a565b6020026020010151600080878481518110610cf857610cf8611c2a565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d409190611cb2565b90915550819050610d5081611c56565b915050610cc0565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610da9929190611da1565b60405180910390a4610562816000878787876113e3565b816001600160a01b0316836001600160a01b03161415610e345760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610304565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316610ec75760405162461bcd60e51b815260040161030490611dcf565b33610ef781856000610ed88761123c565b610ee18761123c565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b038816845290915290205482811015610f385760405162461bcd60e51b815260040161030490611e12565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b038316610fc95760405162461bcd60e51b815260040161030490611dcf565b8051825114610fea5760405162461bcd60e51b815260040161030490611cca565b604080516020810190915260009081905233905b83518110156110c057600084828151811061101b5761101b611c2a565b60200260200101519050600084838151811061103957611039611c2a565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156110895760405162461bcd60e51b815260040161030490611e12565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806110b881611c56565b915050610ffe565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611111929190611da1565b60405180910390a450505050565b6001600160a01b0384166111455760405162461bcd60e51b815260040161030490611d12565b33611155818787610a488861123c565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156111965760405162461bcd60e51b815260040161030490611d57565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906111d3908490611cb2565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611233828888888888611287565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061127657611276611c2a565b602090810291909101015292915050565b6001600160a01b0384163b156108285760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112cb9089908990889088908890600401611e56565b6020604051808303816000875af1925050508015611306575060408051601f3d908101601f1916820190925261130391810190611e9b565b60015b6113b357611312611eb8565b806308c379a0141561134c5750611327611ed4565b80611332575061134e565b8060405162461bcd60e51b81526004016103049190611662565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610304565b6001600160e01b0319811663f23a6e6160e01b146112335760405162461bcd60e51b815260040161030490611f5e565b6001600160a01b0384163b156108285760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114279089908990889088908890600401611fa6565b6020604051808303816000875af1925050508015611462575060408051601f3d908101601f1916820190925261145f91810190611e9b565b60015b61146e57611312611eb8565b6001600160e01b0319811663bc197c8160e01b146112335760405162461bcd60e51b815260040161030490611f5e565b8280546114aa90611bef565b90600052602060002090601f0160209004810192826114cc5760008555611512565b82601f106114e55782800160ff19823516178555611512565b82800160010185558215611512579182015b828111156115125782358255916020019190600101906114f7565b5061151e929150611522565b5090565b5b8082111561151e5760008155600101611523565b80356001600160a01b038116811461154e57600080fd5b919050565b6000806040838503121561156657600080fd5b61156f83611537565b946020939093013593505050565b6001600160e01b03198116811461159357600080fd5b50565b6000602082840312156115a857600080fd5b81356115b38161157d565b9392505050565b600080600080608085870312156115d057600080fd5b6115d985611537565b93506115e760208601611537565b93969395505050506040820135916060013590565b60006020828403121561160e57600080fd5b5035919050565b6000815180845260005b8181101561163b5760208185018101518683018201520161161f565b8181111561164d576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006115b36020830184611615565b60008060006060848603121561168a57600080fd5b61169384611537565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156116e4576116e46116a8565b6040525050565b600067ffffffffffffffff821115611705576117056116a8565b5060051b60200190565b600082601f83011261172057600080fd5b8135602061172d826116eb565b60405161173a82826116be565b83815260059390931b850182019282810191508684111561175a57600080fd5b8286015b84811015611775578035835291830191830161175e565b509695505050505050565b600082601f83011261179157600080fd5b813567ffffffffffffffff8111156117ab576117ab6116a8565b6040516117c2601f8301601f1916602001826116be565b8181528460208386010111156117d757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561180c57600080fd5b61181586611537565b945061182360208701611537565b9350604086013567ffffffffffffffff8082111561184057600080fd5b61184c89838a0161170f565b9450606088013591508082111561186257600080fd5b61186e89838a0161170f565b9350608088013591508082111561188457600080fd5b5061189188828901611780565b9150509295509295909350565b600080604083850312156118b157600080fd5b823567ffffffffffffffff808211156118c957600080fd5b818501915085601f8301126118dd57600080fd5b813560206118ea826116eb565b6040516118f782826116be565b83815260059390931b850182019282810191508984111561191757600080fd5b948201945b8386101561193c5761192d86611537565b8252948201949082019061191c565b9650508601359250508082111561195257600080fd5b5061195f8582860161170f565b9150509250929050565b600081518084526020808501945080840160005b838110156119995781518752958201959082019060010161197d565b509495945050505050565b6020815260006115b36020830184611969565b6000602082840312156119c957600080fd5b6115b382611537565b60008083601f8401126119e457600080fd5b50813567ffffffffffffffff8111156119fc57600080fd5b6020830191508360208260051b8501011115611a1757600080fd5b9250929050565b600080600080600060608688031215611a3657600080fd5b611a3f86611537565b9450602086013567ffffffffffffffff80821115611a5c57600080fd5b611a6889838a016119d2565b90965094506040880135915080821115611a8157600080fd5b50611a8e888289016119d2565b969995985093965092949392505050565b60008060408385031215611ab257600080fd5b611abb83611537565b915060208301358015158114611ad057600080fd5b809150509250929050565b600080600060408486031215611af057600080fd5b83359250602084013567ffffffffffffffff80821115611b0f57600080fd5b818601915086601f830112611b2357600080fd5b813581811115611b3257600080fd5b876020828501011115611b4457600080fd5b6020830194508093505050509250925092565b60008060408385031215611b6a57600080fd5b611b7383611537565b9150611b8160208401611537565b90509250929050565b600080600080600060a08688031215611ba257600080fd5b611bab86611537565b9450611bb960208701611537565b93506040860135925060608601359150608086013567ffffffffffffffff811115611be357600080fd5b61189188828901611780565b600181811c90821680611c0357607f821691505b60208210811415611c2457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611c6a57611c6a611c40565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60008219821115611cc557611cc5611c40565b500190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611db46040830185611969565b8281036020840152611dc68185611969565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611e9090830184611615565b979650505050505050565b600060208284031215611ead57600080fd5b81516115b38161157d565b600060033d1115611ed15760046000803e5060005160e01c5b90565b600060443d1015611ee25790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f1257505050505090565b8285019150815181811115611f2a5750505050505090565b843d8701016020828501011115611f445750505050505090565b611f53602082860101876116be565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611fd290830186611969565b8281036060840152611fe48186611969565b90508281036080840152611ff88185611615565b9897505050505050505056fea2646970667358221220df77f45404bbc21d49cd14e361e1a97dba87e98ae5c61aa4f7c14cad9666448d64736f6c634300080a0033";
private static String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
public static void main(String[] args) throws Exception {
/*String s1 = ra.walletCreateAccount("issue_1639727280717");
String s2 = ra.walletCreateAccount("recover_1639727280717");
System.err.println(s1); //1Ezpx7zE4Arn91kPMuVsoMfx96t3bqPL6c 15rJ8yFzsPw5eRAm5CSqFQKcAGh6XgiSmG
System.err.println(s2);*/
/*//String rpcUrl = "http://146.56.218.121:12091";
String rpcUrl = "http://172.22.20.71:8801";
//String rpcUrl = "http://116.63.172.191:8801";
//String rpcUrl = "http://172.16.101.133:8801";
String tokenManager = "1KEBcdmMPfUV2suAqgkyDpdm4brZbYmdfF";
String tokenManagerKey = "0x5d872407fb2769854dcca6203d70696feced7099c588a6d9146a122025585e41";
String publisher = "1NtQGuQjeWrnYvnpVBDfEDwYQ4pw4oKYDS";
String to = "1JQumha8Jv2LEruJvtGoTnDc5YyLvQd7ku";
long tokenId = 1628752532282L;
String tokenInfo = "7b22617574686f72223a22e98791e5bab8222c227075626c6973686572223a2231384c5771736d66517a784155784237515070646359545755336e654e6e39634c53222c2268617368223a5b223830373538363330653736653539393062346465306539313362613432633565222c223830373538363330653736653539393062346465306539313362613432633565225d7d00";
RpcApi ra = new RpcApi(rpcUrl);
String code = "60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000033565b506200012f565b8051620000489060029060208401906200004c565b5050565b8280546200005a90620000f2565b90600052602060002090601f0160209004810192826200007e5760008555620000c9565b82601f106200009957805160ff1916838001178555620000c9565b82800160010185558215620000c9579182015b82811115620000c9578251825591602001919060010190620000ac565b50620000d7929150620000db565b5090565b5b80821115620000d75760008155600101620000dc565b6002810460018216806200010757607f821691505b602082108114156200012957634e487b7160e01b600052602260045260246000fd5b50919050565b6117fc806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106100a85760003560e01c80634e1273f4116100715780634e1273f41461013e5780638c7a63ae1461015e578063a22cb46514610171578063aba7e0fd14610184578063e985e9c514610197578063f242432a146101aa576100a8565b8062fdd58e146100ad57806301ffc9a7146100d65780630e89341c146100f657806323a36d2b146101165780632eb2c2d61461012b575b600080fd5b6100c06100bb366004610f69565b6101bd565b6040516100cd9190611603565b60405180910390f35b6100e96100e4366004611082565b610214565b6040516100cd91906112b9565b6101096101043660046110c1565b61025c565b6040516100cd91906112c4565b610129610124366004610f92565b6102f0565b005b610129610139366004610e26565b610310565b61015161014c366004610fc4565b61036e565b6040516100cd9190611278565b61010961016c3660046110c1565b61048e565b61012961017f366004610f2f565b6104ab565b6101296101923660046110d9565b610579565b6100e96101a5366004610df4565b610598565b6101296101b8366004610ecc565b6105c6565b60006001600160a01b0383166101ee5760405162461bcd60e51b81526004016101e590611373565b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061024557506001600160e01b031982166303a24d0760e21b145b8061025457506102548261061d565b90505b919050565b60606002805461026b90611680565b80601f016020809104026020016040519081016040528092919081815260200182805461029790611680565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b50505050509050919050565b61030b83838360405180602001604052806000815250610636565b505050565b610318610725565b6001600160a01b0316856001600160a01b0316148061033e575061033e856101a5610725565b61035a5760405162461bcd60e51b81526004016101e59061144c565b610367858585858561072a565b5050505050565b606081518351146103915760405162461bcd60e51b81526004016101e590611531565b6000835167ffffffffffffffff8111156103bb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156103e4578160200160208202803683370190505b50905060005b84518110156104865761044b85828151811061041657634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061043e57634e487b7160e01b600052603260045260246000fd5b60200260200101516101bd565b82828151811061046b57634e487b7160e01b600052603260045260246000fd5b602090810291909101015261047f816116bb565b90506103ea565b509392505050565b600081815260036020526040902080546060919061026b90611680565b816001600160a01b03166104bd610725565b6001600160a01b031614156104e45760405162461bcd60e51b81526004016101e5906114e8565b80600160006104f1610725565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610535610725565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161056d91906112b9565b60405180910390a35050565b6000838152600360205260409020610592908383610c6d565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6105ce610725565b6001600160a01b0316856001600160a01b031614806105f457506105f4856101a5610725565b6106105760405162461bcd60e51b81526004016101e5906113be565b61036785858585856108fb565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b03841661065c5760405162461bcd60e51b81526004016101e5906115c2565b6000610666610725565b90506106878160008761067888610a2f565b61068188610a2f565b876108f3565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906106b7908490611668565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161070e92919061160c565b60405180910390a461036781600087878787610a88565b335b90565b815183511461074b5760405162461bcd60e51b81526004016101e59061157a565b6001600160a01b0384166107715760405162461bcd60e51b81526004016101e590611407565b600061077b610725565b905061078b8187878787876108f3565b60005b845181101561088d5760008582815181106107b957634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106107e557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156108355760405162461bcd60e51b81526004016101e59061149e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610872908490611668565b9250508190555050505080610886906116bb565b905061078e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108dd92919061128b565b60405180910390a46108f3818787878787610b96565b505050505050565b6001600160a01b0384166109215760405162461bcd60e51b81526004016101e590611407565b600061092b610725565b905061093c81878761067888610a2f565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561097d5760405162461bcd60e51b81526004016101e59061149e565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109ba908490611668565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051610a1092919061160c565b60405180910390a4610a26828888888888610a88565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610a7757634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b610a9a846001600160a01b0316610c67565b156108f35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610ad39089908990889088908890600401611233565b602060405180830381600087803b158015610aed57600080fd5b505af1925050508015610b1d575060408051601f3d908101601f19168201909252610b1a918101906110a5565b60015b610b6657610b29611708565b80610b345750610b4e565b8060405162461bcd60e51b81526004016101e591906112c4565b60405162461bcd60e51b81526004016101e5906112d7565b6001600160e01b0319811663f23a6e6160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b610ba8846001600160a01b0316610c67565b156108f35760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610be190899089908890889088906004016111d5565b602060405180830381600087803b158015610bfb57600080fd5b505af1925050508015610c2b575060408051601f3d908101601f19168201909252610c28918101906110a5565b60015b610c3757610b29611708565b6001600160e01b0319811663bc197c8160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b3b151590565b828054610c7990611680565b90600052602060002090601f016020900481019282610c9b5760008555610ce1565b82601f10610cb45782800160ff19823516178555610ce1565b82800160010185558215610ce1579182015b82811115610ce1578235825591602001919060010190610cc6565b50610ced929150610cf1565b5090565b5b80821115610ced5760008155600101610cf2565b80356001600160a01b038116811461025757600080fd5b600082601f830112610d2d578081fd5b81356020610d42610d3d83611644565b61161a565b8281528181019085830183850287018401881015610d5e578586fd5b855b85811015610d7c57813584529284019290840190600101610d60565b5090979650505050505050565b600082601f830112610d99578081fd5b813567ffffffffffffffff811115610db357610db36116ec565b610dc6601f8201601f191660200161161a565b818152846020838601011115610dda578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215610e06578182fd5b610e0f83610d06565b9150610e1d60208401610d06565b90509250929050565b600080600080600060a08688031215610e3d578081fd5b610e4686610d06565b9450610e5460208701610d06565b9350604086013567ffffffffffffffff80821115610e70578283fd5b610e7c89838a01610d1d565b94506060880135915080821115610e91578283fd5b610e9d89838a01610d1d565b93506080880135915080821115610eb2578283fd5b50610ebf88828901610d89565b9150509295509295909350565b600080600080600060a08688031215610ee3578081fd5b610eec86610d06565b9450610efa60208701610d06565b93506040860135925060608601359150608086013567ffffffffffffffff811115610f23578182fd5b610ebf88828901610d89565b60008060408385031215610f41578182fd5b610f4a83610d06565b915060208301358015158114610f5e578182fd5b809150509250929050565b60008060408385031215610f7b578182fd5b610f8483610d06565b946020939093013593505050565b600080600060608486031215610fa6578283fd5b610faf84610d06565b95602085013595506040909401359392505050565b60008060408385031215610fd6578182fd5b823567ffffffffffffffff80821115610fed578384fd5b818501915085601f830112611000578384fd5b81356020611010610d3d83611644565b82815281810190858301838502870184018b101561102c578889fd5b8896505b848710156110555761104181610d06565b835260019690960195918301918301611030565b509650508601359250508082111561106b578283fd5b5061107885828601610d1d565b9150509250929050565b600060208284031215611093578081fd5b813561109e816117ad565b9392505050565b6000602082840312156110b6578081fd5b815161109e816117ad565b6000602082840312156110d2578081fd5b5035919050565b6000806000604084860312156110ed578081fd5b83359250602084013567ffffffffffffffff8082111561110b578283fd5b818601915086601f83011261111e578283fd5b81358181111561112c578384fd5b87602082850101111561113d578384fd5b6020830194508093505050509250925092565b6000815180845260208085019450808401835b8381101561117f57815187529582019590820190600101611163565b509495945050505050565b60008151808452815b818110156111af57602081850181015186830182015201611193565b818111156111c05782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061120190830186611150565b82810360608401526112138186611150565b90508281036080840152611227818561118a565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061126d9083018461118a565b979650505050505050565b60006020825261109e6020830184611150565b60006040825261129e6040830185611150565b82810360208401526112b08185611150565b95945050505050565b901515815260200190565b60006020825261109e602083018461118a565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561163c5761163c6116ec565b604052919050565b600067ffffffffffffffff82111561165e5761165e6116ec565b5060209081020190565b6000821982111561167b5761167b6116d6565b500190565b60028104600182168061169457607f821691505b602082108114156116b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156116cf576116cf6116d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d101561171857610727565b600481823e6308c379a061172c8251611702565b1461173657610727565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156117665750505050610727565b828401925082519150808211156117805750505050610727565b503d8301602082840101111561179857505050610727565b601f01601f1916810160200160405291505090565b6001600160e01b0319811681146117c357600080fd5b5056fea26469706673582212209cf51eb3daad4f0c1c653142bc91893c5a26f1a14f11a3152bc64105d2e942bc64736f6c63430008000033";
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String cName = "user.evm.0xf4403b125a0d51cecf955aa7bd67ad17f153efdfff188cd2d31e2d44f6094996";
String cAddr = "17S4bk6RvqNUmwfzkhJVAzjKBGtGYqtKas";
//部署NFT合约,无需再次部署,已经部署
String hash = ra.evmDeploy(code, abi, "MallNFT", RpcConfig.TX_EVM_DEPLOY_FEE, "MallNFT", null, tokenManager, tokenManagerKey, false);
//发行NFT,本次发行的是ERC1155
hash = ra.evmPublishToken(abi, cAddr, EvmTokenEnum.ERC1155, 0L, publisher, null, tokenId, 10000L, "publish", false);
//设置NFT信息
hash = ra.evmSetTokenInfo(abi, cAddr, 0L, tokenId, tokenInfo, publisher, null, false);
//获取NFT信息
hash = ra.evmGetTokenInfo(abi, cAddr, tokenId, publisher);
//NFT转账
hash = ra.evmTransfer(abi, cAddr, EvmTokenEnum.ERC1155, 0L, to, tokenId, 100L, "transfer", publisher, null, false);
//查询NFT余额
long balance = ra.evmBalance(abi, cAddr, EvmTokenEnum.ERC1155, publisher, tokenId);*/
//=============================================================================================
//long tokenId = Instant.now().getEpochSecond();
// long tokenId = 1640828944;
// String hash = ra.evmSetTokenInfo(abi, cAddr, 0L, tokenId, "publishAddress=143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm&synopsis=呵呵呵", "143nwppTM4yyuc4KKQbi5RHiKmpHPAwnqm", null, true);
// System.out.println("hash = " + hash);
// System.out.println("tokenId = " + tokenId);
// TimeUnit.SECONDS.sleep(10);
String result = ra.evmGetTokenInfo(abi, cAddr, 1640675959, "19uiPBDu6jh39y7J3Xa7vFcF141RWQAkd1");
System.out.println(result);
// String realTxHashFromGrp = ra.getRealTxHashFromGrp("0x2061e977daee520629ac8757763249855e2cf5b408276a8253a81b4e9b9cba7b");
// System.out.println("realTxHashFromGrp = " + realTxHashFromGrp);
}
}
package com.fzm.portal;
import cn.fzm.chain.simplesdk.base.RpcApi;
import cn.fzm.chain.simplesdk.constant.EvmTransferEnum;
import cn.fzm.chain.simplesdk.constant.EvmTokenEnum;
import java.time.Instant;
/**
* @author lyz
......@@ -23,35 +25,40 @@ public class TestDemo {
//String rpcUrl = "http://146.56.218.121:12091";
//String rpcUrl = "http://10.144.180.121:8901";
String rpcUrl = "http://172.16.101.133:8801";
String withholdAddr = "1Ae6FfgdYJn6LLaqDoRjwga3j4TTmMq3t7";
String withholdKey = "0xa4c49dcb35e0032dc8db5891dc81481943b68fc558ce93ce74d0382c1d104934";
String title = "user.p.joying.";
String tokenManager = "1N2ABERwHgxGhebVw6fVSwaQ5uLAysmGEu";
String tokenManagerKey = "0x4e92bda2477ded0e7c07a9e3acd2370de8d7401c68cc83ee8376806db3121e77";
String publisher = "12AER3rcxa5HFbztnoT9p6f93f8FHfe6xY";
String to = "1Dfrk6JLbC6Pv1rGAGWL3v1TSXRp68VS7j";
long tokenId = 1628752532280L;
String tokenInfo = "7b22617574686f72223a22e98791e5bab8222c227075626c6973686572223a2231384c5771736d66517a784155784237515070646359545755336e654e6e39634c53222c2268617368223a5b223830373538363330653736653539393062346465306539313362613432633565222c223830373538363330653736653539393062346465306539313362613432633565225d7d00";
String unfreezeAddr = "1RCdmF5Eyg2CgbERbKJPFHjQkJE3u9Hp6";
RpcApi ra = new RpcApi(rpcUrl, withholdAddr, withholdKey, title);
// String rpcUrl = "http://146.56.197.42:12021";
// String withholdAddr = "1417K9fd5vt4zYW86xinWiCbAkNP794aNy";
// String withholdKey = "19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0";
// String title = "user.p.mall.";
// String tokenManager = "1N2ABERwHgxGhebVw6fVSwaQ5uLAysmGEu";
// String tokenManagerKey = "0x4e92bda2477ded0e7c07a9e3acd2370de8d7401c68cc83ee8376806db3121e77";
// String hash = "0xacf3180e56eb0dbae47df6e55f131cb1bcd07193bf93d15b21d1f4a1a8c6f6df";
// String publisher = "12AER3rcxa5HFbztnoT9p6f93f8FHfe6xY";
// String to = "1Dfrk6JLbC6Pv1rGAGWL3v1TSXRp68VS7j";
// long tokenId = Instant.EPOCH.getEpochSecond();
// System.out.println(tokenId);
// String tokenInfo = "7b22617574686f72223a22e98791e5bab8222c227075626c6973686572223a2231384c5771736d66517a784155784237515070646359545755336e654e6e39634c53222c2268617368223a5b223830373538363330653736653539393062346465306539313362613432633565222c223830373538363330653736653539393062346465306539313362613432633565225d7d00";
// String cAddr = "15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW";
// String unfreezeAddr = "1RCdmF5Eyg2CgbERbKJPFHjQkJE3u9Hp6";
// RpcApi ra = new RpcApi(rpcUrl, withholdAddr, withholdKey, title);
//ra.evmPublishToken(args, cAddr, EvmTokenEnum.ERC1155,10000L,)
String code = "60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000033565b506200012f565b8051620000489060029060208401906200004c565b5050565b8280546200005a90620000f2565b90600052602060002090601f0160209004810192826200007e5760008555620000c9565b82601f106200009957805160ff1916838001178555620000c9565b82800160010185558215620000c9579182015b82811115620000c9578251825591602001919060010190620000ac565b50620000d7929150620000db565b5090565b5b80821115620000d75760008155600101620000dc565b6002810460018216806200010757607f821691505b602082108114156200012957634e487b7160e01b600052602260045260246000fd5b50919050565b6117fc806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106100a85760003560e01c80634e1273f4116100715780634e1273f41461013e5780638c7a63ae1461015e578063a22cb46514610171578063aba7e0fd14610184578063e985e9c514610197578063f242432a146101aa576100a8565b8062fdd58e146100ad57806301ffc9a7146100d65780630e89341c146100f657806323a36d2b146101165780632eb2c2d61461012b575b600080fd5b6100c06100bb366004610f69565b6101bd565b6040516100cd9190611603565b60405180910390f35b6100e96100e4366004611082565b610214565b6040516100cd91906112b9565b6101096101043660046110c1565b61025c565b6040516100cd91906112c4565b610129610124366004610f92565b6102f0565b005b610129610139366004610e26565b610310565b61015161014c366004610fc4565b61036e565b6040516100cd9190611278565b61010961016c3660046110c1565b61048e565b61012961017f366004610f2f565b6104ab565b6101296101923660046110d9565b610579565b6100e96101a5366004610df4565b610598565b6101296101b8366004610ecc565b6105c6565b60006001600160a01b0383166101ee5760405162461bcd60e51b81526004016101e590611373565b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061024557506001600160e01b031982166303a24d0760e21b145b8061025457506102548261061d565b90505b919050565b60606002805461026b90611680565b80601f016020809104026020016040519081016040528092919081815260200182805461029790611680565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b50505050509050919050565b61030b83838360405180602001604052806000815250610636565b505050565b610318610725565b6001600160a01b0316856001600160a01b0316148061033e575061033e856101a5610725565b61035a5760405162461bcd60e51b81526004016101e59061144c565b610367858585858561072a565b5050505050565b606081518351146103915760405162461bcd60e51b81526004016101e590611531565b6000835167ffffffffffffffff8111156103bb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156103e4578160200160208202803683370190505b50905060005b84518110156104865761044b85828151811061041657634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061043e57634e487b7160e01b600052603260045260246000fd5b60200260200101516101bd565b82828151811061046b57634e487b7160e01b600052603260045260246000fd5b602090810291909101015261047f816116bb565b90506103ea565b509392505050565b600081815260036020526040902080546060919061026b90611680565b816001600160a01b03166104bd610725565b6001600160a01b031614156104e45760405162461bcd60e51b81526004016101e5906114e8565b80600160006104f1610725565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610535610725565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161056d91906112b9565b60405180910390a35050565b6000838152600360205260409020610592908383610c6d565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6105ce610725565b6001600160a01b0316856001600160a01b031614806105f457506105f4856101a5610725565b6106105760405162461bcd60e51b81526004016101e5906113be565b61036785858585856108fb565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b03841661065c5760405162461bcd60e51b81526004016101e5906115c2565b6000610666610725565b90506106878160008761067888610a2f565b61068188610a2f565b876108f3565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906106b7908490611668565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161070e92919061160c565b60405180910390a461036781600087878787610a88565b335b90565b815183511461074b5760405162461bcd60e51b81526004016101e59061157a565b6001600160a01b0384166107715760405162461bcd60e51b81526004016101e590611407565b600061077b610725565b905061078b8187878787876108f3565b60005b845181101561088d5760008582815181106107b957634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106107e557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156108355760405162461bcd60e51b81526004016101e59061149e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610872908490611668565b9250508190555050505080610886906116bb565b905061078e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108dd92919061128b565b60405180910390a46108f3818787878787610b96565b505050505050565b6001600160a01b0384166109215760405162461bcd60e51b81526004016101e590611407565b600061092b610725565b905061093c81878761067888610a2f565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561097d5760405162461bcd60e51b81526004016101e59061149e565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109ba908490611668565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051610a1092919061160c565b60405180910390a4610a26828888888888610a88565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610a7757634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b610a9a846001600160a01b0316610c67565b156108f35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610ad39089908990889088908890600401611233565b602060405180830381600087803b158015610aed57600080fd5b505af1925050508015610b1d575060408051601f3d908101601f19168201909252610b1a918101906110a5565b60015b610b6657610b29611708565b80610b345750610b4e565b8060405162461bcd60e51b81526004016101e591906112c4565b60405162461bcd60e51b81526004016101e5906112d7565b6001600160e01b0319811663f23a6e6160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b610ba8846001600160a01b0316610c67565b156108f35760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610be190899089908890889088906004016111d5565b602060405180830381600087803b158015610bfb57600080fd5b505af1925050508015610c2b575060408051601f3d908101601f19168201909252610c28918101906110a5565b60015b610c3757610b29611708565b6001600160e01b0319811663bc197c8160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b3b151590565b828054610c7990611680565b90600052602060002090601f016020900481019282610c9b5760008555610ce1565b82601f10610cb45782800160ff19823516178555610ce1565b82800160010185558215610ce1579182015b82811115610ce1578235825591602001919060010190610cc6565b50610ced929150610cf1565b5090565b5b80821115610ced5760008155600101610cf2565b80356001600160a01b038116811461025757600080fd5b600082601f830112610d2d578081fd5b81356020610d42610d3d83611644565b61161a565b8281528181019085830183850287018401881015610d5e578586fd5b855b85811015610d7c57813584529284019290840190600101610d60565b5090979650505050505050565b600082601f830112610d99578081fd5b813567ffffffffffffffff811115610db357610db36116ec565b610dc6601f8201601f191660200161161a565b818152846020838601011115610dda578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215610e06578182fd5b610e0f83610d06565b9150610e1d60208401610d06565b90509250929050565b600080600080600060a08688031215610e3d578081fd5b610e4686610d06565b9450610e5460208701610d06565b9350604086013567ffffffffffffffff80821115610e70578283fd5b610e7c89838a01610d1d565b94506060880135915080821115610e91578283fd5b610e9d89838a01610d1d565b93506080880135915080821115610eb2578283fd5b50610ebf88828901610d89565b9150509295509295909350565b600080600080600060a08688031215610ee3578081fd5b610eec86610d06565b9450610efa60208701610d06565b93506040860135925060608601359150608086013567ffffffffffffffff811115610f23578182fd5b610ebf88828901610d89565b60008060408385031215610f41578182fd5b610f4a83610d06565b915060208301358015158114610f5e578182fd5b809150509250929050565b60008060408385031215610f7b578182fd5b610f8483610d06565b946020939093013593505050565b600080600060608486031215610fa6578283fd5b610faf84610d06565b95602085013595506040909401359392505050565b60008060408385031215610fd6578182fd5b823567ffffffffffffffff80821115610fed578384fd5b818501915085601f830112611000578384fd5b81356020611010610d3d83611644565b82815281810190858301838502870184018b101561102c578889fd5b8896505b848710156110555761104181610d06565b835260019690960195918301918301611030565b509650508601359250508082111561106b578283fd5b5061107885828601610d1d565b9150509250929050565b600060208284031215611093578081fd5b813561109e816117ad565b9392505050565b6000602082840312156110b6578081fd5b815161109e816117ad565b6000602082840312156110d2578081fd5b5035919050565b6000806000604084860312156110ed578081fd5b83359250602084013567ffffffffffffffff8082111561110b578283fd5b818601915086601f83011261111e578283fd5b81358181111561112c578384fd5b87602082850101111561113d578384fd5b6020830194508093505050509250925092565b6000815180845260208085019450808401835b8381101561117f57815187529582019590820190600101611163565b509495945050505050565b60008151808452815b818110156111af57602081850181015186830182015201611193565b818111156111c05782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061120190830186611150565b82810360608401526112138186611150565b90508281036080840152611227818561118a565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061126d9083018461118a565b979650505050505050565b60006020825261109e6020830184611150565b60006040825261129e6040830185611150565b82810360208401526112b08185611150565b95945050505050565b901515815260200190565b60006020825261109e602083018461118a565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561163c5761163c6116ec565b604052919050565b600067ffffffffffffffff82111561165e5761165e6116ec565b5060209081020190565b6000821982111561167b5761167b6116d6565b500190565b60028104600182168061169457607f821691505b602082108114156116b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156116cf576116cf6116d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d101561171857610727565b600481823e6308c379a061172c8251611702565b1461173657610727565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156117665750505050610727565b828401925082519150808211156117805750505050610727565b503d8301602082840101111561179857505050610727565b601f01601f1916810160200160405291505090565b6001600160e01b0319811681146117c357600080fd5b5056fea26469706673582212209cf51eb3daad4f0c1c653142bc91893c5a26f1a14f11a3152bc64105d2e942bc64736f6c63430008000033";
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
//String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String abi = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String cName = "user.evm.0x72ab91df57d70ddca74c219fee29a4e08632bb7b1109c1627fc11173961b180c";
//String cName = "user.evm.0xedf89f9273befe83c16acde1172f6c81476a2f14ebac6df958cd4aa6ad29d98d";
String cAddr = "1ErrPnk5mocNL5k87Yx66ihqmprc8avjPJ";
String addr = ra.evmQueryAddrByName(cName);
System.out.println("addr = " + addr);
//String addr = ra.evmQueryAddrByName(cName);
// System.out.println("addr = " + addr);
//String s = ra.evmGetTokenInfoNew(abi, cAddr, 1468781664640569344L, "16oJi1AwsZqtfP74N6nUhVKW1GwshRPQyY");
//System.out.println(s);
//String cAddr = "1CQDaNN28ysjgH2fyZgB1fpuUwktdJzft1";
//String hash = ra.evmDeploy(code, abi, "JoyingNFT", "JoyingNFT", tokenManager, tokenManagerKey, true);
//String hash = ra.evmDeployNew(code, abi, "JoyingNFT", 1000L,"JoyingNFT", null, tokenManager, tokenManagerKey, true);
//String hash = ra.evmPublishToken(abi, cAddr, EvmTransferEnum.ERC1155, publisher, null, tokenId, 10000L, "publish", true);
//String hash = ra.evmSetTokenInfoNew(abi, cAddr, tokenId, tokenInfo, publisher, null, true);
//String hash = ra.evmGetTokenInfoNew(abi, cAddr, tokenId, publisher);
String hash = ra.evmTransferNew(abi, cAddr, EvmTransferEnum.ERC1155,1000000L, to, tokenId, 100L, "transfer", publisher, null, true);
//String hash = ra.evmTransferNew(abi, cAddr, EvmTransferEnum.ERC1155,1000000L, to, tokenId, 100L, "transfer", publisher, null, true);
//long hash = ra.evmBalanceNew(abi, cAddr, EvmTransferEnum.ERC1155, publisher, tokenId);
//long hash = ra.evmEstimateGas(code, abi, null, tokenManager);
//String hash = ra.evmPublishNFT1155(cName, publisher, null, 100, true);
......@@ -85,6 +92,10 @@ public class TestDemo {
if(tr.getStatus() == TxStatusEnum.SUCCESS){
System.out.println("OK");
}*/
String abi1 = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
String abi2 = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getUserTokens\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintTokenBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenInfo\",\"type\":\"string\"}],\"name\":\"setTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
System.out.println(abi1.equals(abi2));
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
2021-12-30 14:26:38.378 [background-preinit] INFO org.hibernate.validator.internal.util.Version-HV000001: Hibernate Validator 6.1.7.Final
2021-12-30 14:26:38.437 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Starting JoyingPortalApplication on LAPTOP-AT8CNAMK with PID 17632 (D:\workspace\fzm-joying\joying-portal\target\classes started by tangtuo in D:\workspace\fzm-joying)
2021-12-30 14:26:38.437 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-The following profiles are active: nj
2021-12-30 14:26:38.500 [restartedMain] INFO o.s.b.d.env.DevToolsPropertyDefaultsPostProcessor-Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2021-12-30 14:26:38.500 [restartedMain] INFO o.s.b.d.env.DevToolsPropertyDefaultsPostProcessor-For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2021-12-30 14:26:40.013 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Multiple Spring Data modules found, entering strict repository configuration mode!
2021-12-30 14:26:40.015 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-12-30 14:26:40.042 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Finished Spring Data repository scanning in 15ms. Found 0 Redis repository interfaces.
2021-12-30 14:26:41.720 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat initialized with port(s): 8001 (http)
2021-12-30 14:26:41.730 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Initializing ProtocolHandler ["http-nio-8001"]
2021-12-30 14:26:41.732 [restartedMain] INFO org.apache.catalina.core.StandardService-Starting service [Tomcat]
2021-12-30 14:26:41.732 [restartedMain] INFO org.apache.catalina.core.StandardEngine-Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-12-30 14:26:41.902 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/]-Initializing Spring embedded WebApplicationContext
2021-12-30 14:26:41.902 [restartedMain] INFO o.s.b.w.s.c.ServletWebServerApplicationContext-Root WebApplicationContext: initialization completed in 3401 ms
2021-12-30 14:26:42.098 [restartedMain] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure-Init DruidDataSource
2021-12-30 14:26:43.315 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-1} inited
2021-12-30 14:26:45.973 [restartedMain] INFO org.redisson.Version-Redisson 3.16.0
2021-12-30 14:26:46.998 [redisson-netty-4-14] INFO o.r.connection.pool.MasterPubSubConnectionPool-1 connections initialized for 146.56.218.121/146.56.218.121:6379
2021-12-30 14:26:47.138 [redisson-netty-4-20] INFO org.redisson.connection.pool.MasterConnectionPool-24 connections initialized for 146.56.218.121/146.56.218.121:6379
2021-12-30 14:26:47.433 [restartedMain] WARN c.b.mybatisplus.core.metadata.TableInfoHelper-Warn: Could not find @TableId in Class: com.fzm.common.entity.CopyrightApplyOwnerRelation.
2021-12-30 14:26:47.562 [restartedMain] WARN c.b.mybatisplus.core.metadata.TableInfoHelper-Warn: Could not find @TableId in Class: com.fzm.common.entity.CopyrightAuthorityRelation.
2021-12-30 14:26:47.706 [restartedMain] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor-Initializing ExecutorService 'threadPoolTaskExecutor'
2021-12-30 14:26:49.634 [restartedMain] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping-Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2021-12-30 14:26:49.957 [restartedMain] INFO o.s.b.d.autoconfigure.OptionalLiveReloadServer-LiveReload server is running on port 35729
2021-12-30 14:26:50.724 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Starting ProtocolHandler ["http-nio-8001"]
2021-12-30 14:26:50.740 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat started on port(s): 8001 (http) with context path ''
2021-12-30 14:26:50.741 [restartedMain] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper-Context refreshed
2021-12-30 14:26:50.759 [restartedMain] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper-Found 1 custom documentation plugin(s)
2021-12-30 14:26:50.800 [restartedMain] INFO s.d.spring.web.scanners.ApiListingReferenceScanner-Scanning for api listing references
2021-12-30 14:26:50.975 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_1
2021-12-30 14:26:50.991 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_2
2021-12-30 14:26:51.019 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_3
2021-12-30 14:26:51.062 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: getByIdUsingGET_1
2021-12-30 14:26:51.090 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_4
2021-12-30 14:26:51.122 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: addUsingPOST_1
2021-12-30 14:26:51.123 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_1
2021-12-30 14:26:51.133 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_5
2021-12-30 14:26:51.134 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: updateUsingPOST_1
2021-12-30 14:26:51.137 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_2
2021-12-30 14:26:51.141 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_6
2021-12-30 14:26:51.183 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_7
2021-12-30 14:26:51.191 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: publishUsingPOST_1
2021-12-30 14:26:51.212 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: saveUsingPOST_1
2021-12-30 14:26:51.226 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: getDetailUsingGET_1
2021-12-30 14:26:51.230 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_8
2021-12-30 14:26:51.233 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_9
2021-12-30 14:26:51.235 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_3
2021-12-30 14:26:51.237 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: downloadUsingPOST_1
2021-12-30 14:26:51.242 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: uploadUsingPOST_1
2021-12-30 14:26:51.269 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: updateUsingPOST_2
2021-12-30 14:26:51.294 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Started JoyingPortalApplication in 13.595 seconds (JVM running for 16.576)
2021-12-30 14:28:47.350 [http-nio-8001-exec-3] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/]-Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-12-30 14:28:47.351 [http-nio-8001-exec-3] INFO org.springframework.web.servlet.DispatcherServlet-Initializing Servlet 'dispatcherServlet'
2021-12-30 14:28:47.369 [http-nio-8001-exec-3] INFO org.springframework.web.servlet.DispatcherServlet-Completed initialization in 18 ms
2021-12-30 14:39:24.817 [http-nio-8001-exec-7] INFO com.fzm.portal.aop.LogAop-请求路径: /user/login,请求参数:[LoginParam(telephone=17620078872, email=null, password=123456, verificationCode=null, codetype=null)]
2021-12-30 14:39:24.993 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.UserMapper.selectOne-==> Preparing: SELECT id,telephone,email,password,wallet,nickname,signature,avatar,auth_type,auth_status,is_publish,create_date,update_date,create_time,update_time FROM tb_user WHERE (telephone = ? OR email = ?)
2021-12-30 14:39:25.099 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.UserMapper.selectOne-==> Parameters: 17620078872(String), 17620078872(String)
2021-12-30 14:39:25.161 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.UserMapper.selectOne-<== Total: 1
2021-12-30 14:39:25.245 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.AuthPersonMapper.selectOne-==> Preparing: SELECT id,user_id,name,id_card,card_picture_front,card_picture_back,create_date,update_date FROM tb_auth_person WHERE (user_id = ?)
2021-12-30 14:39:25.247 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.AuthPersonMapper.selectOne-==> Parameters: 36(Integer)
2021-12-30 14:39:25.263 [http-nio-8001-exec-7] DEBUG com.fzm.common.mapper.AuthPersonMapper.selectOne-<== Total: 1
2021-12-30 14:39:25.704 [http-nio-8001-exec-7] INFO com.fzm.portal.aop.LogAop-请求路径:/user/login,接口耗时:888ms
2021-12-30 14:41:01.179 [http-nio-8001-exec-8] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Preparing: SELECT id,telephone,email,password,wallet,nickname,signature,avatar,auth_type,auth_status,is_publish,create_date,update_date,create_time,update_time FROM tb_user WHERE id=?
2021-12-30 14:41:01.181 [http-nio-8001-exec-8] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Parameters: 36(Integer)
2021-12-30 14:41:01.203 [http-nio-8001-exec-8] DEBUG com.fzm.common.mapper.UserMapper.selectById-<== Total: 1
2021-12-30 14:41:01.233 [http-nio-8001-exec-8] INFO com.fzm.portal.aop.LogAop-请求路径: /oss/upload,请求参数:[]
2021-12-30 14:41:01.636 [http-nio-8001-exec-8] INFO com.fzm.portal.aop.LogAop-请求路径:/oss/upload,接口耗时:403ms
2021-12-30 14:41:48.669 [http-nio-8001-exec-3] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Preparing: SELECT id,telephone,email,password,wallet,nickname,signature,avatar,auth_type,auth_status,is_publish,create_date,update_date,create_time,update_time FROM tb_user WHERE id=?
2021-12-30 14:41:48.670 [http-nio-8001-exec-3] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Parameters: 36(Integer)
2021-12-30 14:41:48.686 [http-nio-8001-exec-3] DEBUG com.fzm.common.mapper.UserMapper.selectById-<== Total: 1
2021-12-30 14:41:48.704 [http-nio-8001-exec-3] INFO com.fzm.portal.aop.LogAop-请求路径: /oss/upload,请求参数:[]
2021-12-30 14:41:48.753 [http-nio-8001-exec-3] INFO com.fzm.portal.aop.LogAop-请求路径:/oss/upload,接口耗时:49ms
2021-12-30 14:42:34.435 [http-nio-8001-exec-9] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Preparing: SELECT id,telephone,email,password,wallet,nickname,signature,avatar,auth_type,auth_status,is_publish,create_date,update_date,create_time,update_time FROM tb_user WHERE id=?
2021-12-30 14:42:34.436 [http-nio-8001-exec-9] DEBUG com.fzm.common.mapper.UserMapper.selectById-==> Parameters: 36(Integer)
2021-12-30 14:42:34.455 [http-nio-8001-exec-9] DEBUG com.fzm.common.mapper.UserMapper.selectById-<== Total: 1
2021-12-30 14:42:34.474 [http-nio-8001-exec-9] INFO com.fzm.portal.aop.LogAop-请求路径: /oss/upload,请求参数:[]
2021-12-30 14:42:34.565 [http-nio-8001-exec-9] INFO com.fzm.portal.aop.LogAop-请求路径:/oss/upload,接口耗时:91ms
2021-12-30 15:05:33.137 [Thread-30] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor-Shutting down ExecutorService 'threadPoolTaskExecutor'
2021-12-30 15:05:33.338 [Thread-30] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-1} closing ...
2021-12-30 15:05:33.352 [Thread-30] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-1} closed
2021-12-30 15:05:33.981 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Starting JoyingPortalApplication on LAPTOP-AT8CNAMK with PID 17632 (D:\workspace\fzm-joying\joying-portal\target\classes started by tangtuo in D:\workspace\fzm-joying)
2021-12-30 15:05:33.982 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-The following profiles are active: nj
2021-12-30 15:05:35.108 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Multiple Spring Data modules found, entering strict repository configuration mode!
2021-12-30 15:05:35.108 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-12-30 15:05:35.111 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Finished Spring Data repository scanning in 2ms. Found 0 Redis repository interfaces.
2021-12-30 15:05:35.637 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat initialized with port(s): 8001 (http)
2021-12-30 15:05:35.638 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Initializing ProtocolHandler ["http-nio-8001"]
2021-12-30 15:05:35.638 [restartedMain] INFO org.apache.catalina.core.StandardService-Starting service [Tomcat]
2021-12-30 15:05:35.638 [restartedMain] INFO org.apache.catalina.core.StandardEngine-Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-12-30 15:05:35.693 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/]-Initializing Spring embedded WebApplicationContext
2021-12-30 15:05:35.693 [restartedMain] INFO o.s.b.w.s.c.ServletWebServerApplicationContext-Root WebApplicationContext: initialization completed in 1696 ms
2021-12-30 15:05:35.765 [restartedMain] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure-Init DruidDataSource
2021-12-30 15:05:36.705 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-2} inited
2021-12-30 15:05:37.515 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext-Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collectionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@416726da]
2021-12-30 15:05:37.515 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-2} closing ...
2021-12-30 15:05:37.516 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-2} closed
2021-12-30 15:05:37.517 [restartedMain] INFO org.apache.catalina.core.StandardService-Stopping service [Tomcat]
2021-12-30 15:05:37.524 [restartedMain] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener-
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-30 15:05:37.540 [restartedMain] ERROR org.springframework.boot.SpringApplication-Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collectionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@416726da]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1425)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at com.fzm.portal.JoyingPortalApplication.main(JoyingPortalApplication.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@416726da]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1290)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)
... 23 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@416726da]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481)
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267)
... 40 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/fzm/common/entity/vo/NftVo
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463)
... 42 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.fzm.common.entity.vo.NftVo
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:144)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 46 common frames omitted
2021-12-30 15:06:42.710 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Starting JoyingPortalApplication on LAPTOP-AT8CNAMK with PID 17632 (D:\workspace\fzm-joying\joying-portal\target\classes started by tangtuo in D:\workspace\fzm-joying)
2021-12-30 15:06:42.711 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-The following profiles are active: nj
2021-12-30 15:06:43.270 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Multiple Spring Data modules found, entering strict repository configuration mode!
2021-12-30 15:06:43.270 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-12-30 15:06:43.274 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Finished Spring Data repository scanning in 2ms. Found 0 Redis repository interfaces.
2021-12-30 15:06:43.958 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat initialized with port(s): 8001 (http)
2021-12-30 15:06:43.959 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Initializing ProtocolHandler ["http-nio-8001"]
2021-12-30 15:06:43.959 [restartedMain] INFO org.apache.catalina.core.StandardService-Starting service [Tomcat]
2021-12-30 15:06:43.959 [restartedMain] INFO org.apache.catalina.core.StandardEngine-Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-12-30 15:06:44.014 [restartedMain] INFO o.a.c.c.ContainerBase.[Tomcat-1].[localhost].[/]-Initializing Spring embedded WebApplicationContext
2021-12-30 15:06:44.014 [restartedMain] INFO o.s.b.w.s.c.ServletWebServerApplicationContext-Root WebApplicationContext: initialization completed in 1300 ms
2021-12-30 15:06:44.091 [restartedMain] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure-Init DruidDataSource
2021-12-30 15:06:45.035 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-3} inited
2021-12-30 15:06:45.796 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext-Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collectionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@5b59fcdf]
2021-12-30 15:06:45.796 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-3} closing ...
2021-12-30 15:06:45.797 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-3} closed
2021-12-30 15:06:45.797 [restartedMain] INFO org.apache.catalina.core.StandardService-Stopping service [Tomcat]
2021-12-30 15:06:45.803 [restartedMain] INFO o.s.b.a.l.ConditionEvaluationReportLoggingListener-
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-12-30 15:06:45.803 [restartedMain] ERROR org.springframework.boot.SpringApplication-Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collectionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@5b59fcdf]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1425)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at com.fzm.portal.JoyingPortalApplication.main(JoyingPortalApplication.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nftServiceImpl': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@5b59fcdf]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1290)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1205)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)
... 23 common frames omitted
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.fzm.common.service.impl.NftServiceImpl] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@5b59fcdf]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481)
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267)
... 40 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/fzm/common/entity/vo/NftVo
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463)
... 42 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.fzm.common.entity.vo.NftVo
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:144)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 46 common frames omitted
2021-12-30 15:08:30.027 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Starting JoyingPortalApplication on LAPTOP-AT8CNAMK with PID 17632 (D:\workspace\fzm-joying\joying-portal\target\classes started by tangtuo in D:\workspace\fzm-joying)
2021-12-30 15:08:30.027 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-The following profiles are active: nj
2021-12-30 15:08:30.477 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Multiple Spring Data modules found, entering strict repository configuration mode!
2021-12-30 15:08:30.478 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2021-12-30 15:08:30.481 [restartedMain] INFO o.s.d.r.config.RepositoryConfigurationDelegate-Finished Spring Data repository scanning in 2ms. Found 0 Redis repository interfaces.
2021-12-30 15:08:30.759 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat initialized with port(s): 8001 (http)
2021-12-30 15:08:30.759 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Initializing ProtocolHandler ["http-nio-8001"]
2021-12-30 15:08:30.760 [restartedMain] INFO org.apache.catalina.core.StandardService-Starting service [Tomcat]
2021-12-30 15:08:30.760 [restartedMain] INFO org.apache.catalina.core.StandardEngine-Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-12-30 15:08:30.797 [restartedMain] INFO o.a.c.c.ContainerBase.[Tomcat-2].[localhost].[/]-Initializing Spring embedded WebApplicationContext
2021-12-30 15:08:30.797 [restartedMain] INFO o.s.b.w.s.c.ServletWebServerApplicationContext-Root WebApplicationContext: initialization completed in 766 ms
2021-12-30 15:08:30.838 [restartedMain] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure-Init DruidDataSource
2021-12-30 15:08:32.009 [restartedMain] INFO com.alibaba.druid.pool.DruidDataSource-{dataSource-4} inited
2021-12-30 15:08:32.782 [restartedMain] INFO org.redisson.Version-Redisson 3.16.0
2021-12-30 15:08:32.882 [redisson-netty-10-32] INFO o.r.connection.pool.MasterPubSubConnectionPool-1 connections initialized for 146.56.218.121/146.56.218.121:6379
2021-12-30 15:08:32.973 [redisson-netty-10-19] INFO org.redisson.connection.pool.MasterConnectionPool-24 connections initialized for 146.56.218.121/146.56.218.121:6379
2021-12-30 15:08:33.060 [restartedMain] WARN c.b.mybatisplus.core.metadata.TableInfoHelper-Warn: Could not find @TableId in Class: com.fzm.common.entity.CopyrightApplyOwnerRelation.
2021-12-30 15:08:33.153 [restartedMain] WARN c.b.mybatisplus.core.metadata.TableInfoHelper-Warn: Could not find @TableId in Class: com.fzm.common.entity.CopyrightAuthorityRelation.
2021-12-30 15:08:33.267 [restartedMain] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor-Initializing ExecutorService 'threadPoolTaskExecutor'
2021-12-30 15:08:33.975 [restartedMain] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping-Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2021-12-30 15:08:34.136 [restartedMain] INFO o.s.b.d.autoconfigure.OptionalLiveReloadServer-LiveReload server is running on port 35729
2021-12-30 15:08:34.454 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol-Starting ProtocolHandler ["http-nio-8001"]
2021-12-30 15:08:34.457 [restartedMain] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer-Tomcat started on port(s): 8001 (http) with context path ''
2021-12-30 15:08:34.458 [restartedMain] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper-Context refreshed
2021-12-30 15:08:34.459 [restartedMain] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper-Found 1 custom documentation plugin(s)
2021-12-30 15:08:34.464 [restartedMain] INFO s.d.spring.web.scanners.ApiListingReferenceScanner-Scanning for api listing references
2021-12-30 15:08:34.475 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_1
2021-12-30 15:08:34.480 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_2
2021-12-30 15:08:34.489 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_3
2021-12-30 15:08:34.506 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: getByIdUsingGET_1
2021-12-30 15:08:34.519 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_4
2021-12-30 15:08:34.533 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: addUsingPOST_1
2021-12-30 15:08:34.534 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_1
2021-12-30 15:08:34.538 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_5
2021-12-30 15:08:34.539 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: updateUsingPOST_1
2021-12-30 15:08:34.540 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_2
2021-12-30 15:08:34.543 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_6
2021-12-30 15:08:34.566 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_7
2021-12-30 15:08:34.570 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: publishUsingPOST_1
2021-12-30 15:08:34.579 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: saveUsingPOST_1
2021-12-30 15:08:34.584 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: getDetailUsingGET_1
2021-12-30 15:08:34.586 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_8
2021-12-30 15:08:34.587 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: listUsingGET_9
2021-12-30 15:08:34.588 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: deleteUsingPOST_3
2021-12-30 15:08:34.589 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: downloadUsingPOST_1
2021-12-30 15:08:34.592 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: uploadUsingPOST_1
2021-12-30 15:08:34.609 [restartedMain] INFO s.d.s.w.r.operation.CachingOperationNameGenerator-Generating unique operation named: updateUsingPOST_2
2021-12-30 15:08:34.615 [restartedMain] INFO com.fzm.portal.JoyingPortalApplication-Started JoyingPortalApplication in 4.638 seconds (JVM running for 2519.897)
2021-12-30 15:08:34.617 [restartedMain] INFO o.s.b.d.a.ConditionEvaluationDeltaLoggingListener-Condition evaluation unchanged
......@@ -35,6 +35,10 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
......@@ -104,7 +108,6 @@
<artifactId>redisson</artifactId>
<version>3.16.0</version>
</dependency>
</dependencies>
</dependencyManagement>
......
......@@ -397,13 +397,15 @@ CREATE TABLE `tb_file_template` (
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '版权附件模板表' ROW_FORMAT = Dynamic;
INSERT INTO `tb_file_template` VALUES (1, '权利取得方式证明材料附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/02aba8bb6ad14d828534d741ae6ff0c7/权利取得方式证明材料附件.docx', 0);
INSERT INTO `tb_file_template` VALUES (2, '代理委托书.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/1a3f7812993f4f8785b6d50536541f36/代理委托书.docx', 1);
INSERT INTO `tb_file_template` VALUES (3, '权利归属证明材料《合作作品权属协议书》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/a2a155f3d0c044b5955a3431fe0dcdab/权利归属证明材料《合作作品权属协议书》附件.docx', 2);
INSERT INTO `tb_file_template` VALUES (4, '权利归属证明材料《著作权权属申请》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/252cdb300d984427859b7b6c5daabfeb/权利归属证明材料《著作权权属申请》附件.docx', 3);
INSERT INTO `tb_file_template` VALUES (5, '权利归属证明材料《职务作品权属约定》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/ba81002e5d98484e94d141a17d5c47f6/权利归属证明材料《职务作品权属约定》附件.docx', 4);
INSERT INTO `tb_file_template` VALUES (6, '权利归属证明材料《委托创作协议书(甲方享有全部权利)》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/d42e75a9c31f49729758518f9f7fa323/权利归属证明材料《委托创作协议书(甲方享有全部权利)》附件.docx', 5);
INSERT INTO `tb_file_template` VALUES (7, '权利归属证明材料《委托创作协议书(作者保留署名权)》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/519f7ecab6cd4e7eb24847621249e416/权利归属证明材料《委托创作协议书(作者保留署名权)》附件.docx', 5);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (1, '权利取得方式证明材料附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/02aba8bb6ad14d828534d741ae6ff0c7/权利取得方式证明材料附件.docx', 0);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (2, '业务代理委托书.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/20b5468e37304616be66a11e273fba01/业务代理委托书.docx', 1);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (3, '权利归属证明材料《合作作品权属协议书》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/a2a155f3d0c044b5955a3431fe0dcdab/权利归属证明材料《合作作品权属协议书》附件.docx', 2);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (4, '权利归属证明材料《著作权权属申请》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/252cdb300d984427859b7b6c5daabfeb/权利归属证明材料《著作权权属申请》附件.docx', 3);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (5, '权利归属证明材料《职务作品权属约定》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/ba81002e5d98484e94d141a17d5c47f6/权利归属证明材料《职务作品权属约定》附件.docx', 4);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (6, '权利归属证明材料《委托创作协议书(甲方享有全部权利)》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/d42e75a9c31f49729758518f9f7fa323/权利归属证明材料《委托创作协议书(甲方享有全部权利)》附件.docx', 5);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (7, '权利归属证明材料《委托创作协议书(作者保留署名权)》附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/519f7ecab6cd4e7eb24847621249e416/权利归属证明材料《委托创作协议书(作者保留署名权)》附件.docx', 5);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (8, '作品登记委托书.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/9954992e8e6a440aa75d261bb9c3b6fe/作品登记委托书.docx', 6);
INSERT INTO `tb_file_template`(`id`, `file_name`, `file_url`, `type`) VALUES (9, '权利保证书(作品)附件.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211230/4a0cc83384464750b86cbae409a47289/权利保证书(作品)附件.docx', 7);
-- ----------------------------
-- Table structure for tb_nft
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment