Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(freezeV2): upgrade stake2.0 APIs #642

Merged
merged 1 commit into from
Jun 8, 2023
Merged
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
44 changes: 42 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ For more information on a specific command, just type the command on terminal wh
| [UpdateBrokerage](#Brokerage) | [UpdateEnergyLimit](#How-to-use-smart-contracts) |[UpdateSetting](#How-to-use-smart-contracts) |
| [UpdateAccountPermission](#How-to-use-the-multi-signature-feature-of-wallet-cli) | [VoteWitness](#How-to-vote) | [FreezeBalanceV2](#How-to-freezev2) |
| [UnfreezeBalanceV2](#How-to-freezev2) | [DelegateResource](#How-to-freezev2) | [UnDelegateResource](#How-to-freezev2) |
| [WithdrawExpireUnfreeze](#How-to-freezev2) | [GetDelegatedResourceV2](#How-to-freezev2) | [GetDelegatedResourceAccountIndexV2](#How-to-freezev2) |
| [GetCanDelegatedMaxSize](#How-to-freezev2) | [GetAvailableUnfreezeCount](#How-to-freezev2) | |
| [WithdrawExpireUnfreeze](#How-to-freezev2) | [CancelAllUnfreezeV2](#How-to-freezev2) |[GetDelegatedResourceV2](#How-to-freezev2) |
| [GetDelegatedResourceAccountIndexV2](#How-to-freezev2) | [GetCanDelegatedMaxSize](#How-to-freezev2) | [GetAvailableUnfreezeCount](#How-to-freezev2) | |

Type any one of the listed commands, to display how-to tips.

Expand Down Expand Up @@ -1342,6 +1342,46 @@ wallet> GetTransactionById e5763ab8dfb1e7ed076770d55cf3c1ddaf36d75e23ec8330f99df
"raw_data_hex":"0a020000220819b59068c6058ff44096e18bb5d1305a5a083812560a3b747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5769746864726177457870697265556e667265657a65436f6e747261637412170a154159e3741a68ec3e1ebba80ad809d5ccd31674236e7093b3e5aad130"
}
```
> cancelAllUnfreezeV2 [OwnerAddress]

OwnerAddress
> The address of the account that initiated the transaction, optional, default is the address of the login account.

Example:
```console
wallet> cancelAllUnfreezeV2 TJAVcszse667FmSNCwU2fm6DmfM5D4AyDh
txid is e5763ab8dfb1e7ed076770d55cf3c1ddaf36d75e23ec8330f99df7e98f54a147
wallet> GetTransactionById e5763ab8dfb1e7ed076770d55cf3c1ddaf36d75e23ec8330f99df7e98f54a147
{
"ret":[
{
"contractRet":"SUCCESS"
}
],
"signature":[
"f8f02b5aa634b8666862a6d2ed68fcfd90afc616d14062952b0b09f0404d9bca6c4d3dc6dab082784950ff1ded235a07dab0d738c8a202be9451d5ca92b8eece01"
],
"txID":"e5763ab8dfb1e7ed076770d55cf3c1ddaf36d75e23ec8330f99df7e98f54a147",
"raw_data":{
"contract":[
{
"parameter":{
"value":{
"owner_address":"4159e3741a68ec3e1ebba80ad809d5ccd31674236e"
},
"type_url":"type.googleapis.com/protocol.CancelAllUnfreezeV2"
},
"type":"CancelAllUnfreezeV2Contract"
}
],
"ref_block_bytes":"0000",
"ref_block_hash":"19b59068c6058ff4",
"expiration":1671122055318,
"timestamp":1671100455315
},
"raw_data_hex":"0a020000220819b59068c6058ff44096e18bb5d1305a5a083812560a3b747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5769746864726177457870697265556e667265657a65436f6e747261637412170a154159e3741a68ec3e1ebba80ad809d5ccd31674236e7093b3e5aad130"
}
```

### get resource delegation information use v2 API

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,9 @@ public class HttpSelfFormatFieldName {
//UnDelegateResourceContract
AddressFieldNameMap.put("protocol.UnDelegateResourceContract.owner_address", 1);
AddressFieldNameMap.put("protocol.UnDelegateResourceContract.receiver_address", 1);
//CancelAllUnfreezeV2Contract
AddressFieldNameMap.put("protocol.CancelAllUnfreezeV2Contract.owner_address", 1);

AddressFieldNameMap.put("protocol.CanDelegatedMaxSizeRequestMessage.owner_address", 1);
AddressFieldNameMap.put("protocol.GetAvailableUnfreezeCountRequestMessage.owner_address", 1);
AddressFieldNameMap.put("protocol.CanWithdrawUnfreezeAmountRequestMessage.owner_address", 1);
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/org/tron/common/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package org.tron.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.protobuf.Any;
Expand Down Expand Up @@ -55,6 +56,7 @@
import org.tron.protos.contract.AssetIssueContractOuterClass.TransferAssetContract;
import org.tron.protos.contract.AssetIssueContractOuterClass.UnfreezeAssetContract;
import org.tron.protos.contract.AssetIssueContractOuterClass.UpdateAssetContract;
import org.tron.protos.contract.BalanceContract.CancelAllUnfreezeV2Contract;
import org.tron.protos.contract.BalanceContract.FreezeBalanceContract;
import org.tron.protos.contract.BalanceContract.TransferContract;
import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract;
Expand Down Expand Up @@ -618,6 +620,12 @@ public static JSONObject printTransactionToJSON(Transaction transaction, boolean
JSONObject.parseObject(
JsonFormat.printToString(unDelegateResourceContract, selfType));
break;
case CancelAllUnfreezeV2Contract:
CancelAllUnfreezeV2Contract cancelAllUnfreezeV2Contract =
contractParameter.unpack(CancelAllUnfreezeV2Contract.class);
contractJson = JSON.parseObject(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not use JSONObject.parseObject like everywhere else.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ParseObject is a static method of the parent class, and it is recommended to call static methods directly through the parent class.

JsonFormat.printToString(cancelAllUnfreezeV2Contract, selfType));
break;
// new freeze end
// todo add other contract
default:
Expand Down
48 changes: 36 additions & 12 deletions src/main/java/org/tron/walletcli/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.io.IOException;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Base64.Decoder;
Expand Down Expand Up @@ -34,7 +33,6 @@
import org.tron.common.zksnark.LibrustzcashParam;
import org.tron.core.exception.CancelException;
import org.tron.core.exception.CipherException;
import org.tron.core.exception.EncodingException;
import org.tron.core.exception.ZksnarkException;
import org.tron.core.zen.ShieldedAddressInfo;
import org.tron.core.zen.ShieldedNoteInfo;
Expand Down Expand Up @@ -84,6 +82,7 @@ public class Client {
"BackupWallet",
"BackupWallet2Base64",
"BroadcastTransaction",
"CancelAllUnfreezeV2",
"ChangePassword",
"ClearContractABI",
"Create2",
Expand Down Expand Up @@ -225,6 +224,7 @@ public class Client {
"BackupWallet",
"BackupWallet2Base64",
"BroadcastTransaction",
"CancelAllUnfreezeV2",
"ChangePassword",
"ClearContractABI",
"Create2",
Expand Down Expand Up @@ -1408,30 +1408,32 @@ private void withdrawExpireUnfreeze(String[] parameters)

private void delegateResource(String[] parameters)
throws IOException, CipherException, CancelException {
if (parameters == null || !(parameters.length == 3 || parameters.length == 4 || parameters.length == 5)) {
if (parameters == null || !(parameters.length == 3 || parameters.length == 4 || parameters.length == 5 || parameters.length == 6)) {
System.out.println("Use delegateResource command with below syntax: ");
System.out.println(
"delegateResource [OwnerAddress] balance ResourceCode(0 BANDWIDTH,1 ENERGY), ReceiverAddress [lock]");
"delegateResource [OwnerAddress] balance ResourceCode(0 BANDWIDTH,1 ENERGY), "
+ "ReceiverAddress [lock] [lockPeriod]");
return;
}

int index = 0;
byte[] ownerAddress = null;
long balance = 0;
int resourceCode = 0;
byte[] receiverAddress = null;
long balance;
int resourceCode;
byte[] receiverAddress;
boolean lock = false;
long lockPeriod = 0;

if (parameters.length == 3) {
balance = Long.parseLong(parameters[index++]);
resourceCode = Integer.parseInt(parameters[index++]);
receiverAddress = getAddressBytes(parameters[index++]);
receiverAddress = getAddressBytes(parameters[index]);
if (receiverAddress == null) {
System.out.println(
"delegateResource receiverAddress is invalid");
return;
}
} else if (parameters.length == 4 || parameters.length == 5) {
} else {
ownerAddress = getAddressBytes(parameters[index]);
if (ownerAddress != null) {
index ++;
Expand All @@ -1445,14 +1447,17 @@ private void delegateResource(String[] parameters)
return;
}

if (parameters.length == 5 ||
(ownerAddress == null && parameters.length == 4)) {
if (parameters.length == 5 || (ownerAddress == null && parameters.length == 4)) {
lock = Boolean.parseBoolean(parameters[index++]);
}
if (parameters.length == 6 || (ownerAddress == null && parameters.length == 5)) {
lock = Boolean.parseBoolean(parameters[index++]);
lockPeriod = Long.parseLong(parameters[index]);
}
}

boolean result = walletApiWrapper.delegateresource(
ownerAddress, balance, resourceCode, receiverAddress, lock);
ownerAddress, balance, resourceCode, receiverAddress, lock, lockPeriod);
if (result) {
System.out.println("delegateResource successful !!!");
} else {
Expand Down Expand Up @@ -1508,6 +1513,21 @@ private void unDelegateResource(String[] parameters)
}
}

private void cancelAllUnfreezeV2(String[] parameters)
throws IOException, CipherException, CancelException {
if (parameters.length > 0) {
System.out.println("Use CancelAllUnfreezeV2 command with below syntax: ");
System.out.println("CancelAllUnfreezeV2");
return;
}
boolean result = walletApiWrapper.cancelAllUnfreezeV2();
if (result) {
System.out.println("cancelAllUnfreezeV2 successful !!!");
} else {
System.out.println("cancelAllUnfreezeV2 failed !!!");
}
}

private void unfreezeAsset(String[] parameters) throws IOException,
CipherException, CancelException {
System.out.println("Use UnfreezeAsset command like: ");
Expand Down Expand Up @@ -4505,6 +4525,10 @@ private void run() {
unDelegateResource(parameters);
break;
}
case "cancelallunfreezev2": {
cancelAllUnfreezeV2(parameters);
break;
}
case "withdrawbalance": {
withdrawBalance(parameters);
break;
Expand Down
14 changes: 11 additions & 3 deletions src/main/java/org/tron/walletcli/WalletApiWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.tron.core.zen.address.SpendingKey;
import org.tron.keystore.StringUtils;
import org.tron.keystore.WalletFile;
import org.tron.keystore.WalletUtils;
import org.tron.protos.Protocol.Account;
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.ChainParameters;
Expand Down Expand Up @@ -548,15 +547,15 @@ public boolean withdrawExpireUnfreeze(byte[] ownerAddress)
}

public boolean delegateresource(byte[] ownerAddress, long balance
, int resourceCode, byte[] receiverAddress, boolean lock)
, int resourceCode, byte[] receiverAddress, boolean lock, long lockPeriod)
throws CipherException, IOException, CancelException {
if (wallet == null || !wallet.isLoginState()) {
System.out.println("Warning: delegateresource failed, Please login first !!");
return false;
}

return wallet.delegateResource(ownerAddress, balance
, resourceCode, receiverAddress, lock);
, resourceCode, receiverAddress, lock, lockPeriod);
}

public boolean undelegateresource(byte[] ownerAddress, long balance
Expand All @@ -570,6 +569,15 @@ public boolean undelegateresource(byte[] ownerAddress, long balance
return wallet.unDelegateResource(ownerAddress, balance, resourceCode, receiverAddress);
}

public boolean cancelAllUnfreezeV2()
throws CipherException, IOException, CancelException {
if (wallet == null || !wallet.isLoginState()) {
System.out.println("Warning: cancelAllUnfreezeV2 failed, Please login first !!");
return false;
}
return wallet.cancelAllUnfreezeV2();
}

public boolean unfreezeAsset(byte[] ownerAddress)
throws CipherException, IOException, CancelException {
if (wallet == null || !wallet.isLoginState()) {
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/org/tron/walletserver/GrpcClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.tron.protos.contract.AssetIssueContractOuterClass.UnfreezeAssetContract;
import org.tron.protos.contract.AssetIssueContractOuterClass.UpdateAssetContract;
import org.tron.protos.contract.BalanceContract;
import org.tron.protos.contract.BalanceContract.CancelAllUnfreezeV2Contract;
import org.tron.protos.contract.BalanceContract.FreezeBalanceContract;
import org.tron.protos.contract.BalanceContract.TransferContract;
import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract;
Expand Down Expand Up @@ -229,6 +230,10 @@ public TransactionExtention createTransactionV2(BalanceContract.UnDelegateResour
return blockingStubFull.unDelegateResource(contract);
}

public TransactionExtention createTransactionV2(CancelAllUnfreezeV2Contract contract) {
return blockingStubFull.cancelAllUnfreezeV2(contract);
}

public Transaction createTransaction(UnfreezeAssetContract contract) {
return blockingStubFull.unfreezeAsset(contract);
}
Expand Down
48 changes: 32 additions & 16 deletions src/main/java/org/tron/walletserver/WalletApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
import org.tron.protos.contract.AssetIssueContractOuterClass.UnfreezeAssetContract;
import org.tron.protos.contract.AssetIssueContractOuterClass.UpdateAssetContract;
import org.tron.protos.contract.BalanceContract;
import org.tron.protos.contract.BalanceContract.CancelAllUnfreezeV2Contract;
import org.tron.protos.contract.BalanceContract.FreezeBalanceContract;
import org.tron.protos.contract.BalanceContract.TransferContract;
import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract;
Expand Down Expand Up @@ -1368,10 +1369,10 @@ public boolean withdrawExpireUnfreeze(byte[] ownerAddress)
}

public boolean delegateResource(byte[] ownerAddress, long balance
,int resourceCode, byte[] receiverAddress, boolean lock)
,int resourceCode, byte[] receiverAddress, boolean lock, long lockPeriod)
throws CipherException, IOException, CancelException {
BalanceContract.DelegateResourceContract contract = createDelegateResourceContract(
ownerAddress, balance, resourceCode, receiverAddress, lock);
ownerAddress, balance, resourceCode, receiverAddress, lock, lockPeriod);
TransactionExtention transactionExtention = rpcCli.createTransactionV2(contract);
return processTransactionExtention(transactionExtention);
}
Expand All @@ -1385,6 +1386,13 @@ public boolean unDelegateResource(byte[] ownerAddress, long balance
return processTransactionExtention(transactionExtention);
}

public boolean cancelAllUnfreezeV2()
throws CipherException, IOException, CancelException {
CancelAllUnfreezeV2Contract contract = createCancelAllUnfreezeV2Contract();
TransactionExtention transactionExtention = rpcCli.createTransactionV2(contract);
return processTransactionExtention(transactionExtention);
}

private UnfreezeBalanceContract createUnfreezeBalanceContract(
byte[] address, int resourceCode, byte[] receiverAddress) {
if (address == null) {
Expand All @@ -1393,8 +1401,8 @@ private UnfreezeBalanceContract createUnfreezeBalanceContract(

UnfreezeBalanceContract.Builder builder =
UnfreezeBalanceContract.newBuilder();
ByteString byteAddreess = ByteString.copyFrom(address);
builder.setOwnerAddress(byteAddreess).setResourceValue(resourceCode);
ByteString byteAddress = ByteString.copyFrom(address);
builder.setOwnerAddress(byteAddress).setResourceValue(resourceCode);

if (receiverAddress != null) {
ByteString receiverAddressBytes =
Expand All @@ -1413,8 +1421,8 @@ private BalanceContract.UnfreezeBalanceV2Contract createUnfreezeBalanceContractV

BalanceContract.UnfreezeBalanceV2Contract.Builder builder =
BalanceContract.UnfreezeBalanceV2Contract.newBuilder();
ByteString byteAddreess = ByteString.copyFrom(address);
builder.setOwnerAddress(byteAddreess).setResourceValue(resourceCode).setUnfreezeBalance(unfreezeBalance);
ByteString byteAddress = ByteString.copyFrom(address);
builder.setOwnerAddress(byteAddress).setResourceValue(resourceCode).setUnfreezeBalance(unfreezeBalance);

return builder.build();
}
Expand All @@ -1434,20 +1442,21 @@ private BalanceContract.WithdrawExpireUnfreezeContract createWithdrawExpireUnfre

private BalanceContract.DelegateResourceContract createDelegateResourceContract(
byte[] address, long balance
,int resourceCode, byte[] receiver, boolean lock) {
,int resourceCode, byte[] receiver, boolean lock, long lockPeriod) {
if (address == null) {
address = getAddress();
}

BalanceContract.DelegateResourceContract.Builder builder =
BalanceContract.DelegateResourceContract.newBuilder();
ByteString byteAddreess = ByteString.copyFrom(address);
ByteString byteReceiverAddreess = ByteString.copyFrom(receiver);
builder.setOwnerAddress(byteAddreess)
ByteString byteAddress = ByteString.copyFrom(address);
ByteString byteReceiverAddress = ByteString.copyFrom(receiver);
builder.setOwnerAddress(byteAddress)
.setResourceValue(resourceCode)
.setBalance(balance)
.setReceiverAddress(byteReceiverAddreess)
.setLock(lock);
.setReceiverAddress(byteReceiverAddress)
.setLock(lock)
.setLockPeriod(lockPeriod);

return builder.build();
}
Expand All @@ -1461,13 +1470,20 @@ private BalanceContract.UnDelegateResourceContract createUnDelegateResourceContr

BalanceContract.UnDelegateResourceContract.Builder builder =
BalanceContract.UnDelegateResourceContract.newBuilder();
ByteString byteAddreess = ByteString.copyFrom(address);
ByteString byteReceiverAddreess = ByteString.copyFrom(receiver);
builder.setOwnerAddress(byteAddreess)
ByteString byteAddress = ByteString.copyFrom(address);
ByteString byteReceiverAddress = ByteString.copyFrom(receiver);
builder.setOwnerAddress(byteAddress)
.setResourceValue(resourceCode)
.setBalance(balance)
.setReceiverAddress(byteReceiverAddreess);
.setReceiverAddress(byteReceiverAddress);

return builder.build();
}

private CancelAllUnfreezeV2Contract createCancelAllUnfreezeV2Contract() {
CancelAllUnfreezeV2Contract.Builder builder = CancelAllUnfreezeV2Contract.newBuilder();
ByteString byteAddress = ByteString.copyFrom(getAddress());
builder.setOwnerAddress(byteAddress);
return builder.build();
}

Expand Down
Loading