Skip to content

Commit

Permalink
feat(freezeV2): upgrade stake2.0 APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
lxcmyf committed Jun 8, 2023
1 parent cf87486 commit dd5c16b
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 33 deletions.
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(
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

0 comments on commit dd5c16b

Please sign in to comment.