java jtest 下载,src/test/java/top/rhynie/web3j/Web3jTest.java · Rhynie/tron-web3j - Gitee.com

package top.rhynie.web3j;

import com.google.protobuf.ByteString;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

import freemarker.template.TemplateExceptionHandler;

import org.bouncycastle.jcajce.provider.digest.Keccak;

import org.bouncycastle.util.encoders.Hex;

import org.junit.Test;

import org.tron.tronj.abi.FunctionEncoder;

import org.tron.tronj.abi.FunctionReturnDecoder;

import org.tron.tronj.abi.TypeReference;

import org.tron.tronj.abi.datatypes.Address;

import org.tron.tronj.abi.datatypes.Function;

import org.tron.tronj.abi.datatypes.generated.Uint256;

import org.tron.tronj.client.TronClient;

import org.tron.tronj.client.exceptions.IllegalException;

import org.tron.tronj.client.transaction.TransactionBuilder;

import org.tron.tronj.crypto.SECP256K1;

import org.tron.tronj.proto.Chain;

import org.tron.tronj.proto.Contract;

import org.tron.tronj.proto.Response;

import org.tron.tronj.utils.Base58Check;

import org.tron.tronj.utils.Numeric;

import top.rhynie.web3j.contract.BetFair;

import top.rhynie.web3j.contract.ERC20;

import top.rhynie.web3j.utils.GsonUtil;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.Arrays;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.stream.Collectors;

import java.util.stream.Stream;

//import org.spongycastle.util.encoders.Hex;

//import top.rhynie.web3j.contract.BetTrx;

public class Web3jTest {

String abi = "[\n" +

"\t{\n" +

"\t\t\"inputs\": [],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"nonpayable\",\n" +

"\t\t\"type\": \"constructor\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": false,\n" +

"\t\t\"inputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"address\",\n" +

"\t\t\t\t\"name\": \"_superiorAddr\",\n" +

"\t\t\t\t\"type\": \"address\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"name\": \"deposit\",\n" +

"\t\t\"outputs\": [],\n" +

"\t\t\"payable\": true,\n" +

"\t\t\"stateMutability\": \"payable\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": true,\n" +

"\t\t\"inputs\": [],\n" +

"\t\t\"name\": \"globalInfo\",\n" +

"\t\t\"outputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"bool\",\n" +

"\t\t\t\t\"name\": \"_needUpdate\",\n" +

"\t\t\t\t\"type\": \"bool\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"_usersLength\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"_totalDeposit\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"_totalWithdrawal\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"_round\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"view\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": false,\n" +

"\t\t\"inputs\": [],\n" +

"\t\t\"name\": \"massUpdateIncomes\",\n" +

"\t\t\"outputs\": [],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"nonpayable\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": true,\n" +

"\t\t\"inputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"name\": \"roundMap\",\n" +

"\t\t\"outputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"view\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": false,\n" +

"\t\t\"inputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"pct\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"name\": \"setVertexPct\",\n" +

"\t\t\"outputs\": [],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"nonpayable\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": true,\n" +

"\t\t\"inputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"address\",\n" +

"\t\t\t\t\"name\": \"\",\n" +

"\t\t\t\t\"type\": \"address\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"name\": \"userMap\",\n" +

"\t\t\"outputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"bool\",\n" +

"\t\t\t\t\"name\": \"exist\",\n" +

"\t\t\t\t\"type\": \"bool\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"address\",\n" +

"\t\t\t\t\"name\": \"superiorAddr\",\n" +

"\t\t\t\t\"type\": \"address\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"balance\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"directRevenue\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"staticIncome\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"actualStaticIncome\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"dynamicIncome\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"actualDynamicIncome\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"depositAmount\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"actualDepositAmount\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"recommendQuantity\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t},\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"totalPerformance\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"view\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t},\n" +

"\t{\n" +

"\t\t\"constant\": false,\n" +

"\t\t\"inputs\": [\n" +

"\t\t\t{\n" +

"\t\t\t\t\"internalType\": \"uint256\",\n" +

"\t\t\t\t\"name\": \"_amount\",\n" +

"\t\t\t\t\"type\": \"uint256\"\n" +

"\t\t\t}\n" +

"\t\t],\n" +

"\t\t\"name\": \"withdraw\",\n" +

"\t\t\"outputs\": [],\n" +

"\t\t\"payable\": false,\n" +

"\t\t\"stateMutability\": \"nonpayable\",\n" +

"\t\t\"type\": \"function\"\n" +

"\t}\n" +

"]";

@Test

