Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 102 additions & 16 deletions src/main/java/org/tron/walletcli/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,22 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import io.netty.util.internal.StringUtil;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.ArrayUtils;
import org.bouncycastle.util.encoders.Hex;
import org.jline.reader.Completer;
Expand All @@ -14,7 +30,32 @@
import org.jline.reader.impl.completer.StringsCompleter;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.tron.api.GrpcAPI.*;
import org.tron.api.GrpcAPI.AccountNetMessage;
import org.tron.api.GrpcAPI.AccountResourceMessage;
import org.tron.api.GrpcAPI.AddressPrKeyPairMessage;
import org.tron.api.GrpcAPI.AssetIssueList;
import org.tron.api.GrpcAPI.BlockExtention;
import org.tron.api.GrpcAPI.BlockList;
import org.tron.api.GrpcAPI.BlockListExtention;
import org.tron.api.GrpcAPI.BytesMessage;
import org.tron.api.GrpcAPI.DelegatedResourceList;
import org.tron.api.GrpcAPI.DiversifierMessage;
import org.tron.api.GrpcAPI.ExchangeList;
import org.tron.api.GrpcAPI.ExpandedSpendingKeyMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyDiversifierMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyMessage;
import org.tron.api.GrpcAPI.Node;
import org.tron.api.GrpcAPI.NodeList;
import org.tron.api.GrpcAPI.Note;
import org.tron.api.GrpcAPI.NumberMessage;
import org.tron.api.GrpcAPI.PaymentAddressMessage;
import org.tron.api.GrpcAPI.ProposalList;
import org.tron.api.GrpcAPI.TransactionApprovedList;
import org.tron.api.GrpcAPI.TransactionList;
import org.tron.api.GrpcAPI.TransactionListExtention;
import org.tron.api.GrpcAPI.TransactionSignWeight;
import org.tron.api.GrpcAPI.ViewingKeyMessage;
import org.tron.api.GrpcAPI.WitnessList;
import org.tron.common.crypto.Hash;
import org.tron.common.utils.AbiUtil;
import org.tron.common.utils.ByteArray;
Expand All @@ -32,18 +73,17 @@
import org.tron.core.zen.address.PaymentAddress;
import org.tron.keystore.StringUtils;
import org.tron.protos.Contract.AssetIssueContract;
import org.tron.protos.Protocol.*;
import org.tron.protos.Protocol.Account;
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.ChainParameters;
import org.tron.protos.Protocol.DelegatedResourceAccountIndex;
import org.tron.protos.Protocol.Exchange;
import org.tron.protos.Protocol.Proposal;
import org.tron.protos.Protocol.SmartContract;
import org.tron.protos.Protocol.Transaction;
import org.tron.protos.Protocol.TransactionInfo;
import org.tron.walletserver.WalletApi;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Client {

Expand Down Expand Up @@ -150,7 +190,8 @@ public class Client {
"WithdrawBalance",
"UpdateBrokerage",
"GetReward",
"GetBrokerage"
"GetBrokerage",
"CreateCrossChainTransaction"
};

private static String[] commandList = {
Expand Down Expand Up @@ -254,7 +295,8 @@ public class Client {
"WithdrawBalance",
"UpdateBrokerage",
"GetReward",
"GetBrokerage"
"GetBrokerage",
"CreateCrossChainTransaction"
};

private byte[] inputPrivateKey() throws IOException {
Expand Down Expand Up @@ -1476,7 +1518,8 @@ private void exchangeTransaction(String[] parameters)
throws IOException, CipherException, CancelException {
if (parameters == null || (parameters.length != 4 && parameters.length != 5)) {
System.out.println("Using exchangeTransaction command needs 4 or 5 parameters like: ");
System.out.println("exchangeTransaction [OwnerAddress] exchange_id token_id quantity expected");
System.out
.println("exchangeTransaction [OwnerAddress] exchange_id token_id quantity expected");
return;
}

Expand Down Expand Up @@ -2322,7 +2365,8 @@ private void showShieldedAddressInfo(String[] parameters) {
ShieldedAddressInfo addressInfo =
ShieldedWrapper.getInstance().getShieldedAddressInfoMap().get(shieldedAddress);
if (addressInfo != null) {
System.out.println("The following variables are secret information, please don't show to other people!!!");
System.out.println(
"The following variables are secret information, please don't show to other people!!!");
System.out.println("sk :" + ByteArray.toHexString(addressInfo.getSk()));
System.out.println("ivk:" + ByteArray.toHexString(addressInfo.getIvk()));
System.out.println("ovk:" + ByteArray.toHexString(addressInfo.getOvk()));
Expand Down Expand Up @@ -2804,7 +2848,8 @@ private void importShieldedWallet() throws CipherException, IOException {
walletApiWrapper.getNewShieldedAddressBySkAndD(sk, d);
if (addressInfo.isPresent() &&
ShieldedWrapper.getInstance().addNewShieldedAddress(addressInfo.get(), false)) {
System.out.println("Import new shielded wallet address is: " + addressInfo.get().getAddress());
System.out
.println("Import new shielded wallet address is: " + addressInfo.get().getAddress());
System.out.println("ImportShieldedWallet successful !!!");
} else {
System.out.println("ImportShieldedWallet failed !!!");
Expand Down Expand Up @@ -2844,6 +2889,43 @@ private void create2(String[] parameters) {
return;
}

private void createCrossChainTransaction(String[] parameters)
throws IOException, CipherException, CancelException {
if (parameters == null || parameters.length < 8) {
System.out.println("Using createCrossChainTransaction command needs 2 parameters like: ");
System.out.println(
"createCrossChainTransaction [OwnerAddress] ownerChainId toAddress toChainId tokenId tokenChainId tokenName precision amount");
return;
}

int index = 0;
byte[] ownerAddress = null;

if (parameters.length == 9) {
ownerAddress = WalletApi.decodeFromBase58Check(parameters[index++]);
}
String ownerChainId = parameters[index++];
byte[] toAddress = WalletApi.decodeFromBase58Check(parameters[index++]);
String toChainId = parameters[index++];
String tokenId = parameters[index++];
String tokenChainId = parameters[index++];
String tokenName = parameters[index++];
int precision = Integer.valueOf(parameters[index++]);
long amount = Long.valueOf(parameters[index++]);

if (precision < 0 || precision > 6) {
System.out.println("precision between 0-6.");
return;
}
boolean result = walletApiWrapper.createCrossChainTransaction(ownerChainId, toChainId,
ownerAddress, toAddress, tokenId, tokenChainId, tokenName, precision, amount);
if (result) {
System.out.println("createCrossChainTransaction successful !!!");
} else {
System.out.println("createCrossChainTransaction failed !!!");
}
}

private void help() {
System.out.println("Help: List of Tron Wallet-cli commands");
System.out.println(
Expand Down Expand Up @@ -3343,6 +3425,10 @@ private void run() {
create2(parameters);
break;
}
case "createcrosschaintransaction": {
createCrossChainTransaction(parameters);
break;
}
case "exit":
case "quit": {
System.out.println("Exit !!!");
Expand Down
55 changes: 47 additions & 8 deletions src/main/java/org/tron/walletcli/WalletApiWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,37 @@

import com.google.protobuf.ByteString;
import io.netty.util.internal.StringUtil;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import org.tron.api.GrpcAPI;
import org.tron.api.GrpcAPI.*;
import org.tron.api.GrpcAPI.AddressPrKeyPairMessage;
import org.tron.api.GrpcAPI.AssetIssueList;
import org.tron.api.GrpcAPI.BlockExtention;
import org.tron.api.GrpcAPI.BytesMessage;
import org.tron.api.GrpcAPI.DecryptNotes;
import org.tron.api.GrpcAPI.DecryptNotesMarked;
import org.tron.api.GrpcAPI.DiversifierMessage;
import org.tron.api.GrpcAPI.ExchangeList;
import org.tron.api.GrpcAPI.ExpandedSpendingKeyMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyDiversifierMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyMessage;
import org.tron.api.GrpcAPI.IvkDecryptAndMarkParameters;
import org.tron.api.GrpcAPI.IvkDecryptParameters;
import org.tron.api.GrpcAPI.NfParameters;
import org.tron.api.GrpcAPI.NodeList;
import org.tron.api.GrpcAPI.Note;
import org.tron.api.GrpcAPI.OvkDecryptParameters;
import org.tron.api.GrpcAPI.PaymentAddressMessage;
import org.tron.api.GrpcAPI.PrivateParameters;
import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk;
import org.tron.api.GrpcAPI.ProposalList;
import org.tron.api.GrpcAPI.ReceiveNote;
import org.tron.api.GrpcAPI.SpendNote;
import org.tron.api.GrpcAPI.ViewingKeyMessage;
import org.tron.api.GrpcAPI.WitnessList;
import org.tron.common.utils.ByteArray;
import org.tron.common.utils.Utils;
import org.tron.core.exception.CancelException;
Expand All @@ -25,14 +53,14 @@
import org.tron.protos.Contract.IncrementalMerkleVoucherInfo;
import org.tron.protos.Contract.OutputPoint;
import org.tron.protos.Contract.OutputPointInfo;
import org.tron.protos.Protocol.*;
import org.tron.protos.Protocol.Account;
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.ChainParameters;
import org.tron.protos.Protocol.Exchange;
import org.tron.protos.Protocol.Proposal;
import org.tron.protos.Protocol.Transaction;
import org.tron.walletserver.WalletApi;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;

@Slf4j
public class WalletApiWrapper {

Expand Down Expand Up @@ -125,7 +153,6 @@ public void logout() {
}



//password is current, will be enc by password2.
public byte[] backupWallet() throws IOException, CipherException {
if (wallet == null || !wallet.isLoginState()) {
Expand Down Expand Up @@ -1209,4 +1236,16 @@ public GrpcAPI.NumberMessage getReward(byte[] ownerAddress) {
public GrpcAPI.NumberMessage getBrokerage(byte[] ownerAddress) {
return WalletApi.getBrokerage(ownerAddress);
}

public boolean createCrossChainTransaction(String ownerChainId, String toChainId, byte[] owner,
byte[] toAddress, String tokenId, String tokenChainId, String tokenName, int precision,
long amount)
throws CipherException, IOException, CancelException {
if (wallet == null || !wallet.isLoginState()) {
System.out.println("Warning: updateSetting failed, Please login first !!");
return false;
}
return wallet.createCrossChainTransaction(ownerChainId, toChainId, owner, toAddress, tokenId,
tokenChainId, tokenName, precision, amount);
}
}
70 changes: 64 additions & 6 deletions src/main/java/org/tron/walletserver/GrpcClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,76 @@
import com.google.protobuf.ByteString;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.tron.api.GrpcAPI;
import org.tron.api.GrpcAPI.*;
import org.tron.api.GrpcAPI.AccountNetMessage;
import org.tron.api.GrpcAPI.AccountPaginated;
import org.tron.api.GrpcAPI.AccountResourceMessage;
import org.tron.api.GrpcAPI.AddressPrKeyPairMessage;
import org.tron.api.GrpcAPI.AssetIssueList;
import org.tron.api.GrpcAPI.BlockExtention;
import org.tron.api.GrpcAPI.BlockLimit;
import org.tron.api.GrpcAPI.BlockList;
import org.tron.api.GrpcAPI.BlockListExtention;
import org.tron.api.GrpcAPI.BytesMessage;
import org.tron.api.GrpcAPI.DecryptNotes;
import org.tron.api.GrpcAPI.DecryptNotesMarked;
import org.tron.api.GrpcAPI.DelegatedResourceList;
import org.tron.api.GrpcAPI.DelegatedResourceMessage;
import org.tron.api.GrpcAPI.DiversifierMessage;
import org.tron.api.GrpcAPI.EasyTransferAssetByPrivateMessage;
import org.tron.api.GrpcAPI.EasyTransferAssetMessage;
import org.tron.api.GrpcAPI.EasyTransferByPrivateMessage;
import org.tron.api.GrpcAPI.EasyTransferMessage;
import org.tron.api.GrpcAPI.EasyTransferResponse;
import org.tron.api.GrpcAPI.EmptyMessage;
import org.tron.api.GrpcAPI.ExchangeList;
import org.tron.api.GrpcAPI.ExpandedSpendingKeyMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyDiversifierMessage;
import org.tron.api.GrpcAPI.IncomingViewingKeyMessage;
import org.tron.api.GrpcAPI.IvkDecryptAndMarkParameters;
import org.tron.api.GrpcAPI.IvkDecryptParameters;
import org.tron.api.GrpcAPI.NfParameters;
import org.tron.api.GrpcAPI.NodeList;
import org.tron.api.GrpcAPI.NoteParameters;
import org.tron.api.GrpcAPI.NumberMessage;
import org.tron.api.GrpcAPI.OvkDecryptParameters;
import org.tron.api.GrpcAPI.PaginatedMessage;
import org.tron.api.GrpcAPI.PaymentAddressMessage;
import org.tron.api.GrpcAPI.PrivateParameters;
import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk;
import org.tron.api.GrpcAPI.ProposalList;
import org.tron.api.GrpcAPI.Return.response_code;
import org.tron.api.GrpcAPI.SpendAuthSigParameters;
import org.tron.api.GrpcAPI.SpendResult;
import org.tron.api.GrpcAPI.TransactionApprovedList;
import org.tron.api.GrpcAPI.TransactionExtention;
import org.tron.api.GrpcAPI.TransactionList;
import org.tron.api.GrpcAPI.TransactionListExtention;
import org.tron.api.GrpcAPI.TransactionSignWeight;
import org.tron.api.GrpcAPI.ViewingKeyMessage;
import org.tron.api.GrpcAPI.WitnessList;
import org.tron.api.WalletExtensionGrpc;
import org.tron.api.WalletGrpc;
import org.tron.api.WalletSolidityGrpc;
import org.tron.common.utils.ByteArray;
import org.tron.protos.Contract;
import org.tron.protos.Contract.IncrementalMerkleVoucherInfo;
import org.tron.protos.Contract.OutputPointInfo;
import org.tron.protos.Protocol.*;

import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import org.tron.protos.Protocol.Account;
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.ChainParameters;
import org.tron.protos.Protocol.DelegatedResourceAccountIndex;
import org.tron.protos.Protocol.Exchange;
import org.tron.protos.Protocol.Proposal;
import org.tron.protos.Protocol.SmartContract;
import org.tron.protos.Protocol.Transaction;
import org.tron.protos.Protocol.TransactionInfo;
import org.tron.protos.Protocol.TransactionSign;

@Slf4j
public class GrpcClient {
Expand Down Expand Up @@ -894,4 +947,9 @@ public NumberMessage getBrokerage(byte[] address) {
return blockingStubFull.getBrokerageInfo(bytesMessage);
}
}

public TransactionExtention createCrossChainTransaction(
Transaction transaction) {
return blockingStubFull.createCommonTransaction(transaction);
}
}
Loading