Commit 62e4848f authored by tangtuo's avatar tangtuo

版权相关功能开发

parent 7968f009
...@@ -102,11 +102,4 @@ public class NftController { ...@@ -102,11 +102,4 @@ public class NftController {
List<NftTransferRecordVo> list = nftTransferRecordService.getTransferRecordList(nftHash, fromAddress, toAddress, startDate, endDate); List<NftTransferRecordVo> list = nftTransferRecordService.getTransferRecordList(nftHash, fromAddress, toAddress, startDate, endDate);
return ResponseModel.success(new PageInfo<>(list)); 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; 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.core.lang.TypeReference;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fzm.common.config.RabbitMQConfig; 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.CopyrightQueryRequest;
import com.fzm.common.entity.dto.CopyrightQueryResponse; 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.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.CopyrightProperties; 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 com.fzm.common.utils.CopyrightSignUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener; 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 org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ExecutionException;
/** /**
* @author tangtuo * @author tangtuo
...@@ -30,13 +40,30 @@ public class CopyrightLister { ...@@ -30,13 +40,30 @@ public class CopyrightLister {
@Resource @Resource
private CopyrightProperties copyrightProperties; 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 * @param serial_code
*/ */
@RabbitListener(queues = RabbitMQConfig.COPYRIGHT_QUEUE) @RabbitListener(queues = RabbitMQConfig.COPYRIGHT_QUEUE)
public void listerCopyrightApply(String serial_code) { public void listerCopyrightApply(String serial_code) throws ExecutionException, InterruptedException {
log.info("监听者接收消息, 流水号为: {}", serial_code); log.info("监听者接收消息, 流水号为: {}", serial_code);
CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId()); CopyrightQueryRequest request = new CopyrightQueryRequest(serial_code, copyrightProperties.getAppId());
TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret()); TreeMap<String, String> map = this.beanToMap(request, copyrightProperties.getAppSecret());
...@@ -56,16 +83,55 @@ public class CopyrightLister { ...@@ -56,16 +83,55 @@ public class CopyrightLister {
if (!copyrightResponse.isSuccess()) { if (!copyrightResponse.isSuccess()) {
throw GlobalException.newException(ResultCode.COPYRIGHT_FAILED, copyrightResponse.getMessage()); 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) { private TreeMap<String, String> beanToMap(CopyrightQueryRequest request, String app_secret) {
TreeMap<String, String> map = JSONUtil.toBean(JSONUtil.toJsonStr(request), new TypeReference<TreeMap<String, String>>() { TreeMap<String, String> map = JSONUtil.toBean(JSONUtil.toJsonStr(request), new TypeReference<TreeMap<String, String>>() {
}, true); }, true);
map.put("biz_content", JSONUtil.toJsonStr(request.getBiz_content()));
map.put("app_secret", app_secret); map.put("app_secret", app_secret);
return map; 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: ...@@ -97,7 +97,8 @@ aliyun:
encrypt-bucket: test-nft-2 encrypt-bucket: test-nft-2
copyright: 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-id: 289391457858
app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK app-secret: xExjKUCYH1nrze6Hpxf8s1dYWdxEggo2FiwKlZKygCItOV7E8bFhkyr4C192uhK
...@@ -79,14 +79,15 @@ swagger: ...@@ -79,14 +79,15 @@ swagger:
chain: chain:
para: para:
rpc-url: http://146.56.197.42:12021 rpcUrl: http://146.56.197.42:12021
withhold-addr: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy tokenManager: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
withhold-key: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0 tokenManagerKey: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
withhold: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withholdKey: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
title: user.p.mall. title: user.p.mall.
admin: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1 cName: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
admin-key: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b cAddr: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
contract-name: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
contract-address: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
aliyun: aliyun:
oss: oss:
......
spring: spring:
profiles: profiles:
active: nj active: local
application: application:
name: ly-admin name: ly-admin
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<dependency> <dependency>
<groupId>cn.fzm.chain</groupId> <groupId>cn.fzm.chain</groupId>
<artifactId>simple-sdk</artifactId> <artifactId>simple-sdk</artifactId>
<version>2.6.1</version> <version>2.9.6</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
......
...@@ -61,7 +61,7 @@ public class RabbitMQConfig { ...@@ -61,7 +61,7 @@ public class RabbitMQConfig {
@Bean @Bean
public Queue dlQueue() { public Queue dlQueue() {
return QueueBuilder.durable(DEAD_LETTER_QUEUE) return QueueBuilder.durable(DEAD_LETTER_QUEUE)
.ttl(1000 * 60 * 60 * 2) .ttl(1000 * 60 * 2)
.deadLetterExchange(DEAD_LETTER_DIRECT) .deadLetterExchange(DEAD_LETTER_DIRECT)
.deadLetterRoutingKey("copyright.notify") .deadLetterRoutingKey("copyright.notify")
.build(); .build();
......
...@@ -95,6 +95,12 @@ public class CopyrightApply { ...@@ -95,6 +95,12 @@ public class CopyrightApply {
@ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败") @ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败")
private Integer registerState; private Integer registerState;
@ApiModelProperty(value = "存证哈希")
private String evidenceHash;
@ApiModelProperty(value = "存证日期")
private Date evidenceDate;
@ApiModelProperty(value = "驳回理由") @ApiModelProperty(value = "驳回理由")
private String rejectReason; private String rejectReason;
...@@ -102,6 +108,9 @@ public class CopyrightApply { ...@@ -102,6 +108,9 @@ public class CopyrightApply {
@ApiModelProperty("json串") @ApiModelProperty("json串")
private String content; private String content;
@ApiModelProperty("登记证书编号,在版权登记审核通过后生成")
private String registerCode;
private Date createDate; private Date createDate;
private Date updateDate; private Date updateDate;
......
package com.fzm.common.entity; package com.fzm.common.entity;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fzm.common.entity.dto.CopyrightDTO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
...@@ -87,7 +84,6 @@ public class CopyrightOwner { ...@@ -87,7 +84,6 @@ public class CopyrightOwner {
@ApiModelProperty(value = "证件照片(营业执照等)") @ApiModelProperty(value = "证件照片(营业执照等)")
private String certificatesPhoto; private String certificatesPhoto;
@NotBlank(message = "委托证明不能为空")
@ApiModelProperty(value = "委托证明") @ApiModelProperty(value = "委托证明")
private String entrustProve; private String entrustProve;
......
...@@ -94,7 +94,6 @@ public class CopyrightDTO { ...@@ -94,7 +94,6 @@ public class CopyrightDTO {
@ApiModelProperty(value = "权力归属方式") @ApiModelProperty(value = "权力归属方式")
private String authorityAscriptionMode; private String authorityAscriptionMode;
@NotBlank(message = "权力归属材料不能为空")
@ApiModelProperty(value = "权力归属证明材料的文件地址") @ApiModelProperty(value = "权力归属证明材料的文件地址")
private String authorityAscriptionProve; private String authorityAscriptionProve;
......
package com.fzm.common.entity.dto; package com.fzm.common.entity.dto;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -20,7 +21,7 @@ public class CopyrightQueryRequest { ...@@ -20,7 +21,7 @@ public class CopyrightQueryRequest {
private String sign_type = "md5"; private String sign_type = "md5";
private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
private String version = "1.0"; private String version = "1.0";
private BizContent biz_content; private String biz_content;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
...@@ -30,6 +31,6 @@ public class CopyrightQueryRequest { ...@@ -30,6 +31,6 @@ public class CopyrightQueryRequest {
public CopyrightQueryRequest(String serial_code, String app_id) { public CopyrightQueryRequest(String serial_code, String app_id) {
this.app_id = 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; ...@@ -9,6 +9,8 @@ import lombok.Data;
@Data @Data
public class CopyrightQueryResponse { public class CopyrightQueryResponse {
private String apply_time;
private Integer audit_status; private Integer audit_status;
private CertificateInfo certificate; private CertificateInfo certificate;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package com.fzm.common.entity.dto; package com.fzm.common.entity.dto;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.fzm.common.entity.*; import com.fzm.common.entity.*;
import com.fzm.common.entity.vo.CopyrightVo; import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.enums.*; import com.fzm.common.enums.*;
...@@ -31,7 +32,7 @@ public class CopyrightRequest { ...@@ -31,7 +32,7 @@ public class CopyrightRequest {
private String sign_type = "md5"; private String sign_type = "md5";
private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); private String timestamp = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
private String version = "1.0"; private String version = "1.0";
private CopyrightDetail biz_content; private String biz_content;
@Data @Data
public static class CopyrightDetail { public static class CopyrightDetail {
...@@ -353,7 +354,7 @@ public class CopyrightRequest { ...@@ -353,7 +354,7 @@ public class CopyrightRequest {
public CopyrightRequest(CopyrightVo copyrightVo, OpusCategory category, String app_id, String sign) { 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.app_id = app_id;
this.sign = sign; 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 { ...@@ -87,6 +87,18 @@ public class CopyrightVo {
@ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败") @ApiModelProperty(value = "登记状态 0-待审核 1-登记成功 2-审核失败")
private Integer registerState; private Integer registerState;
@ApiModelProperty(value = "存证哈希")
private String evidenceHash;
@ApiModelProperty(value = "存证日期")
private Date evidenceDate;
@ApiModelProperty("登记证书编号,在版权登记审核通过后生成")
private String registerCode;
@ApiModelProperty(value = "作品类别")
private OpusCategory opusCategory;
@ApiModelProperty(value = "文件列表") @ApiModelProperty(value = "文件列表")
private List<CopyrightFile> files; private List<CopyrightFile> files;
......
...@@ -18,20 +18,13 @@ public class NftCertificateVo { ...@@ -18,20 +18,13 @@ public class NftCertificateVo {
@ApiModelProperty("主键") @ApiModelProperty("主键")
private Integer id; private Integer id;
@ApiModelProperty("名称") @ApiModelProperty("存证名称")
private String name; private String name;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("发行人") @ApiModelProperty("存证人")
private String publisher; private String publisher;
@ApiModelProperty("发行人地址")
private String wallet;
@ApiModelProperty("剧本hash")
private String fileHash;
@ApiModelProperty("nft哈希") @ApiModelProperty("nft哈希")
private String nftHash; private String nftHash;
...@@ -39,26 +32,13 @@ public class NftCertificateVo { ...@@ -39,26 +32,13 @@ public class NftCertificateVo {
@ApiModelProperty("存证时间") @ApiModelProperty("存证时间")
private Date publishTime; private Date publishTime;
@ApiModelProperty("二维码")
private String qrCode;
@ApiModelProperty("剧本审核状态 0-未审核 1-已审核")
private Integer examineStatus;
@ApiModelProperty("版权证明: 0-未认证 1-已认证") public NftCertificateVo(Nft nft, User user) {
private Integer copyrightStatus;
public NftCertificateVo(Nft nft, User user, String qrCode) {
this.name = nft.getName(); this.name = nft.getName();
this.fileHash = nft.getFileHash();
this.nftHash = nft.getNftHash(); this.nftHash = nft.getNftHash();
this.id = nft.getId(); this.id = nft.getId();
this.publisher = user.getNickname(); this.publisher = user.getNickname();
this.publishTime = nft.getPublishTime(); 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; package com.fzm.common.entity.vo;
import cn.hutool.core.date.DateUtil; 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.Nft;
import com.fzm.common.entity.User; import com.fzm.common.entity.User;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import sun.management.counter.perf.PerfInstrumentation; import sun.management.counter.perf.PerfInstrumentation;
import java.util.Date;
import java.util.stream.Collectors;
/** /**
* @author tangtuo * @author tangtuo
* @date 2021/7/1 10:35 * @date 2021/7/1 10:35
...@@ -17,82 +23,100 @@ public class NftVo { ...@@ -17,82 +23,100 @@ public class NftVo {
@ApiModelProperty("主键") @ApiModelProperty("主键")
private Integer id; private Integer id;
@ApiModelProperty("nft拥有者的用户id") @ApiModelProperty("存证名称")
private Integer userId;
@ApiModelProperty("名称")
private String name; private String name;
@ApiModelProperty("封面") @ApiModelProperty("nft编号")
private String cover; private String nftId;
@ApiModelProperty("存证哈希")
private String nftHash;
@ApiModelProperty("发行个数")
private Integer count = 1;
@ApiModelProperty("类目") @ApiModelProperty("发行状态")
private String category; private String publishStatus = "已发行";
@ApiModelProperty("存证人")
private String evidencer;
@ApiModelProperty("发行人")
private String publisher;
@ApiModelProperty("头像") @ApiModelProperty("文件哈希")
private String avatar; private String fileHash;
@ApiModelProperty("钱包地址") @ApiModelProperty(value = "存证时间")
private String wallet; private Date evidenceTime;
@ApiModelProperty("个性签名") @ApiModelProperty("版权详情")
private String signature; private Copyright copyright;
@ApiModelProperty("nft编号") @ApiModelProperty("持有人用户id")
private String nftId; private Integer userId;
@ApiModelProperty("剧本hash")
private String fileHash;
@ApiModelProperty("文件名") @Data
private String fileName; @NoArgsConstructor
public static class Copyright {
@ApiModelProperty("存证哈希")
private String evidenceHash;
@ApiModelProperty("文件地址") @ApiModelProperty("存证人")
private String fileUrl; private String evidencer = "湖北版权局";
@ApiModelProperty("nft哈希") @ApiModelProperty("登记号")
private String nftHash; private String registerCode;
@ApiModelProperty("发行时间") @ApiModelProperty("作品名称")
private String publishTime; private String opusName;
@ApiModelProperty("作品类型")
private String opusType;
@ApiModelProperty("作者") @ApiModelProperty("作者")
private String author; private String author;
@ApiModelProperty("简介") @ApiModelProperty("著作权人")
private String synopsis; private String copyrightOwner;
@ApiModelProperty("作品完成时间")
private Date opusCompleteDate;
@ApiModelProperty("作品首次发表时间")
private Date firstPublishDate;
@ApiModelProperty("登记时间")
private Date registerDate;
@ApiModelProperty("是否收藏") @ApiModelProperty("存证时间")
private Boolean collection; 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.id = nft.getId();
this.author = nft.getAuthor(); this.evidencer = nft.getAuthor();
this.userId = nft.getUserId();
this.name = nft.getName(); this.name = nft.getName();
this.fileHash = nft.getFileHash();
this.nftId = nft.getNftId(); 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.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; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.CopyrightApply; import com.fzm.common.entity.CopyrightApply;
import com.fzm.common.entity.dto.CopyrightDTO; import com.fzm.common.entity.dto.CopyrightDTO;
import com.fzm.common.entity.vo.CopyrightApplyVo; 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.entity.vo.CopyrightVo;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
...@@ -103,4 +104,26 @@ public interface CopyrightApplyService extends IService<CopyrightApply> { ...@@ -103,4 +104,26 @@ public interface CopyrightApplyService extends IService<CopyrightApply> {
*/ */
int getSuccessCount(); 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; ...@@ -6,10 +6,12 @@ import com.fzm.common.entity.NftDto;
import com.fzm.common.entity.vo.CollectionNftVo; import com.fzm.common.entity.vo.CollectionNftVo;
import com.fzm.common.entity.vo.NftCertificateVo; import com.fzm.common.entity.vo.NftCertificateVo;
import com.fzm.common.entity.vo.NftListVo; import com.fzm.common.entity.vo.NftListVo;
import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.params.NftTransferParam; import com.fzm.common.params.NftTransferParam;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException;
/** /**
* @author tangtuo * @author tangtuo
...@@ -159,4 +161,12 @@ public interface NftService extends IService<Nft> { ...@@ -159,4 +161,12 @@ public interface NftService extends IService<Nft> {
* @return * @return
*/ */
Nft getByTokenId(Long tokenId); Nft getByTokenId(Long tokenId);
/**
* 获取nft详情
*
* @param nftHash
* @return
*/
NftVo getDetail(String nftHash) throws ExecutionException, InterruptedException;
} }
package com.fzm.common.service.impl; package com.fzm.common.service.impl;
import cn.fzm.chain.simplesdk.client.ParaChainClient; 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.constant.TxStatusEnum;
import cn.fzm.chain.simplesdk.model.TxResult; import cn.fzm.chain.simplesdk.model.TxResult;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
...@@ -10,20 +10,19 @@ import cn.hutool.core.util.CharsetUtil; ...@@ -10,20 +10,19 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.constant.RedisConstant; import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.SystemConstant; import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.Admin;
import com.fzm.common.entity.CommemorateNft; import com.fzm.common.entity.CommemorateNft;
import com.fzm.common.entity.Nft; import com.fzm.common.entity.Nft;
import com.fzm.common.entity.User; import com.fzm.common.entity.User;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.AdminMapper;
import com.fzm.common.mapper.CommemorateNftMapper; import com.fzm.common.mapper.CommemorateNftMapper;
import com.fzm.common.service.*; import com.fzm.common.service.CommemorateNftService;
import com.fzm.common.utils.JsonUtil; 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 com.fzm.common.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -31,10 +30,10 @@ import org.redisson.api.RLock; ...@@ -31,10 +30,10 @@ import org.redisson.api.RLock;
import org.redisson.api.RSemaphore; import org.redisson.api.RSemaphore;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.Instant;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -57,10 +56,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -57,10 +56,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
@Resource @Resource
private ParaChainClient paraChainClient; private ParaChainClient paraChainClient;
@Value("${chain.para.contract-name}")
private String contractName;
@Value("${chain.para.contract-address}") @Value("${chain.para.cAddr}")
private String contractAddr; private String contractAddr;
@Resource @Resource
...@@ -72,6 +69,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -72,6 +69,8 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
@Resource @Resource
private RedisUtil redisUtil; 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 @Override
public Integer publish(CommemorateNft commemorateNft) { public Integer publish(CommemorateNft commemorateNft) {
User user = userService.getUserByToken(); User user = userService.getUserByToken();
...@@ -89,15 +88,12 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -89,15 +88,12 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
String tokenInfo = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8); String tokenInfo = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);
log.info("加密上链数据: {}", tokenInfo); log.info("加密上链数据: {}", tokenInfo);
// 发行nft // 发行nft
// 生产tokenId long tokenId = getTokenId();
Snowflake snowflake = IdUtil.getSnowflake(1, 1); String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTokenEnum.ERC1155, 0L, wallet, wallet, privkey, tokenId, 1, str, true);
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);
if (StringUtils.isBlank(hash)) { if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.FAILED, "nft发行失败"); 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)) { if (StringUtils.isBlank(tradeHash)) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败"); throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败");
} }
...@@ -120,6 +116,7 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -120,6 +116,7 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
public Boolean receive(Integer id) throws InterruptedException { public Boolean receive(Integer id) throws InterruptedException {
User user = userService.getUserByToken(); User user = userService.getUserByToken();
// 加锁,避免一个用户可以并发领取 // 加锁,避免一个用户可以并发领取
RLock lock = redisson.getLock("receive:nft:" + user.getId()); RLock lock = redisson.getLock("receive:nft:" + user.getId());
boolean tryLock = lock.tryLock(30, TimeUnit.SECONDS); boolean tryLock = lock.tryLock(30, TimeUnit.SECONDS);
if (!tryLock) { if (!tryLock) {
...@@ -144,9 +141,9 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -144,9 +141,9 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper,
throw GlobalException.newException(ResultCode.FAILED, "抱歉,此纪念版nft已全部被领取完"); 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 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 // 领取纪念版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)) { if (StringUtils.isBlank(hash)) {
// 领取失败要释放信号量 // 领取失败要释放信号量
semaphore.release(); semaphore.release();
...@@ -183,6 +180,17 @@ public class CommemorateNftServiceImpl extends ServiceImpl<CommemorateNftMapper, ...@@ -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) { public static void main(String[] args) {
int a = 12; int a = 12;
String code = "00000" + a; String code = "00000" + a;
......
...@@ -15,6 +15,7 @@ import com.fzm.common.entity.dto.CopyrightDTO; ...@@ -15,6 +15,7 @@ import com.fzm.common.entity.dto.CopyrightDTO;
import com.fzm.common.entity.dto.CopyrightRequest; import com.fzm.common.entity.dto.CopyrightRequest;
import com.fzm.common.entity.dto.CopyrightResponse; import com.fzm.common.entity.dto.CopyrightResponse;
import com.fzm.common.entity.vo.CopyrightApplyVo; 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.entity.vo.CopyrightVo;
import com.fzm.common.enums.CopyrightApplyState; import com.fzm.common.enums.CopyrightApplyState;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
...@@ -200,6 +201,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -200,6 +201,11 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
CopyrightApply copyrightApply = getById(id); CopyrightApply copyrightApply = getById(id);
return new CopyrightVo(copyrightApply); return new CopyrightVo(copyrightApply);
}, threadPoolTaskExecutor); }, threadPoolTaskExecutor);
CompletableFuture<Void> categoryFuture = applyFuture.thenAcceptAsync((result) -> {
// 查询类别
OpusCategory category = opusCategoryService.getById(result.getOpusCategoryId());
result.setOpusCategory(category);
}, threadPoolTaskExecutor);
CompletableFuture<Void> filesFuture = applyFuture.thenAcceptAsync((result) -> { CompletableFuture<Void> filesFuture = applyFuture.thenAcceptAsync((result) -> {
// 查询附件列表 // 查询附件列表
List<CopyrightFile> files = copyrightFileService.getByCopyrightId(id); List<CopyrightFile> files = copyrightFileService.getByCopyrightId(id);
...@@ -221,7 +227,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -221,7 +227,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
result.setAuthorities(authorities); result.setAuthorities(authorities);
}, threadPoolTaskExecutor); }, threadPoolTaskExecutor);
// 等所有异步任务都完成以后返回结果 // 等所有异步任务都完成以后返回结果
CompletableFuture.allOf(applyFuture, filesFuture, authorsFuture, ownerFuture, authoritiesFuture).get(); CompletableFuture.allOf(categoryFuture, filesFuture, authorsFuture, ownerFuture, authoritiesFuture).get();
return applyFuture.get(); return applyFuture.get();
} }
...@@ -346,7 +352,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -346,7 +352,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
String serial_code = copyrightResponse.getSerial_code(); String serial_code = copyrightResponse.getSerial_code();
rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code); rabbitTemplate.convertAndSend(RabbitMQConfig.COPYRIGHT_DIRECT, "copyright.apply", serial_code);
copyright.setSerialNum(serial_code); copyright.setSerialNum(serial_code);
copyright.setRegisterState(CopyrightApplyState.SUCCEEDED.getCode()); copyright.setRegisterState(CopyrightApplyState.SUBMITTED.getCode());
copyright.setRejectReason(""); copyright.setRejectReason("");
return updateById(copyright); return updateById(copyright);
} }
...@@ -354,7 +360,6 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -354,7 +360,6 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
private TreeMap<String, String> beanToMap(CopyrightRequest copyrightRequest, String app_secret) { private TreeMap<String, String> beanToMap(CopyrightRequest copyrightRequest, String app_secret) {
TreeMap<String, String> treeMap = JSONUtil.toBean(JSONUtil.toJsonStr(copyrightRequest), new TypeReference<TreeMap<String, String>>() { TreeMap<String, String> treeMap = JSONUtil.toBean(JSONUtil.toJsonStr(copyrightRequest), new TypeReference<TreeMap<String, String>>() {
}, true); }, true);
treeMap.put("biz_content", JSONUtil.toJsonStr(copyrightRequest.getBiz_content()));
treeMap.put("app_secret", app_secret); treeMap.put("app_secret", app_secret);
return treeMap; return treeMap;
...@@ -367,4 +372,36 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper, ...@@ -367,4 +372,36 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
return this.count(wrapper); 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; package com.fzm.common.service.impl;
import cn.fzm.chain.simplesdk.client.ParaChainClient; 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.constant.TxStatusEnum;
import cn.fzm.chain.simplesdk.model.TxResult; import cn.fzm.chain.simplesdk.model.TxResult;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; 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.core.util.RandomUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -19,7 +15,9 @@ import com.fzm.common.constant.RedisConstant; ...@@ -19,7 +15,9 @@ import com.fzm.common.constant.RedisConstant;
import com.fzm.common.constant.SystemConstant; import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.*; import com.fzm.common.entity.*;
import com.fzm.common.entity.vo.CollectionNftVo; 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.NftListVo;
import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.enums.AuthStatus; import com.fzm.common.enums.AuthStatus;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
...@@ -35,6 +33,7 @@ import com.github.pagehelper.PageHelper; ...@@ -35,6 +33,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -42,7 +41,9 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -42,7 +41,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -87,12 +88,18 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -87,12 +88,18 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
@Resource @Resource
private HttpServletRequest request; private HttpServletRequest request;
@Value("${chain.para.contract-name}") @Resource
private String contractName; private Redisson redisson;
@Value("${chain.para.contract-address}") @Value("${chain.para.cAddr}")
private String contractAddr; 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 @Override
public NftDto saveNft(Nft nft) { public NftDto saveNft(Nft nft) {
Integer userId = JwtUtil.getUserIdFromToken(request.getHeader("Authorization")); Integer userId = JwtUtil.getUserIdFromToken(request.getHeader("Authorization"));
...@@ -119,24 +126,23 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -119,24 +126,23 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
// 获取用户的私钥 // 获取用户的私钥
String privkey = paraChainClient.walletDumpPrivkey(wallet); String privkey = paraChainClient.walletDumpPrivkey(wallet);
// 生产tokenId // 生产tokenId
Snowflake snowflake = IdUtil.getSnowflake(1, 1); long tokenId = getTokenId();
long tokenId = snowflake.nextId();
Nft nft = getById(nftDto.getId()); Nft nft = getById(nftDto.getId());
Map<String, String> map = new HashMap<>(); TreeMap<String, String> map = new TreeMap<>();
map.put("hash", nftDto.getFileHash()); map.put("hash", nftDto.getFileHash());
map.put("publishAddress", wallet); map.put("publishAddress", wallet);
map.put("author", nft.getAuthor()); map.put("author", nft.getAuthor());
map.put("synopsis", nft.getSynopsis()); map.put("synopsis", nft.getSynopsis());
String str = JSONUtil.toJsonStr(map); String str = JSONUtil.toJsonStr(map);
String tokenInfo = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8); String tokenInfo = this.formatTokenInfo(map);
log.info("tokenInfo:{}", tokenInfo); log.info("tokenInfo:{}", tokenInfo);
// 发行nft // 发行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, EvmTokenEnum.ERC1155, 0L, wallet, wallet, privkey, tokenId, 1, str, true);
String hash = paraChainClient.evmPublishToken(abi, contractAddr, EvmTransferEnum.ERC1155, 0L, wallet, privkey, tokenId, 1, str, true);
if (StringUtils.isBlank(hash)) { if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.FAILED, "nft发行失败"); 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)) { if (StringUtils.isBlank(tradeHash)) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败"); throw GlobalException.newException(ResultCode.PUBLISH_ERROR, "nft发行失败");
} }
...@@ -145,7 +151,6 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -145,7 +151,6 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) { if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, txResult.getErrMsg().getValue()); throw GlobalException.newException(ResultCode.PUBLISH_ERROR, txResult.getErrMsg().getValue());
} }
String realHash = paraChainClient.getRealTxHashFromGrp(hash); String realHash = paraChainClient.getRealTxHashFromGrp(hash);
/*TxResult txResult = paraChainClient.cycleConfirmTxWithHash(realHash, false, 1000); /*TxResult txResult = paraChainClient.cycleConfirmTxWithHash(realHash, false, 1000);
if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) { if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) {
...@@ -182,14 +187,11 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -182,14 +187,11 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "短信验证码校验失败"); throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "短信验证码校验失败");
} }
/*// 不能自己向自己转让nft String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), user.getWallet());
if (user.getWallet().equals(receiveUser.getWallet())) { log.info("tokenInfo:{}", tokenInfo);
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());
// 转让nft // 转让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)) { if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "nft转让失败"); throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "nft转让失败");
} }
...@@ -242,6 +244,17 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -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) { private String getCodeType(String type) {
switch (type) { switch (type) {
case "sms": case "sms":
...@@ -379,9 +392,27 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -379,9 +392,27 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
if (nft == null) { if (nft == null) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情"); throw GlobalException.newException(ResultCode.DATA_ERROR, "没找到此nft详情");
} }
String token = request.getHeader("Authorization");
Integer userId = JwtUtil.getUserIdFromToken(token);
ossUtil.downloadFile(nft.getFileUrl(), nft.getFileName()); 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; ...@@ -3,6 +3,7 @@ package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.CopyrightApply; import com.fzm.common.entity.CopyrightApply;
import com.fzm.common.entity.dto.CopyrightDTO; 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.CopyrightStateVo;
import com.fzm.common.entity.vo.CopyrightVo; import com.fzm.common.entity.vo.CopyrightVo;
import com.fzm.common.enums.CopyrightApplyState; import com.fzm.common.enums.CopyrightApplyState;
...@@ -25,7 +26,6 @@ import java.util.concurrent.ExecutionException; ...@@ -25,7 +26,6 @@ import java.util.concurrent.ExecutionException;
* @author tangtuo * @author tangtuo
* @date 2021/12/9 14:31 * @date 2021/12/9 14:31
*/ */
@Authentication
@RestController @RestController
@Api(tags = "版权申请") @Api(tags = "版权申请")
@RequestMapping("/copyright/apply") @RequestMapping("/copyright/apply")
...@@ -34,6 +34,7 @@ public class CopyrightApplyController { ...@@ -34,6 +34,7 @@ public class CopyrightApplyController {
@Resource @Resource
private CopyrightApplyService copyrightApplyService; private CopyrightApplyService copyrightApplyService;
@Authentication
@PostMapping("/submit") @PostMapping("/submit")
@ApiOperation("/提交申请") @ApiOperation("/提交申请")
public ResponseModel<Integer> submit(@Validated @RequestBody CopyrightDTO copyrightDTO) { public ResponseModel<Integer> submit(@Validated @RequestBody CopyrightDTO copyrightDTO) {
...@@ -42,6 +43,7 @@ public class CopyrightApplyController { ...@@ -42,6 +43,7 @@ public class CopyrightApplyController {
} }
@Authentication
@GetMapping("/list") @GetMapping("/list")
@ApiOperation(value = "查询版权登记列表") @ApiOperation(value = "查询版权登记列表")
public ResponseModel<List<CopyrightApply>> list(@RequestHeader(value = "Authorization") String token, @ApiParam("状态 0-全部 1-进行中 2-已完成") @RequestParam Integer state) { public ResponseModel<List<CopyrightApply>> list(@RequestHeader(value = "Authorization") String token, @ApiParam("状态 0-全部 1-进行中 2-已完成") @RequestParam Integer state) {
...@@ -50,6 +52,7 @@ public class CopyrightApplyController { ...@@ -50,6 +52,7 @@ public class CopyrightApplyController {
return ResponseModel.success(list); return ResponseModel.success(list);
} }
@Authentication
@PostMapping(value = "/withdraw") @PostMapping(value = "/withdraw")
@ApiOperation(value = "撤回") @ApiOperation(value = "撤回")
public ResponseModel<Boolean> withdraw(@RequestParam Integer id) { public ResponseModel<Boolean> withdraw(@RequestParam Integer id) {
...@@ -57,6 +60,7 @@ public class CopyrightApplyController { ...@@ -57,6 +60,7 @@ public class CopyrightApplyController {
return ResponseModel.success(result); return ResponseModel.success(result);
} }
@Authentication
@PostMapping(value = "/delete") @PostMapping(value = "/delete")
@ApiOperation(value = "删除") @ApiOperation(value = "删除")
public ResponseModel<Boolean> delete(@RequestParam Integer id) { public ResponseModel<Boolean> delete(@RequestParam Integer id) {
...@@ -71,6 +75,7 @@ public class CopyrightApplyController { ...@@ -71,6 +75,7 @@ public class CopyrightApplyController {
return ResponseModel.success(copyrightVo); return ResponseModel.success(copyrightVo);
} }
@Authentication
@PostMapping(value = "/update") @PostMapping(value = "/update")
@ApiOperation(value = "编辑") @ApiOperation(value = "编辑")
public ResponseModel<Boolean> update(@RequestBody CopyrightDTO copyrightDTO) { public ResponseModel<Boolean> update(@RequestBody CopyrightDTO copyrightDTO) {
...@@ -104,4 +109,11 @@ public class CopyrightApplyController { ...@@ -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; ...@@ -35,6 +35,7 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -82,6 +83,7 @@ public class NftController { ...@@ -82,6 +83,7 @@ public class NftController {
@ApiOperation("发行nft") @ApiOperation("发行nft")
public ResponseModel<Integer> publish(@Validated @RequestBody NftDto nftDto) { public ResponseModel<Integer> publish(@Validated @RequestBody NftDto nftDto) {
Integer id = nftService.publish(nftDto); Integer id = nftService.publish(nftDto);
return ResponseModel.success(id); return ResponseModel.success(id);
} }
...@@ -96,27 +98,10 @@ public class NftController { ...@@ -96,27 +98,10 @@ public class NftController {
return ResponseModel.success(list); return ResponseModel.success(list);
} }
@GetMapping("get/{id}") @GetMapping("get/{nftHash}")
@ApiOperation(value = "获取nft详情") @ApiOperation(value = "获取nft详情")
public ResponseModel<NftVo> getById(@PathVariable Integer id, @RequestHeader(required = false) String Authorization) { public ResponseModel<NftVo> get(@PathVariable String nftHash) throws ExecutionException, InterruptedException {
Nft nft = nftService.getById(id); NftVo nftVo = nftService.getDetail(nftHash);
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);
}
}
return ResponseModel.success(nftVo); return ResponseModel.success(nftVo);
} }
...@@ -170,8 +155,7 @@ public class NftController { ...@@ -170,8 +155,7 @@ public class NftController {
throw GlobalException.newException(ResultCode.FORBIDDEN, "您无权查看别人的nft证书"); throw GlobalException.newException(ResultCode.FORBIDDEN, "您无权查看别人的nft证书");
} }
User user = userService.getUserByWallet(nft.getPublishAddress()); User user = userService.getUserByWallet(nft.getPublishAddress());
String qrCode = QRCodeUtil.encode(PATH, null, false); NftCertificateVo vo = new NftCertificateVo(nft, user);
NftCertificateVo vo = new NftCertificateVo(nft, user, qrCode);
return ResponseModel.success(vo); return ResponseModel.success(vo);
} }
...@@ -205,7 +189,7 @@ public class NftController { ...@@ -205,7 +189,7 @@ public class NftController {
@Authentication @Authentication
@ApiOperation(value = "查询用户还未成功申请版权的nft列表") @ApiOperation(value = "查询用户还未成功申请版权的nft列表")
@GetMapping(value = "/list/copyright") @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); Integer userId = JwtUtil.getUserIdFromToken(token);
List<CollectionNftVo> list = nftService.listCopyright(userId); List<CollectionNftVo> list = nftService.listCopyright(userId);
return ResponseModel.success(list); return ResponseModel.success(list);
......
...@@ -76,16 +76,29 @@ sms: ...@@ -76,16 +76,29 @@ sms:
transfer-nft-email-codetype: notice_transfer transfer-nft-email-codetype: notice_transfer
transfer-nft-voice-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: chain:
para: para:
rpc-url: http://146.56.197.42:12021 rpcUrl: http://146.56.197.42:12021
withhold-addr: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy tokenManager: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1
withhold-key: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0 tokenManagerKey: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b
withhold: 1417K9fd5vt4zYW86xinWiCbAkNP794aNy
withholdKey: 19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0
title: user.p.mall. title: user.p.mall.
admin: 133AfuMYQXRxc45JGUb1jLk1M1W4ka39L1 cName: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
admin-key: 85c6c95bcb41779f1d197e686d26b228a523fa36b77cfed79edb59b8853b569b cAddr: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
contract-name: user.evm.0xb3ae98ac253679602d54d1513aa9cad7d1b10d5f5117d5ce999c1bf67906ba99
contract-address: 15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW
aliyun: aliyun:
oss: oss:
......
...@@ -101,4 +101,15 @@ class LyPortalApplicationTests { ...@@ -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; package com.fzm.portal;
import cn.fzm.chain.simplesdk.base.RpcApi; 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 * @author lyz
...@@ -23,35 +25,40 @@ public class TestDemo { ...@@ -23,35 +25,40 @@ public class TestDemo {
//String rpcUrl = "http://146.56.218.121:12091"; //String rpcUrl = "http://146.56.218.121:12091";
//String rpcUrl = "http://10.144.180.121:8901"; //String rpcUrl = "http://10.144.180.121:8901";
String rpcUrl = "http://172.16.101.133:8801"; // String rpcUrl = "http://146.56.197.42:12021";
String withholdAddr = "1Ae6FfgdYJn6LLaqDoRjwga3j4TTmMq3t7"; // String withholdAddr = "1417K9fd5vt4zYW86xinWiCbAkNP794aNy";
String withholdKey = "0xa4c49dcb35e0032dc8db5891dc81481943b68fc558ce93ce74d0382c1d104934"; // String withholdKey = "19d78691584930407e63cd35ac6e67fae6113894b41812e65847d4a365a802a0";
String title = "user.p.joying."; // String title = "user.p.mall.";
String tokenManager = "1N2ABERwHgxGhebVw6fVSwaQ5uLAysmGEu"; // String tokenManager = "1N2ABERwHgxGhebVw6fVSwaQ5uLAysmGEu";
String tokenManagerKey = "0x4e92bda2477ded0e7c07a9e3acd2370de8d7401c68cc83ee8376806db3121e77"; // String tokenManagerKey = "0x4e92bda2477ded0e7c07a9e3acd2370de8d7401c68cc83ee8376806db3121e77";
// String hash = "0xacf3180e56eb0dbae47df6e55f131cb1bcd07193bf93d15b21d1f4a1a8c6f6df";
String publisher = "12AER3rcxa5HFbztnoT9p6f93f8FHfe6xY"; // String publisher = "12AER3rcxa5HFbztnoT9p6f93f8FHfe6xY";
String to = "1Dfrk6JLbC6Pv1rGAGWL3v1TSXRp68VS7j"; // String to = "1Dfrk6JLbC6Pv1rGAGWL3v1TSXRp68VS7j";
long tokenId = 1628752532280L; // long tokenId = Instant.EPOCH.getEpochSecond();
String tokenInfo = "7b22617574686f72223a22e98791e5bab8222c227075626c6973686572223a2231384c5771736d66517a784155784237515070646359545755336e654e6e39634c53222c2268617368223a5b223830373538363330653736653539393062346465306539313362613432633565222c223830373538363330653736653539393062346465306539313362613432633565225d7d00"; // System.out.println(tokenId);
// String tokenInfo = "7b22617574686f72223a22e98791e5bab8222c227075626c6973686572223a2231384c5771736d66517a784155784237515070646359545755336e654e6e39634c53222c2268617368223a5b223830373538363330653736653539393062346465306539313362613432633565222c223830373538363330653736653539393062346465306539313362613432633565225d7d00";
String unfreezeAddr = "1RCdmF5Eyg2CgbERbKJPFHjQkJE3u9Hp6"; // String cAddr = "15DtbSyS4eVFxdF87jmrcAdXMSAwXEHVLW";
RpcApi ra = new RpcApi(rpcUrl, withholdAddr, withholdKey, title); // String unfreezeAddr = "1RCdmF5Eyg2CgbERbKJPFHjQkJE3u9Hp6";
// RpcApi ra = new RpcApi(rpcUrl, withholdAddr, withholdKey, title);
//ra.evmPublishToken(args, cAddr, EvmTokenEnum.ERC1155,10000L,)
String code = "60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000033565b506200012f565b8051620000489060029060208401906200004c565b5050565b8280546200005a90620000f2565b90600052602060002090601f0160209004810192826200007e5760008555620000c9565b82601f106200009957805160ff1916838001178555620000c9565b82800160010185558215620000c9579182015b82811115620000c9578251825591602001919060010190620000ac565b50620000d7929150620000db565b5090565b5b80821115620000d75760008155600101620000dc565b6002810460018216806200010757607f821691505b602082108114156200012957634e487b7160e01b600052602260045260246000fd5b50919050565b6117fc806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106100a85760003560e01c80634e1273f4116100715780634e1273f41461013e5780638c7a63ae1461015e578063a22cb46514610171578063aba7e0fd14610184578063e985e9c514610197578063f242432a146101aa576100a8565b8062fdd58e146100ad57806301ffc9a7146100d65780630e89341c146100f657806323a36d2b146101165780632eb2c2d61461012b575b600080fd5b6100c06100bb366004610f69565b6101bd565b6040516100cd9190611603565b60405180910390f35b6100e96100e4366004611082565b610214565b6040516100cd91906112b9565b6101096101043660046110c1565b61025c565b6040516100cd91906112c4565b610129610124366004610f92565b6102f0565b005b610129610139366004610e26565b610310565b61015161014c366004610fc4565b61036e565b6040516100cd9190611278565b61010961016c3660046110c1565b61048e565b61012961017f366004610f2f565b6104ab565b6101296101923660046110d9565b610579565b6100e96101a5366004610df4565b610598565b6101296101b8366004610ecc565b6105c6565b60006001600160a01b0383166101ee5760405162461bcd60e51b81526004016101e590611373565b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061024557506001600160e01b031982166303a24d0760e21b145b8061025457506102548261061d565b90505b919050565b60606002805461026b90611680565b80601f016020809104026020016040519081016040528092919081815260200182805461029790611680565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b50505050509050919050565b61030b83838360405180602001604052806000815250610636565b505050565b610318610725565b6001600160a01b0316856001600160a01b0316148061033e575061033e856101a5610725565b61035a5760405162461bcd60e51b81526004016101e59061144c565b610367858585858561072a565b5050505050565b606081518351146103915760405162461bcd60e51b81526004016101e590611531565b6000835167ffffffffffffffff8111156103bb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156103e4578160200160208202803683370190505b50905060005b84518110156104865761044b85828151811061041657634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061043e57634e487b7160e01b600052603260045260246000fd5b60200260200101516101bd565b82828151811061046b57634e487b7160e01b600052603260045260246000fd5b602090810291909101015261047f816116bb565b90506103ea565b509392505050565b600081815260036020526040902080546060919061026b90611680565b816001600160a01b03166104bd610725565b6001600160a01b031614156104e45760405162461bcd60e51b81526004016101e5906114e8565b80600160006104f1610725565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610535610725565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161056d91906112b9565b60405180910390a35050565b6000838152600360205260409020610592908383610c6d565b50505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6105ce610725565b6001600160a01b0316856001600160a01b031614806105f457506105f4856101a5610725565b6106105760405162461bcd60e51b81526004016101e5906113be565b61036785858585856108fb565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b03841661065c5760405162461bcd60e51b81526004016101e5906115c2565b6000610666610725565b90506106878160008761067888610a2f565b61068188610a2f565b876108f3565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906106b7908490611668565b92505081905550846001600160a01b031660006001600160a01b0316826001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161070e92919061160c565b60405180910390a461036781600087878787610a88565b335b90565b815183511461074b5760405162461bcd60e51b81526004016101e59061157a565b6001600160a01b0384166107715760405162461bcd60e51b81526004016101e590611407565b600061077b610725565b905061078b8187878787876108f3565b60005b845181101561088d5760008582815181106107b957634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106107e557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156108355760405162461bcd60e51b81526004016101e59061149e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610872908490611668565b9250508190555050505080610886906116bb565b905061078e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516108dd92919061128b565b60405180910390a46108f3818787878787610b96565b505050505050565b6001600160a01b0384166109215760405162461bcd60e51b81526004016101e590611407565b600061092b610725565b905061093c81878761067888610a2f565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561097d5760405162461bcd60e51b81526004016101e59061149e565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906109ba908490611668565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051610a1092919061160c565b60405180910390a4610a26828888888888610a88565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610a7757634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b610a9a846001600160a01b0316610c67565b156108f35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190610ad39089908990889088908890600401611233565b602060405180830381600087803b158015610aed57600080fd5b505af1925050508015610b1d575060408051601f3d908101601f19168201909252610b1a918101906110a5565b60015b610b6657610b29611708565b80610b345750610b4e565b8060405162461bcd60e51b81526004016101e591906112c4565b60405162461bcd60e51b81526004016101e5906112d7565b6001600160e01b0319811663f23a6e6160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b610ba8846001600160a01b0316610c67565b156108f35760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610be190899089908890889088906004016111d5565b602060405180830381600087803b158015610bfb57600080fd5b505af1925050508015610c2b575060408051601f3d908101601f19168201909252610c28918101906110a5565b60015b610c3757610b29611708565b6001600160e01b0319811663bc197c8160e01b14610a265760405162461bcd60e51b81526004016101e59061132b565b3b151590565b828054610c7990611680565b90600052602060002090601f016020900481019282610c9b5760008555610ce1565b82601f10610cb45782800160ff19823516178555610ce1565b82800160010185558215610ce1579182015b82811115610ce1578235825591602001919060010190610cc6565b50610ced929150610cf1565b5090565b5b80821115610ced5760008155600101610cf2565b80356001600160a01b038116811461025757600080fd5b600082601f830112610d2d578081fd5b81356020610d42610d3d83611644565b61161a565b8281528181019085830183850287018401881015610d5e578586fd5b855b85811015610d7c57813584529284019290840190600101610d60565b5090979650505050505050565b600082601f830112610d99578081fd5b813567ffffffffffffffff811115610db357610db36116ec565b610dc6601f8201601f191660200161161a565b818152846020838601011115610dda578283fd5b816020850160208301379081016020019190915292915050565b60008060408385031215610e06578182fd5b610e0f83610d06565b9150610e1d60208401610d06565b90509250929050565b600080600080600060a08688031215610e3d578081fd5b610e4686610d06565b9450610e5460208701610d06565b9350604086013567ffffffffffffffff80821115610e70578283fd5b610e7c89838a01610d1d565b94506060880135915080821115610e91578283fd5b610e9d89838a01610d1d565b93506080880135915080821115610eb2578283fd5b50610ebf88828901610d89565b9150509295509295909350565b600080600080600060a08688031215610ee3578081fd5b610eec86610d06565b9450610efa60208701610d06565b93506040860135925060608601359150608086013567ffffffffffffffff811115610f23578182fd5b610ebf88828901610d89565b60008060408385031215610f41578182fd5b610f4a83610d06565b915060208301358015158114610f5e578182fd5b809150509250929050565b60008060408385031215610f7b578182fd5b610f8483610d06565b946020939093013593505050565b600080600060608486031215610fa6578283fd5b610faf84610d06565b95602085013595506040909401359392505050565b60008060408385031215610fd6578182fd5b823567ffffffffffffffff80821115610fed578384fd5b818501915085601f830112611000578384fd5b81356020611010610d3d83611644565b82815281810190858301838502870184018b101561102c578889fd5b8896505b848710156110555761104181610d06565b835260019690960195918301918301611030565b509650508601359250508082111561106b578283fd5b5061107885828601610d1d565b9150509250929050565b600060208284031215611093578081fd5b813561109e816117ad565b9392505050565b6000602082840312156110b6578081fd5b815161109e816117ad565b6000602082840312156110d2578081fd5b5035919050565b6000806000604084860312156110ed578081fd5b83359250602084013567ffffffffffffffff8082111561110b578283fd5b818601915086601f83011261111e578283fd5b81358181111561112c578384fd5b87602082850101111561113d578384fd5b6020830194508093505050509250925092565b6000815180845260208085019450808401835b8381101561117f57815187529582019590820190600101611163565b509495945050505050565b60008151808452815b818110156111af57602081850181015186830182015201611193565b818111156111c05782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061120190830186611150565b82810360608401526112138186611150565b90508281036080840152611227818561118a565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061126d9083018461118a565b979650505050505050565b60006020825261109e6020830184611150565b60006040825261129e6040830185611150565b82810360208401526112b08185611150565b95945050505050565b901515815260200190565b60006020825261109e602083018461118a565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561163c5761163c6116ec565b604052919050565b600067ffffffffffffffff82111561165e5761165e6116ec565b5060209081020190565b6000821982111561167b5761167b6116d6565b500190565b60028104600182168061169457607f821691505b602082108114156116b557634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156116cf576116cf6116d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d101561171857610727565b600481823e6308c379a061172c8251611702565b1461173657610727565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156117665750505050610727565b828401925082519150808211156117805750505050610727565b503d8301602082840101111561179857505050610727565b601f01601f1916810160200160405291505090565b6001600160e01b0319811681146117c357600080fd5b5056fea26469706673582212209cf51eb3daad4f0c1c653142bc91893c5a26f1a14f11a3152bc64105d2e942bc64736f6c63430008000033"; 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.0x72ab91df57d70ddca74c219fee29a4e08632bb7b1109c1627fc11173961b180c";
//String cName = "user.evm.0xedf89f9273befe83c16acde1172f6c81476a2f14ebac6df958cd4aa6ad29d98d"; //String cName = "user.evm.0xedf89f9273befe83c16acde1172f6c81476a2f14ebac6df958cd4aa6ad29d98d";
String cAddr = "1ErrPnk5mocNL5k87Yx66ihqmprc8avjPJ";
String addr = ra.evmQueryAddrByName(cName); //String addr = ra.evmQueryAddrByName(cName);
System.out.println("addr = " + addr); // System.out.println("addr = " + addr);
//String s = ra.evmGetTokenInfoNew(abi, cAddr, 1468781664640569344L, "16oJi1AwsZqtfP74N6nUhVKW1GwshRPQyY");
//System.out.println(s);
//String cAddr = "1CQDaNN28ysjgH2fyZgB1fpuUwktdJzft1"; //String cAddr = "1CQDaNN28ysjgH2fyZgB1fpuUwktdJzft1";
//String hash = ra.evmDeploy(code, abi, "JoyingNFT", "JoyingNFT", tokenManager, tokenManagerKey, true); //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.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.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.evmSetTokenInfoNew(abi, cAddr, tokenId, tokenInfo, publisher, null, true);
//String hash = ra.evmGetTokenInfoNew(abi, cAddr, tokenId, publisher); //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.evmBalanceNew(abi, cAddr, EvmTransferEnum.ERC1155, publisher, tokenId);
//long hash = ra.evmEstimateGas(code, abi, null, tokenManager); //long hash = ra.evmEstimateGas(code, abi, null, tokenManager);
//String hash = ra.evmPublishNFT1155(cName, publisher, null, 100, true); //String hash = ra.evmPublishNFT1155(cName, publisher, null, 100, true);
...@@ -85,6 +92,10 @@ public class TestDemo { ...@@ -85,6 +92,10 @@ public class TestDemo {
if(tr.getStatus() == TxStatusEnum.SUCCESS){ if(tr.getStatus() == TxStatusEnum.SUCCESS){
System.out.println("OK"); 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 @@ ...@@ -35,6 +35,10 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
...@@ -104,7 +108,6 @@ ...@@ -104,7 +108,6 @@
<artifactId>redisson</artifactId> <artifactId>redisson</artifactId>
<version>3.16.0</version> <version>3.16.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
......
...@@ -397,13 +397,15 @@ CREATE TABLE `tb_file_template` ( ...@@ -397,13 +397,15 @@ CREATE TABLE `tb_file_template` (
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '版权附件模板表' ROW_FORMAT = Dynamic; ) 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`(`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` VALUES (2, '代理委托书.docx', 'https://test-nft.oss-cn-hangzhou.aliyuncs.com/20211210/1a3f7812993f4f8785b6d50536541f36/代理委托书.docx', 1); 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` 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 (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`(`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` 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 (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`(`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` 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 (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 -- 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