public void clientTest() {

TronClient mainnetClient = TronClient.ofMainnet("your private key");

TronClient shastaClient = TronClient.ofShasta("your private key");

TronClient nileClient = TronClient.ofNile("your private key");

//如果使用专用网,则可以使用其他构造函数 String grpcEndpoint, String grpcEndpointSolidity, String hexPrivateKey

TronClient customizeClient = new TronClient("String grpcEndpoint", "String grpcEndpointSolidity", "String hexPrivateKey");

}

@Test

public void transferTrxTest() {

TronClient client = TronClient.ofShasta("your private key");

Web3J web3J = new Web3J(client);

web3J.transferTrx("TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY", "TAXhs8xGWGXpFudfLVas4QnTvJTbR983RW", 1000000L);

}

@Test

public void createAccountTest() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Web3J web3J = new Web3J(client);

web3J.createAccount("TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY");

Map map = web3J.createAccount("TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY");

map.keySet().forEach(k -> System.out.println(k + "----" + map.get(k)));

}

@Test

public void aaa() {

SECP256K1.KeyPair kp = SECP256K1.KeyPair.generate();

SECP256K1.PublicKey pubKey = kp.getPublicKey();

Keccak.Digest256 digest = new Keccak.Digest256();

digest.update(pubKey.getEncoded(), 0, 64);

byte[] raw = digest.digest();

byte[] rawAddr = new byte[21];

rawAddr[0] = 65;

System.arraycopy(raw, 12, rawAddr, 1, 20);

System.out.println(Base58Check.bytesToBase58(TronClient.parseHex(Hex.toHexString(rawAddr)).toByteArray()));

System.out.println(Hex.toHexString(kp.getPrivateKey().getEncoded()));

}

@Test

public void generateContractClassTest() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Web3J web3J = new Web3J(client);

String className = "Redbull";

String packagePath = "D:\\mzdata\\outsourcing\\TronRedBull\\red-bull\\src\\main\\java\\";

String packageName = "com.rhynie.redbull.contract";

web3J.generateContractClass(abi, className, packagePath, packageName);

}

@Test

public void ContractClassTest() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Web3J web3J = new Web3J(client);

ERC20 erc20 = ERC20.load(web3J, "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY", "TPZHNvymERT7695HU2bnhoEZkx65T3hxuM", 1000_000_000L);

List name = erc20.name();

System.out.println(name.toString());

}

@Test

public void ContractClassTest1() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Web3J web3J = new Web3J(client);

BetFair betFair = BetFair.load(web3J, "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY", "TAkoM8S8Tq8y65rt7jTKPtvtLCYjFtA4CG", 1000_000_000L);

List name = betFair.name();

System.out.println(name.toString());

}

@Test

public void test() throws IOException, TemplateException {

String className = "ERC20";

String path = "D:\\git-project\\web3j-tron\\src\\main\\java\\";

String packageName = "top.rhynie.web3j.contract";

path = (path + packageName).replace(".", "\\");

System.out.println(path);

File file = new File(path);

System.out.println(file.getPath());

if(!file.exists()) {

System.out.println(file.mkdirs());

}

List> maps = GsonUtil.GsonToListMaps(abi);

maps.stream()

.forEach(m -> {

m.keySet().forEach(k -> System.out.println(k + "----" + m.get(k)));

System.out.println("--------------------------------------");

});

Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);

String filePath = this.getClass().getClassLoader().getResource("template").getFile();

cfg.setDirectoryForTemplateLoading(new File(filePath));

cfg.setDefaultEncoding("UTF-8");

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

Template template = cfg.getTemplate("contract.ftl");

Map dataModel = new HashMap<>();

dataModel.put("packageName", packageName);

dataModel.put("className", className);

List> functions = maps.stream().filter(m -> "function".equals(m.get("type")))

.collect(Collectors.toList());

dataModel.put("functions", functions);

File dir = new File(path);

if(!dir.exists()) {

dir.mkdirs();

}

OutputStream fos = new FileOutputStream( new File(dir, className + ".java"));

Writer out = new OutputStreamWriter(fos);

template.process(dataModel, out);

fos.flush();

fos.close();;

System.out.println("gen code success!");

}

@Test

public void test1() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Function viewName = new Function("owner", Collections.emptyList(), Arrays.asList(new TypeReference

() {}));

String ownerAddr = "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY";

ByteString newOwnerAddr = TronClient.parseAddress(ownerAddr);

String contractAddr = "TTxU9eraUsavhAyDyPZzD728irC7jwCDXb";

ByteString newContractAddr = TronClient.parseAddress(contractAddr);

Response.TransactionExtention txnExt = client.constantCall(Base58Check.bytesToBase58(newOwnerAddr.toByteArray()),

Base58Check.bytesToBase58(newContractAddr.toByteArray()),

viewName);

List constantResultList = txnExt.getConstantResultList();

List resultList = constantResultList.stream()

