package com.tricky.tron.trc20.service;
import com.alibaba.fastjson.JSONObject;
import com.tricky.tron.trc20.feign.TronFullNodeFeign;
import com.tricky.tron.trc20.feign.dt.GetTransactionSign;
import com.tricky.tron.trc20.feign.dt.TriggerSmartContract;
import com.tricky.tron.trc20.utils.ByteArray;
import com.tricky.tron.trc20.utils.TronUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;
@Service
public class Trc20Service {
private static Logger logger = LoggerFactory.getLogger(Trc20Service.class);
@Value("${tron.contract-address}")
private String contractAddress;//hex格式
@Value("${tron.address}")
private String address;//发币地址 hex格式
@Value("${tron.private-key}")
private String privateKey;//私钥
//token的精度 就是小数点后面有多少位小数 然后1后面加多少个0就可以
private static final BigDecimal decimal = new BigDecimal("1000000");
@Autowired
private TronFullNodeFeign feign;
/**
* 发送trc20交易 返回交易id
*
* @param toAddress 收币地址
* @param amount 转出数量
* @param remark 备注
* @return
*/
public String sendTrc20Transaction(String toAddress, String amount, String remark) {
try {
String hexAddress = toAddress;
if (toAddress.startsWith("T")) {
hexAddress = TronUtils.toHexAddress(toAddress);
}
if (StringUtils.isEmpty(hexAddress)) {
logger.error("转账失败:收款地址为空");
return null;
}
if (StringUtils.isEmpty(amount)) {
logger.error("转账失败:额度为空");
return null;
}
BigDecimal a = new BigDecimal(amount);
if (a.compareTo(BigDecimal.ZERO) <= 0) {
logger.error("转账失败:额度不符合规则 " + amount);
return null;
}
if (remark == null) {
remark = "";
}
TriggerSmartContract.Param param = createTriggerSmartContractParam();
param.setFunction_selector("transfer(address,uint256)");
String addressParam = addZero(hexAddress, 64);
String amountParam = addZero(new BigDecimal(amount).multiply(decimal).toBigInteger().toString(16), 64);
param.setParameter(addressParam + amountParam);
logger.info("创建交易参数:" + JSONObject.toJSONString(param));
TriggerSmartContract.Result obj = feign.triggerSmartContract(param);
logger.info("创建交易结果:" + JSONObject.toJSONString(obj));
if (!obj.isSuccess()) {
String params = hexAddress + "@" + amount + "@" + remark;
logger.error("创建交易失败|" + params);
return null;
}
//交易签名
GetTransactionSign.Param signParam = new GetTransactionSign.Param();
TriggerSmartContract.Transaction transaction = obj.getTransaction();
transaction.getRaw_data().put("data", ByteArray.toHexString(remark.getBytes()));
signParam.setTransaction(transaction);
signParam.setPrivateKey(privateKey);
logger.info("签名交易参数:" + JSONObject.toJSONString(signParam));
Object dt = feign.getTransactionSign(signParam);
logger.info("签名交易结果:" + JSONObject.toJSONString(dt));
//广播交易
if (dt != null) {
logger.info("广播交易参数:" + JSONObject.toJSONString(dt));
JSONObject rea = feign.broadcastTransaction(dt);
logger.info("广播交易结果:" + JSONObject.toJSONString(rea));
if (rea != null) {
Object result = rea.get("result");
if (result instanceof Boolean) {
if ((boolean) result) {
return (String) rea.get("txid");
}
}
}
}
} catch (Throwable t) {
logger.error(t.getMessage(), t);
}
return null;
}
/**
* 创建智能合约参数
*
* @return
*/
private TriggerSmartContract.Param createTriggerSmartContractParam() {
TriggerSmartContract.Param tscParam = new TriggerSmartContract.Param();
tscParam.setOwner_address(address);
tscParam.setContract_address(contractAddress);
tscParam.setFee_limit(1000000L);
return tscParam;
}
/**
* 补充0到64个字节
*
* @param dt
* @return
*/
private String addZero(String dt, int length) {
StringBuilder builder = new StringBuilder();
final int count = length;
int zeroAmount = count - dt.length();
for (int i = 0; i < zeroAmount; i++) {
builder.append("0");
}
builder.append(dt);
return builder.toString();
}
/**
* 查询额度
*
* @param contract 合约地址
* @param address 查询地址
* @return
*/
public BigInteger balanceOf(String contract, String address) {
String hexAddress = address;
if (address.startsWith("T")) {
hexAddress = TronUtils.toHexAddress(address);
}
String hexContract = contract;
if (contract.startsWith("T")) {
hexContract = TronUtils.toHexAddress(contract);
}
TriggerSmartContract.Param param = new TriggerSmartContract.Param();
param.setContract_address(hexContract);
param.setOwner_address(hexAddress);
param.setFunction_selector("balanceOf(address)");
String addressParam = addZero(hexAddress.substring(2), 64);
param.setParameter(addressParam);
TriggerSmartContract.Result result = feign.triggerSmartContract(param);
if (result != null && result.isSuccess()) {
String value = result.getConstantResult(0);
if (value != null) {
return new BigInteger(value, 16);
}
}
return BigInteger.ZERO;
}
private String castHexAddress(String address) {
if (address.startsWith("T")) {
return TronUtils.toHexAddress(address);
}
return address;
}
/**
* 代币转账 trc20
*
* @param contract
* @param fromAddress
* @param privateKey fromAddress的私钥
* @param amount
* @param toAddress
* @param remark
* @return
*/
public String sendTokenTransaction(String contract, String fromAddress, String privateKey, String amount, String toAddress, String remark) {
try {
String hexFromAddress = castHexAddress(fromAddress);
String hexToAddress = castHexAddress(toAddress);
String hexContract = castHexAddress(contract);
BigInteger a = new BigInteger(amount);
if (a.compareTo(BigInteger.ZERO) <= 0) {
logger.error("转账失败:额度不符合规则 " + amount);
return null;
}
if (remark == null) {
remark = "";
}
TriggerSmartContract.Param param = new TriggerSmartContract.Param();
param.setOwner_address(hexFromAddress);
param.setContract_address(hexContract);
param.setFee_limit(1000000L);
param.setFunction_selector("transfer(address,uint256)");
String addressParam = addZero(hexToAddress, 64);
S
没有合适的资源?快使用搜索试试~ 我知道了~
合约开发代码-java
共156个文件
xml:129个
java:17个
yml:1个
2星 需积分: 5 50 下载量 24 浏览量
2021-03-09
22:16:33
上传
评论 1
收藏 143KB ZIP 举报
温馨提示
调用合约 获取波场币数量 查询代币数量 发起交易 发起转账
资源推荐
资源详情
资源评论
收起资源包目录
合约开发代码-java (156个子文件)
mvnw.cmd 6KB
http-client.cookies 0B
.gitignore 333B
index.html 0B
tron-trc20.iml 15KB
maven-wrapper.jar 50KB
Trc20Service.java 10KB
Sha256Hash.java 10KB
WalletController.java 6KB
MavenWrapperDownloader.java 4KB
Base58.java 4KB
ByteArray.java 4KB
TriggerSmartContract.java 2KB
TronFullNodeFeign.java 2KB
ContractService.java 2KB
TronUtils.java 2KB
ContractController.java 2KB
Swagger2.java 1KB
BackResponse.java 884B
Trc20Application.java 539B
ContractEvent.java 518B
GetTransactionSign.java 338B
Trc20ApplicationTests.java 212B
HELP.md 997B
mvnw 10KB
maven-wrapper.properties 218B
uiDesigner.xml 9KB
workspace.xml 6KB
pom.xml 4KB
compiler.xml 885B
jarRepositories.xml 864B
Maven__org_springframework_cloud_spring_cloud_starter_openfeign_2_2_5_RELEASE.xml 797B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_3_4_RELEASE.xml 793B
Maven__org_springframework_cloud_spring_cloud_netflix_archaius_2_2_5_RELEASE.xml 790B
Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_3_4_RELEASE.xml 786B
Maven__org_springframework_cloud_spring_cloud_openfeign_core_2_2_5_RELEASE.xml 776B
Maven__org_springframework_cloud_spring_cloud_netflix_ribbon_2_2_5_RELEASE.xml 776B
Maven__org_springframework_boot_spring_boot_starter_logging_2_3_4_RELEASE.xml 772B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_4_RELEASE.xml 765B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_2.xml 760B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_4_RELEASE.xml 758B
Maven__org_springframework_security_spring_security_crypto_5_3_4_RELEASE.xml 753B
Maven__org_springframework_boot_spring_boot_starter_test_2_3_4_RELEASE.xml 751B
Maven__org_springframework_boot_spring_boot_starter_json_2_3_4_RELEASE.xml 751B
Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml 749B
Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml 745B
Maven__org_springframework_boot_spring_boot_starter_web_2_3_4_RELEASE.xml 744B
Maven__org_springframework_boot_spring_boot_starter_aop_2_3_4_RELEASE.xml 744B
Maven__org_springframework_security_spring_security_rsa_1_0_9_RELEASE.xml 732B
Maven__org_springframework_cloud_spring_cloud_commons_2_2_5_RELEASE.xml 727B
Maven__org_springframework_cloud_spring_cloud_starter_2_2_5_RELEASE.xml 727B
Maven__org_springframework_cloud_spring_cloud_context_2_2_5_RELEASE.xml 727B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 724B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml 719B
Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml 717B
Maven__org_springframework_boot_spring_boot_starter_2_3_4_RELEASE.xml 716B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_2.xml 705B
Maven__org_springframework_boot_spring_boot_test_2_3_4_RELEASE.xml 695B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_38.xml 684B
Maven__org_springframework_spring_expression_5_2_9_RELEASE.xml 682B
Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml 676B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml 675B
Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml 674B
Maven__org_thymeleaf_thymeleaf_spring5_3_0_11_RELEASE.xml 665B
Maven__org_springframework_spring_context_5_2_9_RELEASE.xml 661B
Maven__org_springframework_boot_spring_boot_2_3_4_RELEASE.xml 660B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 657B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 657B
Maven__org_junit_platform_junit_platform_commons_1_6_2.xml 657B
Maven__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml 654B
Maven__org_springframework_spring_webmvc_5_2_9_RELEASE.xml 654B
Maven__org_junit_platform_junit_platform_engine_1_6_2.xml 650B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_38.xml 649B
Maven__commons_configuration_commons_configuration_1_8.xml 648B
Maven__io_springfox_springfox_swagger_common_2_6_1.xml 647B
Maven__org_springframework_spring_beans_5_2_9_RELEASE.xml 647B
Maven__io_github_openfeign_form_feign_form_spring_3_8_0.xml 646B
Maven__org_checkerframework_checker_compat_qual_2_0_0.xml 644B
Maven__org_springframework_spring_test_5_2_9_RELEASE.xml 640B
Maven__org_springframework_spring_core_5_2_9_RELEASE.xml 640B
Maven__org_junit_jupiter_junit_jupiter_params_5_6_2.xml 639B
Maven__org_junit_jupiter_junit_jupiter_engine_5_6_2.xml 639B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 635B
Maven__org_springframework_spring_jcl_5_2_9_RELEASE.xml 633B
Maven__org_springframework_spring_web_5_2_9_RELEASE.xml 633B
Maven__org_springframework_spring_aop_5_2_9_RELEASE.xml 633B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml 632B
Maven__org_jvnet_animal_sniffer_annotation_1_0.xml 628B
Maven__com_fasterxml_jackson_core_jackson_core_2_11_2.xml 626B
Maven__org_mockito_mockito_junit_jupiter_3_3_3.xml 622B
Maven__io_springfox_springfox_spring_web_2_6_1.xml 619B
Maven__io_springfox_springfox_swagger_ui_2_6_1.xml 619B
Maven__org_junit_jupiter_junit_jupiter_api_5_6_2.xml 618B
Maven__commons_fileupload_commons_fileupload_1_4.xml 615B
Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml 613B
Maven__io_github_openfeign_feign_hystrix_10_10_1.xml 612B
Maven__io_swagger_swagger_annotations_1_5_10.xml 611B
Maven__com_google_j2objc_j2objc_annotations_1_1.xml 611B
Maven__org_thymeleaf_thymeleaf_3_0_11_RELEASE.xml 609B
Maven__net_bytebuddy_byte_buddy_agent_1_10_14.xml 609B
共 156 条
- 1
- 2
资源评论
- qiuye4022021-05-09确实没太大价值
- EMMET_C2021-05-07没什么参考价值
Asix_song
- 粉丝: 4
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功