.map(value -> Numeric.toHexString(value.toByteArray()))

.collect(Collectors.toList());

List collect = Stream.iterate(0, x -> ++x)

.limit(resultList.size())

.map(x -> FunctionReturnDecoder.decode(resultList.get(x), viewName.getOutputParameters()).get(x).getValue())

.collect(Collectors.toList());

collect.forEach(System.out::println);

}

@Test

public void test2() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Function viewName = new Function("deposit", Arrays.asList(new Address("TYXixYDDMfKQTLUQ7hx9t7wxqeD8SAh1u6")), Collections.emptyList());

String ownerAddr = "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY";

ByteString newOwnerAddr = TronClient.parseAddress(ownerAddr);

String contractAddr = "TTxU9eraUsavhAyDyPZzD728irC7jwCDXb";

ByteString newContractAddr = TronClient.parseAddress(contractAddr);

String encodedHex = FunctionEncoder.encode(viewName);

Contract.TriggerSmartContract trigger =

Contract.TriggerSmartContract.newBuilder()

.setOwnerAddress(newOwnerAddr)

.setContractAddress(newContractAddr)

.setData(TronClient.parseHex(encodedHex))

.setCallValue(500000000)

.build();

System.out.println("trigger:\n" + trigger);

Response.TransactionExtention txnExt = client.blockingStub.triggerContract(trigger);

System.out.println("txn id => " + Hex.toHexString(txnExt.getTxid().toByteArray()));

Chain.Transaction signedTxn = client.signTransaction(txnExt);

System.out.println(signedTxn.toString());

Response.TransactionReturn ret = client.blockingStub.broadcastTransaction(signedTxn);

System.out.println("======== Result ========\n" + ret.toString());

}

@Test

public void test22() {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Function function = new Function("setVertexPct",

Arrays.asList(new Uint256(100000000000000000L)),

Collections.emptyList());

String ownerAddr = "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY";

ByteString newOwnerAddr = TronClient.parseAddress(ownerAddr);

String contractAddr = "TTxU9eraUsavhAyDyPZzD728irC7jwCDXb";

ByteString newContractAddr = TronClient.parseAddress(contractAddr);

TransactionBuilder builder = client.triggerCall(Base58Check.bytesToBase58(newOwnerAddr.toByteArray()),

Base58Check.bytesToBase58(newContractAddr.toByteArray()), function);

builder.setFeeLimit(1000_000_000L);

builder.setMemo("备注");

Chain.Transaction signedTxn = client.signTransaction(builder.build());

Response.TransactionReturn ret = client.broadcastTransaction(signedTxn);

System.out.println(ret.getResult());

}

// @Test

// public void test222() {

// TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

// Function viewName = new Function("deposit", Arrays.asList(new Address("TYXixYDDMfKQTLUQ7hx9t7wxqeD8SAh1u6")), Collections.emptyList());

// String ownerAddr = "TU1HhkfKfGKZkhQLzdEaQae6iz5aCDkCAY";

// ByteString newOwnerAddr = TronClient.parseAddress(ownerAddr);

// String contractAddr = "TTxU9eraUsavhAyDyPZzD728irC7jwCDXb";

// ByteString newContractAddr = TronClient.parseAddress(contractAddr);

// String encodedHex = FunctionEncoder.encode(viewName);

//

// Contract.TriggerSmartContract trigger =

// Contract.TriggerSmartContract.newBuilder()

// .setOwnerAddress(newOwnerAddr)

// .setContractAddress(newContractAddr)

// .setData(TronClient.parseHex(encodedHex))

// .setCallValue(500000000)

// .build();

//

// System.out.println("trigger:\n" + trigger);

// Response.TransactionExtention txnExt = client.blockingStub.triggerContract(trigger);

// System.out.println("txn id => " + Hex.toHexString(txnExt.getTxid().toByteArray()));

//

// Chain.Transaction signedTxn = client.signTransaction(txnExt);

//

// System.out.println(signedTxn.toString());

// Response.TransactionReturn ret = client.blockingStub.broadcastTransaction(signedTxn);

// System.out.println("======== Result ========\n" + ret.toString());

// }

@Test

public void test3() throws IllegalException {

TronClient client = TronClient.ofShasta("709cbe2bec603df1eeabc69459855089fa7a4169b90c8b3a1c7a92a9ea6b6fbf");

Response.TransactionInfo tx = client.getTransactionInfoById("0a764d5b8106ddc56f38dec9c11b90df8e613f6c24ff503ec078675b0ae3c097");

System.out.println(tx.getResult());

// System.out.println(client.getTransactionInfoById("b5f9239e18eb9827a88c7f3f054bef20303db111bb9d0fd547409dd337b96df1"));

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值