diff --git a/CHANGELOG.md b/CHANGELOG.md
index df3a6817..85a5ce85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,25 @@
# Changelog
+
+## 1.1.2
+API UPGRADE
+* [\#120](https://github.com/binance-chain/java-sdk/pull/120) [RPC] [API] deco old rest transactions api, and add new rest transaction apis
+
+Breaking Changes
+* getTransactions(TransactionsRequest request) will return transactions with new data model TransactionPageV2
+* getTransactions(String address) will return transactions for an address in last 24 hours with new data model TransactionPageV2
+
+Please refer to TransactionConverterFactory.java to see the mappings of the fields between TransactionPageV2 and TransactionPage
+
+Please refer to TransactionExample.java and [API Doc](https://docs.binance.org/api-reference/dex-api/block-service.html) for more details, the underlying API [Migration Guide](https://github.com/binance-chain/docs-site/blob/block-service/docs/api-reference/dex-api/migration-guide.md) could be also useful
+
+New API
+* getTransactionsInBlock(long blockHeight) will return transaction in a specific block.
+
+
+## 1.1.1
+CHAIN UPGRADE
+* [\#105](https://github.com/binance-chain/java-sdk/pull/105) [RPC] [API] support for the transfer of token ownership, and decode the new types of oracle claim package
+
## 1.1.0
CHAIN UPGRADE
* [\#88](https://github.com/binance-chain/java-sdk/pull/88) [RPC] [API] enable side chain governance transaction
diff --git a/LICENSE b/LICENSE
index f48a48cd..2b3b563f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright 2018-2019 Binance
+ Copyright 2018-2019 All BNB Chain Developers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
index cb8f17f8..b5c282c4 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,32 @@
-# Binance Chain Java SDK
+# BNB Beacon Chain Java SDK
+
+The BNB Beacon Chain Java SDK works as a lightweight Java library for interacting with the [BNB Beacon Chain](https://docs.bnbchain.org/docs/beaconchain/develop/api-reference/dex-api/paths). It provides a complete API coverage, and supports synchronous and asynchronous requests. It includes the following core components:
+
+* **[crypto](https://github.com/bnb-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/encoding/Crypto.java)** - core cryptographic functions.
+* **[amino encoding](https://github.com/bnb-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/encoding)** - [amino](https://docs.bnbchain.org/docs/beaconchain/learn/encoding/encoding/#amino) (protobuf-like) encoding and decoding of transactions.
+* **[client](https://github.com/bnb-chain/java-sdk/tree/master/src/main/java/com/binance/dex/api/client/impl)** - implementations of API rest client, supporting synchronous and asynchronous access to BNB Beacon Chain's REST APIs.
+* **[wallet](https://github.com/bnb-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/Wallet.java)** - management of accounts, including seed and encrypted mnemonic generation.
+
+# How to get
+
+1. Add the JitPack repository to your project's `pom.xml`:
+ ```
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+ ```
+2. Add the dependency:
+ ```
+
+ com.github.bnb-chain
+ java-sdk
+ Tag
+
+ ```
-The Binance Chain Java SDK works as a lightweight Java library for interacting with the [Binance Chain](https://binance-chain.github.io/api-reference/dex-api/paths.html). It provides a complete API coverage, and supports synchronous and asynchronous requests. It includes the following core components:
-
-* **[crypto](https://github.com/binance-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/encoding/Crypto.java)** - core cryptographic functions.
-* **[amino encoding](https://github.com/binance-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/encoding)** - [amino](https://github.com/binance-chain/docs-site/blob/master/docs/encoding.md) (protobuf-like) encoding and decoding of transactions.
-* **[client](https://github.com/binance-chain/java-sdk/tree/master/src/main/java/com/binance/dex/api/client/impl)** - implementations of API rest client, supporting synchronous and asynchronous access to Binance Chain's REST APIs.
-* **[wallet](https://github.com/binance-chain/java-sdk/blob/master/src/main/java/com/binance/dex/api/client/Wallet.java)** - management of accounts, including seed and encrypted mnemonic generation.
-
-## Disclaimer
-**This branch is under active development, all subject to potential future change without notification and not ready for production use. The code and security audit have not been fully completed and not ready for any bug bounty.**
-
-# Installation
-
-
-1. Install library into your Maven's local repository by running `mvn install`
-2. Add the following Maven dependency to your project's `pom.xml`:
-```
-
- com.binance.dex.api
- binance-dex-api-client
- 1.1.0
-
-```
# Protobuf
The protobuf-maven-plugin is used in this SDK. It is a plugin that integrates protocol buffers compiler (protoc) into Maven lifecycle. The Plugin generates Java source files from .proto (protocol buffer definition) files for this project by running `mvn compile`.
@@ -30,18 +35,14 @@ These Java source files will be packaged into the final artifact and referenced
More details please refer to https://github.com/xolstice/protobuf-maven-plugin
-
-
# API
-For examples, please check the [wiki](https://github.com/binance-chain/java-sdk/wiki).
+For examples, please check the [wiki](https://github.com/bnb-chain/java-sdk/wiki/API).
# Testing
-All new code changes should be covered with unit tests. You can see the existing test cases here: https://github.com/binance-chain/java-sdk/tree/master/src/test/java/com/binance/dex/api/client/encoding
-
+All new code changes should be covered with unit tests. You can see the existing test cases [here](https://github.com/bnb-chain/java-sdk/tree/master/src/test/java/com/binance/dex/api/client/encoding).
# Contributing
-Contributions to the Binance Chain Java SDK are welcome. Please ensure that you have tested the changes with a local client and have added unit test coverage for your code.
-
+Contributions to the BNB Beacon Chain Java SDK are welcome. Please ensure that you have tested the changes with a local client and have added unit test coverage for your code.
diff --git a/pom.xml b/pom.xml
index 76e35d70..11d56d7a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,14 @@
com.binance.dex.api
binance-dex-api-client
- 1.1.1
+ 1.1.8
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
2.6.0
@@ -35,7 +42,7 @@
com.google.protobuf
protobuf-java
- 3.6.1
+ 3.16.3
io.grpc
@@ -70,7 +77,7 @@
junit
junit
- 4.12
+ 4.13.1
test
@@ -105,9 +112,9 @@
- org.ethereum
- ethereumj-core
- 1.12.0-RELEASE
+ com.github.ethereum
+ ethereumj
+ 1.12.0
org.ethereum
@@ -121,6 +128,10 @@
org.iq80.leveldb
leveldb
+
+ org.ethereum
+ leveldbjni-all
+
@@ -163,4 +174,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/java/com/binance/dex/api/client/BinanceDexApi.java b/src/main/java/com/binance/dex/api/client/BinanceDexApi.java
index 15523b97..3f54eda6 100644
--- a/src/main/java/com/binance/dex/api/client/BinanceDexApi.java
+++ b/src/main/java/com/binance/dex/api/client/BinanceDexApi.java
@@ -76,13 +76,6 @@ Call getTrades(@Query("address") String address,
@Query("sellerOrderId") String sellerOrderId, @Query("side") Integer side,
@Query("start") Long start, @Query("symbol") String symbol, @Query("total") Integer total);
- @GET("api/v1/transactions")
- Call getTransactions(@Query("address") String address, @Query("blockHeight") Long blockHeight,
- @Query("endTime") Long endTime, @Query("limit") Integer limit,
- @Query("offset") Integer offset, @Query("side") String side,
- @Query("startTime") Long startTime, @Query("txAsset") String txAsset,
- @Query("txType") String txType);
-
@POST("api/v1/broadcast")
Call> broadcast(@Query("sync") boolean sync, @Body RequestBody transaction);
diff --git a/src/main/java/com/binance/dex/api/client/BinanceDexApiAsyncRestClient.java b/src/main/java/com/binance/dex/api/client/BinanceDexApiAsyncRestClient.java
index 85061bbe..4b8776db 100644
--- a/src/main/java/com/binance/dex/api/client/BinanceDexApiAsyncRestClient.java
+++ b/src/main/java/com/binance/dex/api/client/BinanceDexApiAsyncRestClient.java
@@ -51,9 +51,11 @@ void getCandleStickBars(String symbol, CandlestickInterval interval, Integer lim
void getTrades(TradesRequest request, BinanceDexApiCallback callback);
- void getTransactions(String address, BinanceDexApiCallback callback);
+ void getTransactions(String address, BinanceDexApiCallback callback);
- void getTransactions(TransactionsRequest request, BinanceDexApiCallback callback);
+ void getTransactions(TransactionsRequest request, BinanceDexApiCallback callback);
+
+ void getTransactionsInBlock(long blockHeight, BinanceDexApiCallback callback);
// Do not support async commitBroadcast due to account sequence
}
diff --git a/src/main/java/com/binance/dex/api/client/BinanceDexApiNodeClient.java b/src/main/java/com/binance/dex/api/client/BinanceDexApiNodeClient.java
index 4829ee0d..bab0fea9 100644
--- a/src/main/java/com/binance/dex/api/client/BinanceDexApiNodeClient.java
+++ b/src/main/java/com/binance/dex/api/client/BinanceDexApiNodeClient.java
@@ -1,7 +1,6 @@
package com.binance.dex.api.client;
import com.binance.dex.api.client.domain.*;
-import com.binance.dex.api.client.domain.bridge.TransferIn;
import com.binance.dex.api.client.domain.broadcast.*;
import com.binance.dex.api.client.domain.broadcast.Transaction;
import com.binance.dex.api.client.domain.oracle.Prophecy;
@@ -10,6 +9,11 @@
import com.binance.dex.api.client.domain.request.TradesRequest;
import com.binance.dex.api.client.domain.request.TransactionsRequest;
import com.binance.dex.api.client.domain.stake.Pool;
+import com.binance.dex.api.client.domain.stake.beaconchain.*;
+import com.binance.dex.api.client.domain.stake.Delegation;
+import com.binance.dex.api.client.domain.stake.Redelegation;
+import com.binance.dex.api.client.domain.stake.UnBondingDelegation;
+import com.binance.dex.api.client.domain.stake.Validator;
import com.binance.dex.api.client.domain.stake.sidechain.*;
import javax.annotation.Nullable;
@@ -132,12 +136,17 @@ default TradePage getTrades(TradesRequest request) {
}
@Override
- default TransactionPage getTransactions(String address) {
+ default TransactionPageV2 getTransactions(String address) {
throw new UnsupportedOperationException();
}
@Override
- default TransactionPage getTransactions(TransactionsRequest request) {
+ default TransactionPageV2 getTransactions(TransactionsRequest request) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ default TransactionPageV2 getTransactionsInBlock(long blockHeight) {
throw new UnsupportedOperationException();
}
@@ -231,6 +240,39 @@ default List freeze(TokenFreeze freeze, Wallet wallet, Tran
default List unfreeze(TokenUnfreeze unfreeze, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
throw new UnsupportedOperationException();
}
+ List createValidator(CreateBeaconChainValidator createBeaconChainValidator, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
+
+ List editValidator(EditBeaconChainValidator editBeaconChainValidator, Wallet wallet, TransactionOption option, boolean sync) throws IOException, NoSuchAlgorithmException ;
+
+ List delegate(BeaconChainDelegate beaconChainDelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
+
+ List redelegate(BeaconChainRedelegate beaconChainRedelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
+
+ List undelegate(BeaconChainUndelegate beaconChainUndelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
+
+ Validator getValidator(String validatorAddress) throws IOException;
+
+ List getTopValidators(int top) throws IOException ;
+
+ Delegation getDelegation(String delegatorAddress, String validatorAddress) throws IOException;
+
+ List getDelegations(String delegatorAddress) throws IOException;
+
+ Redelegation getRedelegation(String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException;
+
+ List getRedelegations(String delegatorAddress) throws IOException;
+
+ UnBondingDelegation getUnBondingDelegation(String delegatorAddress, String validatorAddress) throws IOException;
+
+ List getUnBondingDelegations(String delegatorAddress) throws IOException;
+
+ List getUnBondingDelegationsByValidator(String validatorAddress) throws IOException ;
+
+ List getRedelegationsByValidator(String validatorAddress) throws IOException;
+
+ Pool getPool() throws IOException;
+
+ long getAllValidatorsCount(boolean jailInvolved) throws IOException;
List createSideChainValidator(CreateSideChainValidator createSideChainValidator, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
@@ -242,17 +284,17 @@ default List unfreeze(TokenUnfreeze unfreeze, Wallet wallet
List sideChainUnbond(SideChainUnBond sideChainUndelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException;
- SideChainValidator getSideChainValidator(String sideChainId, String validatorAddress) throws IOException;
+ Validator getSideChainValidator(String sideChainId, String validatorAddress) throws IOException;
- List getSideChainTopValidators(String sideChainId, int top) throws IOException ;
+ List getSideChainTopValidators(String sideChainId, int top) throws IOException ;
- SideChainDelegation getSideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException;
+ Delegation getSideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException;
- List getSideChainDelegations(String sideChainId, String delegatorAddress) throws IOException;
+ List getSideChainDelegations(String sideChainId, String delegatorAddress) throws IOException;
- SideChainRedelegation getSideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException;
+ Redelegation getSideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException;
- List getSideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException;
+ List getSideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException;
UnBondingDelegation getSideChainUnBondingDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException;
@@ -260,7 +302,7 @@ default List unfreeze(TokenUnfreeze unfreeze, Wallet wallet
List getSideChainUnBondingDelegationsByValidator(String sideChainId, String validatorAddress) throws IOException ;
- List getSideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException;
+ List getSideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException;
Pool getSideChainPool(String sideChainId) throws IOException;
diff --git a/src/main/java/com/binance/dex/api/client/BinanceDexApiRestClient.java b/src/main/java/com/binance/dex/api/client/BinanceDexApiRestClient.java
index 7fafa8f0..005309fa 100644
--- a/src/main/java/com/binance/dex/api/client/BinanceDexApiRestClient.java
+++ b/src/main/java/com/binance/dex/api/client/BinanceDexApiRestClient.java
@@ -56,9 +56,11 @@ public interface BinanceDexApiRestClient {
TradePage getTrades(TradesRequest request);
- TransactionPage getTransactions(String address);
+ TransactionPageV2 getTransactions(String address);
- TransactionPage getTransactions(TransactionsRequest request);
+ TransactionPageV2 getTransactions(TransactionsRequest request);
+
+ TransactionPageV2 getTransactionsInBlock(long blockHeight);
List getMiniTokens(Integer limit);
diff --git a/src/main/java/com/binance/dex/api/client/BinanceDexEnvironment.java b/src/main/java/com/binance/dex/api/client/BinanceDexEnvironment.java
index 3fb1e961..4b165ef1 100644
--- a/src/main/java/com/binance/dex/api/client/BinanceDexEnvironment.java
+++ b/src/main/java/com/binance/dex/api/client/BinanceDexEnvironment.java
@@ -6,6 +6,7 @@
public class BinanceDexEnvironment {
public static final BinanceDexEnvironment PROD = new BinanceDexEnvironment(
"https://dex.binance.org",
+ "https://api.binance.org/bc/",
"wss://dex.binance.org/api",
"https://dataseed1.ninicoin.io",
"wss://dataseed1.ninicoin.io/websocket",
@@ -14,6 +15,7 @@ public class BinanceDexEnvironment {
);
public static final BinanceDexEnvironment TEST_NET = new BinanceDexEnvironment(
"https://testnet-dex.binance.org",
+ "https://testnet-api.binance.org/bc/",
"wss://testnet-dex.binance.org/api",
"http://data-seed-pre-0-s3.binance.org",
"wss://data-seed-pre-0-s3.binance.org/websocket",
@@ -21,8 +23,20 @@ public class BinanceDexEnvironment {
"bva"
);
+ public static final BinanceDexEnvironment LOCAL_NET = new BinanceDexEnvironment(
+ "https://testnet-dex.binance.org",
+ "https://testnet-api.binance.org/bc/",
+ "wss://testnet-dex.binance.org/api",
+ "http://127.0.0.1:26657",
+ "wss://data-seed-pre-0-s3.binance.org/websocket",
+ "bnb",
+ "bva"
+ );
+
// Rest API base URL
private String baseUrl;
+ // Chain transaction API base URL
+ private String transactionUrl;
// Websocket data stream url
private String streamUrl;
// RPC API base URL
@@ -41,12 +55,27 @@ public BinanceDexEnvironment(String baseUrl, String streamUrl, String nodeUrl, S
this.wsBaseUrl = wsBaseUrl;
this.hrp = hrp;
this.valHrp = valHrp;
+ this.transactionUrl = inferTransactionUrl(baseUrl);
+ }
+
+ public BinanceDexEnvironment(String baseUrl, String transactionUrl, String streamUrl, String nodeUrl, String wsBaseUrl, String hrp, String valHrp) {
+ this.baseUrl = baseUrl;
+ this.transactionUrl = transactionUrl;
+ this.streamUrl = streamUrl;
+ this.nodeUrl = nodeUrl;
+ this.wsBaseUrl = wsBaseUrl;
+ this.hrp = hrp;
+ this.valHrp = valHrp;
}
public String getBaseUrl() {
return baseUrl;
}
+ public String getTransactionUrl() {
+ return transactionUrl;
+ }
+
public String getStreamUrl() {
return streamUrl;
}
@@ -63,6 +92,16 @@ public String getValHrp() {
return valHrp;
}
+ public static String inferTransactionUrl(String baseUrl) {
+ String transactionUrl = null;
+ if (baseUrl != null && baseUrl.equalsIgnoreCase(BinanceDexEnvironment.PROD.baseUrl)) {
+ transactionUrl = BinanceDexEnvironment.PROD.transactionUrl;
+ } else if (baseUrl != null && baseUrl.equalsIgnoreCase(BinanceDexEnvironment.TEST_NET.baseUrl)) {
+ transactionUrl = BinanceDexEnvironment.TEST_NET.transactionUrl;
+ }
+ return transactionUrl;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/src/main/java/com/binance/dex/api/client/BinanceTransactionApi.java b/src/main/java/com/binance/dex/api/client/BinanceTransactionApi.java
new file mode 100644
index 00000000..314d894d
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/BinanceTransactionApi.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client;
+
+import com.binance.dex.api.client.domain.TransactionPageV2;
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+import retrofit2.http.Query;
+
+public interface BinanceTransactionApi {
+ @GET("api/v1/txs")
+ Call getTransactions(@Query(value = "startTime") Long startTime,
+ @Query(value = "endTime") Long endTime,
+ @Query(value = "type") String type,
+ @Query(value = "asset") String asset,
+ @Query(value = "address") String address,
+ @Query(value = "addressType") String addressType,
+ @Query(value = "offset") Integer offset,
+ @Query(value = "limit") Integer limit);
+
+ @GET("api/v1/blocks/{blockHeight}/txs")
+ Call getTransactionsInBlock(@Path("blockHeight") long blockHeight);
+}
diff --git a/src/main/java/com/binance/dex/api/client/TransactionConverter.java b/src/main/java/com/binance/dex/api/client/TransactionConverter.java
index c4aa5330..9fe8f994 100644
--- a/src/main/java/com/binance/dex/api/client/TransactionConverter.java
+++ b/src/main/java/com/binance/dex/api/client/TransactionConverter.java
@@ -30,16 +30,18 @@
import com.binance.dex.api.client.domain.oracle.ClaimMsg;
import com.binance.dex.api.client.domain.slash.BscSubmitEvidence;
import com.binance.dex.api.client.domain.slash.SideChainUnJail;
+import com.binance.dex.api.client.domain.slash.UnJail;
import com.binance.dex.api.client.domain.stake.Commission;
import com.binance.dex.api.client.domain.stake.Description;
+import com.binance.dex.api.client.domain.stake.beaconchain.*;
import com.binance.dex.api.client.domain.stake.sidechain.*;
import com.binance.dex.api.client.encoding.ByteUtil;
import com.binance.dex.api.client.encoding.Crypto;
-import com.binance.dex.api.client.encoding.EncodeUtils;
import com.binance.dex.api.client.encoding.amino.Amino;
import com.binance.dex.api.client.encoding.message.InputOutput;
import com.binance.dex.api.client.encoding.message.MessageType;
import com.binance.dex.api.client.encoding.message.Token;
+import com.binance.dex.api.client.encoding.message.beaconchain.transaction.*;
import com.binance.dex.api.client.encoding.message.bridge.BindMsgMessage;
import com.binance.dex.api.client.encoding.message.bridge.ClaimMsgMessage;
import com.binance.dex.api.client.encoding.message.bridge.TransferOutMsgMessage;
@@ -234,6 +236,24 @@ public Transaction convert(byte[] bytes) {
return convertMiniTokenSetURI(bytes);
case MiniTokenList:
return convertMiniTokenList(bytes);
+ case CreateBeaconChainValidator:
+ return convertCreateBeaconChainValidator(bytes);
+ case EditBeaconChainValidator:
+ return convertEditBeaconChainValidator(bytes);
+ case BeaconChainDelegate:
+ return convertBeaconChainDelegate(bytes);
+ case BeaconChainRedelegate:
+ return convertBeaconChainRedelegate(bytes);
+ case BeaconChainUndelegate:
+ return convertBeaconChainUndelegate(bytes);
+ case UnJail:
+ return convertUnJail(bytes);
+ case CreateSideChainValidatorWithVoteAddr:
+ return convertCreateSideChainValidatorWithVoteAddr(bytes);
+ case EditSideChainValidatorWithVoteAddr:
+ return convertEditSideChainValidatorWithVoteAddr(bytes);
+ case SideChainStakeMigration:
+ return convertSideChainStakeMigration(bytes);
}
return null;
} catch (Exception e) {
@@ -241,6 +261,188 @@ public Transaction convert(byte[] bytes) {
}
}
+ private Transaction convertBeaconChainUndelegate(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ BeaconChainUndelegateMessage message = new BeaconChainUndelegateMessage();
+ amino.decodeBare(raw, message);
+
+ BeaconChainUndelegate unBond = new BeaconChainUndelegate();
+
+ if (message.getDelegatorAddress() != null && message.getDelegatorAddress().getRaw() != null) {
+ unBond.setDelegatorAddress(Crypto.encodeAddress(hrp, message.getDelegatorAddress().getRaw()));
+ }
+
+ if (message.getValidatorAddress() != null && message.getValidatorAddress().getRaw() != null) {
+ unBond.setValidatorAddress(Crypto.encodeAddress(valHrp, message.getValidatorAddress().getRaw()));
+ }
+
+ Token amount = new Token();
+ if (message.getAmount() != null) {
+ amount.setAmount(message.getAmount().getAmount());
+ amount.setDenom(message.getAmount().getDenom());
+ }
+ unBond.setAmount(amount);
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.BEACONCHAIN_UNDELEGATE);
+ transaction.setRealTx(unBond);
+
+ return transaction;
+ }
+
+ private Transaction convertBeaconChainRedelegate(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ BeaconChainRedelegateMessage message = new BeaconChainRedelegateMessage();
+ amino.decodeBare(raw, message);
+
+ BeaconChainRedelegate redelegate = new BeaconChainRedelegate();
+ if (message.getDelegatorAddress() != null && message.getDelegatorAddress().getRaw() != null) {
+ redelegate.setDelegatorAddress(Crypto.encodeAddress(hrp, message.getDelegatorAddress().getRaw()));
+ }
+
+ if (message.getSrcValidatorAddress() != null && message.getSrcValidatorAddress().getRaw() != null) {
+ redelegate.setSrcValidatorAddress(Crypto.encodeAddress(valHrp, message.getSrcValidatorAddress().getRaw()));
+ }
+
+ if (message.getDstValidatorAddress() != null && message.getDstValidatorAddress().getRaw() != null) {
+ redelegate.setDstValidatorAddress(Crypto.encodeAddress(valHrp, message.getDstValidatorAddress().getRaw()));
+ }
+
+ Token amount = new Token();
+ if (message.getAmount() != null) {
+ amount.setAmount(message.getAmount().getAmount());
+ amount.setDenom(message.getAmount().getDenom());
+ }
+ redelegate.setAmount(amount);
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.BEACONCHAIN_REDELEGATE);
+ transaction.setRealTx(redelegate);
+
+ return transaction;
+ }
+
+ private Transaction convertBeaconChainDelegate(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ BeaconChainDelegateMessage message = new BeaconChainDelegateMessage();
+ amino.decodeBare(raw, message);
+
+ BeaconChainDelegate beaconChainDelegate = new BeaconChainDelegate();
+ if (message.getDelegatorAddress() != null && message.getDelegatorAddress().getRaw() != null) {
+ beaconChainDelegate.setDelegatorAddress(Crypto.encodeAddress(hrp, message.getDelegatorAddress().getRaw()));
+ }
+
+ if (message.getValidatorAddress() != null && message.getValidatorAddress().getRaw() != null) {
+ beaconChainDelegate.setValidatorAddress(Crypto.encodeAddress(valHrp, message.getValidatorAddress().getRaw()));
+ }
+
+ Token token = new Token();
+ if (message.getDelegation() != null) {
+ token.setDenom(message.getDelegation().getDenom());
+ token.setAmount(message.getDelegation().getAmount());
+ }
+ beaconChainDelegate.setDelegation(token);
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.BEACONCHAIN_DELEGATE);
+ transaction.setRealTx(beaconChainDelegate);
+
+ return transaction;
+ }
+
+ private Transaction convertEditBeaconChainValidator(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ EditBeaconChainValidatorMessage message = new EditBeaconChainValidatorMessage();
+ amino.decodeBare(raw, message);
+
+ EditBeaconChainValidator editBeaconChainValidator = new EditBeaconChainValidator();
+
+ Description description = new Description();
+ if (message.getDescription() != null) {
+ description.setMoniker(message.getDescription().getMoniker());
+ description.setDetails(message.getDescription().getDetails());
+ description.setIdentity(message.getDescription().getIdentity());
+ description.setWebsite(message.getDescription().getWebsite());
+ }
+ editBeaconChainValidator.setDescription(description);
+
+ if (message.getValidatorOperatorAddress() != null && message.getValidatorOperatorAddress().getRaw() != null) {
+ editBeaconChainValidator.setValidatorAddress(Crypto.encodeAddress(valHrp, message.getValidatorOperatorAddress().getRaw()));
+ }
+
+ if (message.getCommissionRate() != null) {
+ editBeaconChainValidator.setCommissionRate(message.getCommissionRate().getValue());
+ }
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.EDIT_BEACONCHAIN_VALIDATOR);
+ transaction.setRealTx(editBeaconChainValidator);
+
+ return transaction;
+ }
+
+ private Transaction convertCreateBeaconChainValidator(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ CreateBeaconChainValidatorMessage message = new CreateBeaconChainValidatorMessage();
+ amino.decodeBare(raw, message);
+
+ CreateBeaconChainValidator createBeaconChainValidator = new CreateBeaconChainValidator();
+
+ Description description = new Description();
+ if (message.getDescription() != null) {
+ description.setMoniker(message.getDescription().getMoniker());
+ description.setDetails(message.getDescription().getDetails());
+ description.setIdentity(message.getDescription().getIdentity());
+ description.setWebsite(message.getDescription().getWebsite());
+ }
+ createBeaconChainValidator.setDescription(description);
+
+ Commission commission = new Commission();
+ if (message.getCommission() != null) {
+ try {
+ commission.setRate(message.getCommission().getRate().getValue());
+ commission.setMaxRate(message.getCommission().getMaxRate().getValue());
+ commission.setMaxChangeRate(message.getCommission().getMaxChangeRate().getValue());
+ } catch (NullPointerException e) {
+ //ignore
+ }
+ }
+ createBeaconChainValidator.setCommission(commission);
+
+ if (message.getDelegatorAddr() != null && message.getDelegatorAddr().getRaw() != null) {
+ createBeaconChainValidator.setDelegatorAddr(Crypto.encodeAddress(hrp, message.getDelegatorAddr().getRaw()));
+ }
+
+ if (message.getValidatorOperatorAddr() != null && message.getValidatorOperatorAddr().getRaw() != null) {
+ createBeaconChainValidator.setValidatorAddr(Crypto.encodeAddress(valHrp, message.getValidatorOperatorAddr().getRaw()));
+ }
+
+ Token delegation = new Token();
+ if (message.getDelegation() != null) {
+ delegation.setAmount(message.getDelegation().getAmount());
+ delegation.setDenom(message.getDelegation().getDenom());
+ }
+ createBeaconChainValidator.setDelegation(delegation);
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.CREATE_BEACONCHAIN_VALIDATOR);
+ transaction.setRealTx(createBeaconChainValidator);
+ return transaction;
+ }
+
+ private Transaction convertUnJail(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ UnJailMsg message = UnJailMsg.parseFrom(raw);
+
+ UnJail unJail = new UnJail();
+ unJail.setValidatorAddr(Crypto.encodeAddress(valHrp, message.getAddress().toByteArray()));
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.UNJAIL);
+ transaction.setRealTx(unJail);
+ return transaction;
+ }
+
private Transaction convertTransferTokenOwnership(byte[] value) throws IOException {
byte[] raw = ByteUtil.cut(value, 4);
TransferTokenOwnershipMsg msg = TransferTokenOwnershipMsg.parseFrom(raw);
@@ -1129,4 +1331,150 @@ private Transaction convertMiniTokenList(byte[] value) throws InvalidProtocolBuf
transaction.setRealTx(listing);
return transaction;
}
+
+ private Transaction convertCreateSideChainValidatorWithVoteAddr(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ CreateSideChainValidatorWithVoteAddrMessage message = new CreateSideChainValidatorWithVoteAddrMessage();
+ amino.decodeBare(raw, message);
+
+ CreateSideChainValidatorWithVoteAddr createSideChainValidator = new CreateSideChainValidatorWithVoteAddr();
+
+ Description description = new Description();
+ if (message.getDescription() != null) {
+ description.setMoniker(message.getDescription().getMoniker());
+ description.setDetails(message.getDescription().getDetails());
+ description.setIdentity(message.getDescription().getIdentity());
+ description.setWebsite(message.getDescription().getWebsite());
+ }
+ createSideChainValidator.setDescription(description);
+
+ Commission commission = new Commission();
+ if (message.getCommission() != null) {
+ try {
+ commission.setRate(message.getCommission().getRate().getValue());
+ commission.setMaxRate(message.getCommission().getMaxRate().getValue());
+ commission.setMaxChangeRate(message.getCommission().getMaxChangeRate().getValue());
+ } catch (NullPointerException e) {
+ //ignore
+ }
+ }
+ createSideChainValidator.setCommission(commission);
+
+ if (message.getDelegatorAddr() != null && message.getDelegatorAddr().getRaw() != null) {
+ createSideChainValidator.setDelegatorAddr(Crypto.encodeAddress(hrp, message.getDelegatorAddr().getRaw()));
+ }
+
+ if (message.getValidatorOperatorAddr() != null && message.getValidatorOperatorAddr().getRaw() != null) {
+ createSideChainValidator.setValidatorAddr(Crypto.encodeAddress(valHrp, message.getValidatorOperatorAddr().getRaw()));
+ }
+
+ Token delegation = new Token();
+ if (message.getDelegation() != null) {
+ delegation.setAmount(message.getDelegation().getAmount());
+ delegation.setDenom(message.getDelegation().getDenom());
+ }
+ createSideChainValidator.setDelegation(delegation);
+
+ createSideChainValidator.setSideChainId(message.getSideChainId());
+
+ if (message.getSideConsAddr() != null) {
+ createSideChainValidator.setSideConsAddr("0x" + Hex.toHexString(message.getSideConsAddr()));
+ }
+
+ if (message.getSideFeeAddr() != null) {
+ createSideChainValidator.setSideFeeAddr("0x" + Hex.toHexString(message.getSideFeeAddr()));
+ }
+
+ if (message.getSideVoteAddr() != null) {
+ createSideChainValidator.setSideVoteAddr("0x" + Hex.toHexString(message.getSideVoteAddr()));
+ }
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR);
+ transaction.setRealTx(createSideChainValidator);
+ return transaction;
+ }
+
+ private Transaction convertEditSideChainValidatorWithVoteAddr(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ EditSideChainValidatorWithVoteAddrMessage message = new EditSideChainValidatorWithVoteAddrMessage();
+ amino.decodeBare(raw, message);
+
+ EditSideChainValidatorWithVoteAddr editSideChainValidator = new EditSideChainValidatorWithVoteAddr();
+
+ Description description = new Description();
+ if (message.getDescription() != null) {
+ description.setMoniker(message.getDescription().getMoniker());
+ description.setDetails(message.getDescription().getDetails());
+ description.setIdentity(message.getDescription().getIdentity());
+ description.setWebsite(message.getDescription().getWebsite());
+ }
+ editSideChainValidator.setDescription(description);
+
+ if (message.getValidatorOperatorAddress() != null && message.getValidatorOperatorAddress().getRaw() != null) {
+ editSideChainValidator.setValidatorAddress(Crypto.encodeAddress(valHrp, message.getValidatorOperatorAddress().getRaw()));
+ }
+
+ if (message.getCommissionRate() != null) {
+ editSideChainValidator.setCommissionRate(message.getCommissionRate().getValue());
+ }
+
+ editSideChainValidator.setSideChainId(message.getSideChainId());
+
+ if (message.getSideFeeAddr() != null) {
+ editSideChainValidator.setSideFeeAddr("0x" + Hex.toHexString(message.getSideFeeAddr()));
+ }
+
+ if (message.getSideConsAddr() != null) {
+ editSideChainValidator.setSideConsAddr("0x" + Hex.toHexString(message.getSideConsAddr()));
+ }
+
+ if (message.getSideVoteAddr() != null) {
+ editSideChainValidator.setSideVoteAddr("0x" + Hex.toHexString(message.getSideVoteAddr()));
+ }
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR);
+ transaction.setRealTx(editSideChainValidator);
+
+ return transaction;
+ }
+
+ private Transaction convertSideChainStakeMigration(byte[] value) throws IOException {
+ byte[] raw = ByteUtil.cut(value, 4);
+ SideChainStakeMigrationMessage message = new SideChainStakeMigrationMessage();
+ amino.decodeBare(raw, message);
+
+ SideChainStakeMigration stakeMigration = new SideChainStakeMigration();
+
+ if (message.getValidatorSrcAddr() != null && message.getValidatorSrcAddr().getRaw() != null) {
+ stakeMigration.setValidatorSrcAddr(Crypto.encodeAddress(valHrp, message.getValidatorSrcAddr().getRaw()));
+ }
+
+ if (message.getValidatorDstAddr() != null) {
+ stakeMigration.setValidatorDstAddr("0x" + Hex.toHexString(message.getValidatorDstAddr()));
+ }
+
+ if (message.getDelegatorAddr() != null) {
+ stakeMigration.setDelegatorAddr("0x" + Hex.toHexString(message.getDelegatorAddr()));
+ }
+
+ if (message.getRefundAddr() != null && message.getRefundAddr().getRaw() != null) {
+ stakeMigration.setRefundAddr(Crypto.encodeAddress(hrp, message.getRefundAddr().getRaw()));
+ }
+
+ Token amount = new Token();
+ if (message.getAmount() != null) {
+ amount.setAmount(message.getAmount().getAmount());
+ amount.setDenom(message.getAmount().getDenom());
+ }
+ stakeMigration.setAmount(amount);
+
+
+ Transaction transaction = new Transaction();
+ transaction.setTxType(TxType.SIDECHAIN_STAKE_MIGRATION);
+ transaction.setRealTx(stakeMigration);
+
+ return transaction;
+ }
}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/ContentEnum.java b/src/main/java/com/binance/dex/api/client/crosschain/ContentEnum.java
index 9239d1c0..5aa1951d 100644
--- a/src/main/java/com/binance/dex/api/client/crosschain/ContentEnum.java
+++ b/src/main/java/com/binance/dex/api/client/crosschain/ContentEnum.java
@@ -18,11 +18,17 @@ public enum ContentEnum {
StakingCommonAckPack(8, 1, CommonAck.class),
IbcValidatorSetPack(8, 2, IbcValidatorSet.class),
GovCommonAckPack(9, 1, CommonAck.class),
- SideDowntimeSlashPack(11, 0, com.binance.dex.api.client.crosschain.content.SideDowntimeSlash.class),
+ SideDowntimeSlashPack(11, 0, SideDowntimeSlash.class),
MirrorSynPack(4, 0, MirrorSyn.class),
MirrorSynAckPack(4, 1, MirrorAck.class),
MirrorSyncSynPack(5, 0, MirrorSyncSyn.class),
- MirrorSyncAckPack(5, 1, MirrorSyncAck.class)
+ MirrorSyncAckPack(5, 1, MirrorSyncAck.class),
+ CrossStakeSynPack(16, 0, CrossStakeSyn.class),
+ CrossStakeRefundPack(16, 1, CrossStakeRefund.class),
+ CrossStakeFailAckPack(16, 2, CrossStakeFailAck.class),
+ StakeMigrationSynPack(17, 0, StakeMigrationRefund.class),
+ StakeMigrationAckPack(17, 1, StakeMigrationRefund.class),
+ StakeMigrationFailAckPack(17, 2, StakeMigrationRefund.class),
;
private Integer channelId;
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/Payload.java b/src/main/java/com/binance/dex/api/client/crosschain/Payload.java
index 97f026ca..7e81ab85 100644
--- a/src/main/java/com/binance/dex/api/client/crosschain/Payload.java
+++ b/src/main/java/com/binance/dex/api/client/crosschain/Payload.java
@@ -35,10 +35,16 @@ public void decode(byte[] raw, Object superInstance) throws Exception {
}
Class extends Content> clazz = ContentEnum.getClass(channelId, this.getPackageType());
+ Content instance;
if (clazz == null) {
throw new RuntimeException(String.format("unknown content of channel id = %s, package type = %s", channelId, this.getPackageType()));
}
- Content instance = Decoder.decodeObject(ByteUtil.cut(raw, 33), clazz);
+ if (channelId == 16) {
+ instance = clazz.newInstance();
+ instance = (Content) Decoder.decodeBytes(ByteUtil.cut(raw, 33), clazz, instance);
+ } else {
+ instance = Decoder.decodeObject(ByteUtil.cut(raw, 33), clazz);
+ }
this.setContent(instance);
}
}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAck.java b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAck.java
new file mode 100644
index 00000000..78e85381
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAck.java
@@ -0,0 +1,45 @@
+package com.binance.dex.api.client.crosschain.content;
+
+import com.binance.dex.api.client.crosschain.Content;
+import com.binance.dex.api.client.crosschain.content.crossStakeFailAckParamsBytes.*;
+import com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes.DelegateSynParamsBytes;
+import com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes.RedelegateSynParamsBytes;
+import com.binance.dex.api.client.rlp.RlpDecodable;
+import com.binance.dex.api.client.rlp.Decoder;
+import com.binance.dex.api.client.encoding.ByteUtil;
+
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class CrossStakeFailAck extends Content implements RlpDecodable {
+
+ private CrossStakeFailAckParamsBytes paramsBytes;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.paramsBytes.setHrp(hrp);
+ }
+
+ @Override
+ public void decode(byte[] raw, Object superInstance) throws Exception {
+ if (raw.length < 16) {
+ throw new RuntimeException("Failed to code: too less length for cross stake syn package");
+ }
+
+ Class extends CrossStakeFailAckParamsBytes> clazz;
+ CrossStakeFailAckParamsBytes instance;
+ if ((int) ByteUtil.pick(raw, 1, 1)[0] == 4) {
+ clazz = RewardFailAckParamsBytes.class;
+ instance = Decoder.decodeObject(raw, clazz);
+ } else if ((int) ByteUtil.pick(raw, 1, 1)[0] == 5) {
+ clazz = UndelegatedFailAckParamsBytes.class;
+ instance = Decoder.decodeObject(raw, clazz);
+ } else {
+ throw new RuntimeException("unknown event type of cross stake fail syn package");
+ }
+ this.setParamsBytes(instance);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAckParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAckParamsBytes.java
new file mode 100644
index 00000000..96ff4f1c
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeFailAckParamsBytes.java
@@ -0,0 +1,7 @@
+package com.binance.dex.api.client.crosschain.content;
+
+public abstract class CrossStakeFailAckParamsBytes {
+
+ protected abstract void setHrp(String hrp);
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeRefund.java b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeRefund.java
new file mode 100644
index 00000000..5e683d4a
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeRefund.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.crosschain.content;
+
+import com.binance.dex.api.client.crosschain.Content;
+import com.binance.dex.api.client.crosschain.UnsignedInt;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class CrossStakeRefund extends Content {
+
+ private UnsignedInt eventType;
+ private UnsignedNumber amount;
+ private EthAddressValue recipient;
+ private UnsignedInt errorCode;
+
+ @Override
+ protected void setHrp(String hrp) {
+
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSyn.java b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSyn.java
new file mode 100644
index 00000000..054c4778
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSyn.java
@@ -0,0 +1,53 @@
+package com.binance.dex.api.client.crosschain.content;
+
+import com.binance.dex.api.client.crosschain.Content;
+import com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes.*;
+import com.binance.dex.api.client.encoding.ByteUtil;
+import com.binance.dex.api.client.rlp.Decoder;
+import com.binance.dex.api.client.rlp.RlpDecodable;
+
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class CrossStakeSyn extends Content implements RlpDecodable {
+
+ private Integer eventType;
+ private CrossStakeSynParamsBytes paramsBytes;
+
+ public CrossStakeSyn(){}
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.paramsBytes.setHrp(hrp);
+ }
+
+ @Override
+ public void decode(byte[] raw, Object superInstance) throws Exception {
+ if (raw.length < 27) {
+ throw new RuntimeException("Failed to code: too less length for cross stake syn package");
+ }
+
+ Class extends CrossStakeSynParamsBytes> clazz;
+ CrossStakeSynParamsBytes instance;
+ if ((int) ByteUtil.pick(raw, 1, 1)[0] == 1) {
+ this.setEventType((int) ByteUtil.pick(raw, 1, 1)[0]);
+ clazz = DelegateSynParamsBytes.class;
+ instance = Decoder.decodeObject(ByteUtil.cut(raw, 3), clazz);
+ } else if ((int) ByteUtil.pick(raw, 1, 1)[0] == 2) {
+ this.setEventType((int) ByteUtil.pick(raw, 1, 1)[0]);
+ clazz = UndelegateSynParamsBytes.class;
+ instance = Decoder.decodeObject(ByteUtil.cut(raw, 3), clazz);
+ } else if ((int) ByteUtil.pick(raw, 2, 1)[0] == 3) {
+ this.setEventType((int) ByteUtil.pick(raw, 2, 1)[0]);
+ clazz = RedelegateSynParamsBytes.class;
+ instance = Decoder.decodeObject(ByteUtil.cut(raw, 5), clazz);
+ } else {
+ throw new RuntimeException(String.format("unknown event type of cross stake syn package, package type = %s",
+ this.getEventType()));
+ }
+ this.setParamsBytes(instance);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSynParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSynParamsBytes.java
new file mode 100644
index 00000000..1c1594dc
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/CrossStakeSynParamsBytes.java
@@ -0,0 +1,6 @@
+package com.binance.dex.api.client.crosschain.content;
+
+public abstract class CrossStakeSynParamsBytes {
+
+ protected abstract void setHrp(String hrp);
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/StakeMigrationRefund.java b/src/main/java/com/binance/dex/api/client/crosschain/content/StakeMigrationRefund.java
new file mode 100644
index 00000000..6bb2a912
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/StakeMigrationRefund.java
@@ -0,0 +1,23 @@
+package com.binance.dex.api.client.crosschain.content;
+
+import com.binance.dex.api.client.crosschain.*;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class StakeMigrationRefund extends Content {
+
+ private EthAddressValue operatorAddress;
+ private EthAddressValue delegatorAddress;
+ private Bech32AddressValue refundAddress;
+ private UnsignedNumber amount;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.refundAddress.setHrp(hrp);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/RewardFailAckParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/RewardFailAckParamsBytes.java
new file mode 100644
index 00000000..ffd821f6
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/RewardFailAckParamsBytes.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.crosschain.content.crossStakeFailAckParamsBytes;
+
+import com.binance.dex.api.client.crosschain.content.CrossStakeFailAckParamsBytes;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class RewardFailAckParamsBytes extends CrossStakeFailAckParamsBytes {
+
+ private Integer eventType;
+ private UnsignedNumber amount;
+ private EthAddressValue recipient;
+
+ @Override
+ protected void setHrp(String hrp) {
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/UndelegatedFailAckParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/UndelegatedFailAckParamsBytes.java
new file mode 100644
index 00000000..8657a64e
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeFailAckParamsBytes/UndelegatedFailAckParamsBytes.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.crosschain.content.crossStakeFailAckParamsBytes;
+
+import com.binance.dex.api.client.crosschain.content.CrossStakeFailAckParamsBytes;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class UndelegatedFailAckParamsBytes extends CrossStakeFailAckParamsBytes {
+
+ private Integer eventType;
+ private UnsignedNumber amount;
+ private EthAddressValue recipient;
+ private Bech32AddressValue validator;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.validator.setHrp(hrp);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/DelegateSynParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/DelegateSynParamsBytes.java
new file mode 100644
index 00000000..6d3955ca
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/DelegateSynParamsBytes.java
@@ -0,0 +1,33 @@
+package com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes;
+
+import com.binance.dex.api.client.crosschain.content.CrossStakeSynParamsBytes;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.rlp.Decoder;
+import com.binance.dex.api.client.rlp.RlpDecodable;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class DelegateSynParamsBytes extends CrossStakeSynParamsBytes implements RlpDecodable {
+
+ private EthAddressValue delAddr;
+ private Bech32AddressValue validator;
+ private UnsignedNumber amount;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.validator.setHrp(hrp);
+ }
+
+ @Override
+ public void decode(byte[] raw, Object superInstance) throws Exception {
+ DelegateSynParamsBytes vs = Decoder.decodeObject(raw, DelegateSynParamsBytes.class);
+ this.delAddr = vs.delAddr;
+ this.validator = vs.validator;
+ this.amount = vs.amount;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/RedelegateSynParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/RedelegateSynParamsBytes.java
new file mode 100644
index 00000000..d7ebb9b6
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/RedelegateSynParamsBytes.java
@@ -0,0 +1,36 @@
+package com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes;
+
+import com.binance.dex.api.client.crosschain.content.CrossStakeSynParamsBytes;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.rlp.Decoder;
+import com.binance.dex.api.client.rlp.RlpDecodable;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class RedelegateSynParamsBytes extends CrossStakeSynParamsBytes implements RlpDecodable {
+
+ private EthAddressValue delAddr;
+ private Bech32AddressValue valSrc;
+ private Bech32AddressValue valDst;
+ private UnsignedNumber amount;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.valSrc.setHrp(hrp);
+ this.valDst.setHrp(hrp);
+ }
+
+ @Override
+ public void decode(byte[] raw, Object superInstance) throws Exception {
+ RedelegateSynParamsBytes vs = Decoder.decodeObject(raw, RedelegateSynParamsBytes.class);
+ this.delAddr = vs.delAddr;
+ this.valSrc = vs.valSrc;
+ this.valDst = vs.valDst;
+ this.amount = vs.amount;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/UndelegateSynParamsBytes.java b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/UndelegateSynParamsBytes.java
new file mode 100644
index 00000000..bfb84021
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/crosschain/content/crossStakeSynParamsBytes/UndelegateSynParamsBytes.java
@@ -0,0 +1,33 @@
+package com.binance.dex.api.client.crosschain.content.crossStakeSynParamsBytes;
+
+import com.binance.dex.api.client.crosschain.content.CrossStakeSynParamsBytes;
+import com.binance.dex.api.client.encoding.message.common.EthAddressValue;
+import com.binance.dex.api.client.crosschain.UnsignedNumber;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.rlp.Decoder;
+import com.binance.dex.api.client.rlp.RlpDecodable;
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class UndelegateSynParamsBytes extends CrossStakeSynParamsBytes implements RlpDecodable {
+
+ private EthAddressValue delAddr;
+ private Bech32AddressValue validator;
+ private UnsignedNumber amount;
+
+ @Override
+ protected void setHrp(String hrp) {
+ this.validator.setHrp(hrp);
+ }
+
+ @Override
+ public void decode(byte[] raw, Object superInstance) throws Exception {
+ UndelegateSynParamsBytes vs = Decoder.decodeObject(raw, UndelegateSynParamsBytes.class);
+ this.delAddr = vs.delAddr;
+ this.validator = vs.validator;
+ this.amount = vs.amount;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/TransactionPageV2.java b/src/main/java/com/binance/dex/api/client/domain/TransactionPageV2.java
new file mode 100644
index 00000000..07640d1f
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/TransactionPageV2.java
@@ -0,0 +1,37 @@
+package com.binance.dex.api.client.domain;
+
+import com.binance.dex.api.client.BinanceDexConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.List;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TransactionPageV2 {
+ private Long total;
+ private List txs;
+
+ public Long getTotal() {
+ return total;
+ }
+
+ public void setTotal(Long total) {
+ this.total = total;
+ }
+
+ public List getTxs() {
+ return txs;
+ }
+
+ public void setTxs(List txs) {
+ this.txs = txs;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceDexConstants.BINANCE_DEX_TO_STRING_STYLE)
+ .append("total", total)
+ .append("txs", txs)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/TransactionV2.java b/src/main/java/com/binance/dex/api/client/domain/TransactionV2.java
new file mode 100644
index 00000000..f47c764b
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/TransactionV2.java
@@ -0,0 +1,166 @@
+package com.binance.dex.api.client.domain;
+
+import com.binance.dex.api.client.BinanceDexConstants;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class TransactionV2 {
+ private String hash;
+ private long blockHeight;
+ private long blockTime;
+ private String type;
+ private Long fee;
+ private int code;
+ private long source;
+ private long sequence;
+ private String memo;
+ private String log;
+ private String data;
+
+ private String asset;
+ private Long amount;
+
+ private String fromAddr;
+ private String toAddr;
+
+ public String getHash() {
+ return hash;
+ }
+
+ public void setHash(String hash) {
+ this.hash = hash;
+ }
+
+ public long getBlockHeight() {
+ return blockHeight;
+ }
+
+ public void setBlockHeight(long blockHeight) {
+ this.blockHeight = blockHeight;
+ }
+
+ public long getBlockTime() {
+ return blockTime;
+ }
+
+ public void setBlockTime(long blockTime) {
+ this.blockTime = blockTime;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Long getFee() {
+ return fee;
+ }
+
+ public void setFee(Long fee) {
+ this.fee = fee;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public long getSource() {
+ return source;
+ }
+
+ public void setSource(long source) {
+ this.source = source;
+ }
+
+ public long getSequence() {
+ return sequence;
+ }
+
+ public void setSequence(long sequence) {
+ this.sequence = sequence;
+ }
+
+ public String getMemo() {
+ return memo;
+ }
+
+ public void setMemo(String memo) {
+ this.memo = memo;
+ }
+
+ public String getLog() {
+ return log;
+ }
+
+ public void setLog(String log) {
+ this.log = log;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getAsset() {
+ return asset;
+ }
+
+ public void setAsset(String asset) {
+ this.asset = asset;
+ }
+
+ public Long getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Long amount) {
+ this.amount = amount;
+ }
+
+ public String getFromAddr() {
+ return fromAddr;
+ }
+
+ public void setFromAddr(String fromAddr) {
+ this.fromAddr = fromAddr;
+ }
+
+ public String getToAddr() {
+ return toAddr;
+ }
+
+ public void setToAddr(String toAddr) {
+ this.toAddr = toAddr;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceDexConstants.BINANCE_DEX_TO_STRING_STYLE)
+ .append("blockHeight", blockHeight)
+ .append("code", code)
+ .append("data", data)
+ .append("fromAddr", fromAddr)
+ .append("blockTime", blockTime)
+ .append("toAddr", toAddr)
+ .append("asset", asset)
+ .append("fee", fee)
+ .append("hash", hash)
+ .append("type", type)
+ .append("amount", amount)
+ .append("memo", memo)
+ .append("sequence", sequence)
+ .append("log", log)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/broadcast/TxType.java b/src/main/java/com/binance/dex/api/client/domain/broadcast/TxType.java
index d63a67ca..7fcbac9a 100644
--- a/src/main/java/com/binance/dex/api/client/domain/broadcast/TxType.java
+++ b/src/main/java/com/binance/dex/api/client/domain/broadcast/TxType.java
@@ -41,5 +41,14 @@ public enum TxType {
TINY_TOKEN_ISSUE,
MINI_TOKEN_ISSUE,
MINI_TOKEN_SET_URI,
- MINI_TOKEN_LIST
+ MINI_TOKEN_LIST,
+ CREATE_BEACONCHAIN_VALIDATOR,
+ EDIT_BEACONCHAIN_VALIDATOR,
+ BEACONCHAIN_DELEGATE,
+ BEACONCHAIN_REDELEGATE,
+ BEACONCHAIN_UNDELEGATE,
+ UNJAIL,
+ CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR,
+ EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR,
+ SIDECHAIN_STAKE_MIGRATION,
}
diff --git a/src/main/java/com/binance/dex/api/client/domain/request/TransactionsRequest.java b/src/main/java/com/binance/dex/api/client/domain/request/TransactionsRequest.java
index d203c28e..6f0630ee 100644
--- a/src/main/java/com/binance/dex/api/client/domain/request/TransactionsRequest.java
+++ b/src/main/java/com/binance/dex/api/client/domain/request/TransactionsRequest.java
@@ -6,30 +6,21 @@
import org.apache.commons.lang3.builder.ToStringBuilder;
public class TransactionsRequest {
- private String address;
- private Long blockHeight;
+ private Long startTime;
private Long endTime;
- private Integer limit;
+ private String type;
+ private String asset;
+ private String address;
+ private String addressType;
private Integer offset;
- private OrderSide side;
- private Long startTime;
- private String txAsset;
- private TransactionType txType;
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
+ private Integer limit;
- public Long getBlockHeight() {
- return blockHeight;
+ public Long getStartTime() {
+ return startTime;
}
- public void setBlockHeight(Long blockHeight) {
- this.blockHeight = blockHeight;
+ public void setStartTime(Long startTime) {
+ this.startTime = startTime;
}
public Long getEndTime() {
@@ -40,66 +31,65 @@ public void setEndTime(Long endTime) {
this.endTime = endTime;
}
- public Integer getLimit() {
- return limit;
+ public String getType() {
+ return type;
}
- public void setLimit(Integer limit) {
- this.limit = limit;
+ public void setType(String type) {
+ this.type = type;
}
- public Integer getOffset() {
- return offset;
+ public String getAsset() {
+ return asset;
}
- public void setOffset(Integer offset) {
- this.offset = offset;
+ public void setAsset(String asset) {
+ this.asset = asset;
}
- public OrderSide getSide() {
- return side;
+ public String getAddress() {
+ return address;
}
- public void setSide(OrderSide side) {
- this.side = side;
+ public void setAddress(String address) {
+ this.address = address;
}
- public Long getStartTime() {
- return startTime;
+ public String getAddressType() {
+ return addressType;
}
- public void setStartTime(Long startTime) {
- this.startTime = startTime;
+ public void setAddressType(String addressType) {
+ this.addressType = addressType;
}
- public String getTxAsset() {
- return txAsset;
+ public Integer getOffset() {
+ return offset;
}
- public void setTxAsset(String txAsset) {
- this.txAsset = txAsset;
+ public void setOffset(Integer offset) {
+ this.offset = offset;
}
- public TransactionType getTxType() {
- return txType;
+ public Integer getLimit() {
+ return limit;
}
- public void setTxType(TransactionType txType) {
- this.txType = txType;
+ public void setLimit(Integer limit) {
+ this.limit = limit;
}
@Override
public String toString() {
return new ToStringBuilder(this, BinanceDexConstants.BINANCE_DEX_TO_STRING_STYLE)
- .append("address", address)
- .append("blockHeight", blockHeight)
+ .append("startTime", startTime)
.append("endTime", endTime)
+ .append("type", type)
+ .append("asset", asset)
+ .append("address", address)
+ .append("addressType", addressType)
.append("limit", limit)
.append("offset", offset)
- .append("side", side)
- .append("startTime", startTime)
- .append("txAsset", txAsset)
- .append("txType", txType)
.toString();
}
}
diff --git a/src/main/java/com/binance/dex/api/client/domain/slash/UnJail.java b/src/main/java/com/binance/dex/api/client/domain/slash/UnJail.java
new file mode 100644
index 00000000..0e75671f
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/slash/UnJail.java
@@ -0,0 +1,10 @@
+package com.binance.dex.api.client.domain.slash;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UnJail {
+ private String validatorAddr;
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainDelegation.java b/src/main/java/com/binance/dex/api/client/domain/stake/Delegation.java
similarity index 56%
rename from src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainDelegation.java
rename to src/main/java/com/binance/dex/api/client/domain/stake/Delegation.java
index 9a074366..1d0626f1 100644
--- a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainDelegation.java
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/Delegation.java
@@ -1,29 +1,29 @@
-package com.binance.dex.api.client.domain.stake.sidechain;
+package com.binance.dex.api.client.domain.stake;
import com.binance.dex.api.client.encoding.message.Token;
/**
* @author Fitz.Lu
**/
-public class SideChainDelegation {
+public class Delegation {
- private Delegation delegation;
+ private DelegationItem delegation;
private Token balance;
- public SideChainDelegation() {
+ public Delegation() {
}
- public SideChainDelegation(Delegation delegation, Token balance) {
+ public Delegation(DelegationItem delegation, Token balance) {
this.delegation = delegation;
this.balance = balance;
}
- public Delegation getDelegation() {
+ public DelegationItem getDelegation() {
return delegation;
}
- public void setDelegation(Delegation delegation) {
+ public void setDelegation(DelegationItem delegation) {
this.delegation = delegation;
}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/Delegation.java b/src/main/java/com/binance/dex/api/client/domain/stake/DelegationItem.java
similarity index 86%
rename from src/main/java/com/binance/dex/api/client/domain/stake/sidechain/Delegation.java
rename to src/main/java/com/binance/dex/api/client/domain/stake/DelegationItem.java
index 94b3ef50..437105d9 100644
--- a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/Delegation.java
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/DelegationItem.java
@@ -1,9 +1,9 @@
-package com.binance.dex.api.client.domain.stake.sidechain;
+package com.binance.dex.api.client.domain.stake;
/**
* @author Fitz.Lu
**/
-public class Delegation {
+public class DelegationItem {
private String delegatorAddress;
@@ -11,7 +11,7 @@ public class Delegation {
private long shares;
- public Delegation() {
+ public DelegationItem() {
}
public String getDelegatorAddress() {
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainRedelegation.java b/src/main/java/com/binance/dex/api/client/domain/stake/Redelegation.java
similarity index 80%
rename from src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainRedelegation.java
rename to src/main/java/com/binance/dex/api/client/domain/stake/Redelegation.java
index 94bd09ef..4c6d84d7 100644
--- a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainRedelegation.java
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/Redelegation.java
@@ -1,4 +1,4 @@
-package com.binance.dex.api.client.domain.stake.sidechain;
+package com.binance.dex.api.client.domain.stake;
import com.binance.dex.api.client.encoding.message.Token;
@@ -6,7 +6,7 @@
/**
* @author Fitz.Lu
**/
-public class SideChainRedelegation {
+public class Redelegation {
//delegator address
private String delegatorAddress;
@@ -37,7 +37,20 @@ public class SideChainRedelegation {
//amount of destination shares redelegating
private long dstShare;
- public SideChainRedelegation() {
+ public Redelegation(String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress, long createHeight, String minTime, long minTimeInMs, Token initialBalance, Token balance, long srcShares, long dstShare) {
+ this.delegatorAddress = delegatorAddress;
+ this.srcValidatorAddress = srcValidatorAddress;
+ this.dstValidatorAddress = dstValidatorAddress;
+ this.createHeight = createHeight;
+ this.minTime = minTime;
+ this.minTimeInMs = minTimeInMs;
+ this.initialBalance = initialBalance;
+ this.balance = balance;
+ this.srcShares = srcShares;
+ this.dstShare = dstShare;
+ }
+
+ public Redelegation() {
}
public String getDelegatorAddress() {
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/UnBondingDelegation.java b/src/main/java/com/binance/dex/api/client/domain/stake/UnBondingDelegation.java
similarity index 78%
rename from src/main/java/com/binance/dex/api/client/domain/stake/sidechain/UnBondingDelegation.java
rename to src/main/java/com/binance/dex/api/client/domain/stake/UnBondingDelegation.java
index b7ba0f8f..8c96e989 100644
--- a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/UnBondingDelegation.java
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/UnBondingDelegation.java
@@ -1,4 +1,4 @@
-package com.binance.dex.api.client.domain.stake.sidechain;
+package com.binance.dex.api.client.domain.stake;
import com.binance.dex.api.client.encoding.message.Token;
@@ -21,6 +21,19 @@ public class UnBondingDelegation {
private Token balance;
+ public UnBondingDelegation() {
+ }
+
+ public UnBondingDelegation(String delegatorAddress, String validatorAddress, long createHeight, long minTimeInMs, String minTime, Token initialBalance, Token balance) {
+ this.delegatorAddress = delegatorAddress;
+ this.validatorAddress = validatorAddress;
+ this.createHeight = createHeight;
+ this.minTimeInMs = minTimeInMs;
+ this.minTime = minTime;
+ this.initialBalance = initialBalance;
+ this.balance = balance;
+ }
+
public String getDelegatorAddress() {
return delegatorAddress;
}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainValidator.java b/src/main/java/com/binance/dex/api/client/domain/stake/Validator.java
similarity index 88%
rename from src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainValidator.java
rename to src/main/java/com/binance/dex/api/client/domain/stake/Validator.java
index c691268f..8a33e370 100644
--- a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainValidator.java
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/Validator.java
@@ -1,14 +1,14 @@
-package com.binance.dex.api.client.domain.stake.sidechain;
+package com.binance.dex.api.client.domain.stake;
import com.binance.dex.api.client.domain.stake.Commission;
import com.binance.dex.api.client.domain.stake.Description;
-import java.util.Arrays;
+import java.util.ArrayList;
/**
* @author Fitz.Lu
**/
-public class SideChainValidator {
+public class Validator {
private String feeAddr;
@@ -44,7 +44,27 @@ public class SideChainValidator {
private String sideFeeAddr;
- public SideChainValidator() {
+ public ArrayList getStakeSnapShots() {
+ return stakeSnapShots;
+ }
+
+ public void setStakeSnapShots(ArrayList stakeSnapShots) {
+ this.stakeSnapShots = stakeSnapShots;
+ }
+
+ public String getAccumulatedStake() {
+ return accumulatedStake;
+ }
+
+ public void setAccumulatedStake(String accumulatedStake) {
+ this.accumulatedStake = accumulatedStake;
+ }
+
+ private ArrayList stakeSnapShots;
+
+ private String accumulatedStake;
+
+ public Validator() {
}
public String getFeeAddr() {
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainDelegate.java b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainDelegate.java
new file mode 100644
index 00000000..9795bd93
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainDelegate.java
@@ -0,0 +1,59 @@
+package com.binance.dex.api.client.domain.stake.beaconchain;
+
+import com.binance.dex.api.client.encoding.message.Token;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainDelegate {
+
+ private String delegatorAddress;
+
+ private String validatorAddress;
+
+ private Token delegation;
+
+
+ public BeaconChainDelegate() {
+ }
+
+ public BeaconChainDelegate(String delegatorAddress, String validatorAddress, Token delegation, String sideChainId) {
+ this.delegatorAddress = delegatorAddress;
+ this.validatorAddress = validatorAddress;
+ this.delegation = delegation;
+ }
+
+ public String getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(String delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public String getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(String validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public Token getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(Token delegation) {
+ this.delegation = delegation;
+ }
+
+
+ @Override
+ public String toString() {
+ return "SideChainDelegate{" +
+ "delegatorAddress='" + delegatorAddress + '\'' +
+ ", validatorAddress='" + validatorAddress + '\'' +
+ ", delegation=" + delegation +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainRedelegate.java b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainRedelegate.java
new file mode 100644
index 00000000..79bf8d3c
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainRedelegate.java
@@ -0,0 +1,63 @@
+package com.binance.dex.api.client.domain.stake.beaconchain;
+
+import com.binance.dex.api.client.encoding.message.Token;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainRedelegate {
+
+ private String delegatorAddress;
+
+ private String srcValidatorAddress;
+
+ private String dstValidatorAddress;
+
+ private Token amount;
+
+
+ public BeaconChainRedelegate() {
+ }
+
+ public String getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(String delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public String getSrcValidatorAddress() {
+ return srcValidatorAddress;
+ }
+
+ public void setSrcValidatorAddress(String srcValidatorAddress) {
+ this.srcValidatorAddress = srcValidatorAddress;
+ }
+
+ public String getDstValidatorAddress() {
+ return dstValidatorAddress;
+ }
+
+ public void setDstValidatorAddress(String dstValidatorAddress) {
+ this.dstValidatorAddress = dstValidatorAddress;
+ }
+
+ public Token getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Token amount) {
+ this.amount = amount;
+ }
+
+ @Override
+ public String toString() {
+ return "SideChainRedelegate{" +
+ "delegatorAddress='" + delegatorAddress + '\'' +
+ ", srcValidatorAddress='" + srcValidatorAddress + '\'' +
+ ", dstValidatorAddress='" + dstValidatorAddress + '\'' +
+ ", amount=" + amount +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainUndelegate.java b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainUndelegate.java
new file mode 100644
index 00000000..b63f94a6
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/BeaconChainUndelegate.java
@@ -0,0 +1,53 @@
+package com.binance.dex.api.client.domain.stake.beaconchain;
+
+import com.binance.dex.api.client.encoding.message.Token;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainUndelegate {
+
+ private String delegatorAddress;
+
+ private String validatorAddress;
+
+ private Token amount;
+
+
+ public BeaconChainUndelegate() {
+ }
+
+ public String getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(String delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public String getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(String validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public Token getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Token amount) {
+ this.amount = amount;
+ }
+
+
+ @Override
+ public String toString() {
+ return "SideChainUnBond{" +
+ "delegatorAddress='" + delegatorAddress + '\'' +
+ ", validatorAddress='" + validatorAddress + '\'' +
+ ", amount=" + amount +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/CreateBeaconChainValidator.java b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/CreateBeaconChainValidator.java
new file mode 100644
index 00000000..61bff169
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/CreateBeaconChainValidator.java
@@ -0,0 +1,86 @@
+package com.binance.dex.api.client.domain.stake.beaconchain;
+
+import com.binance.dex.api.client.domain.stake.Commission;
+import com.binance.dex.api.client.domain.stake.Description;
+import com.binance.dex.api.client.encoding.message.Token;
+
+/**
+ * @author Francis.Liu
+ **/
+public class CreateBeaconChainValidator {
+
+ private Description description;
+
+ private Commission commission;
+
+ private String delegatorAddr;
+
+ private String validatorAddr;
+
+ private Token delegation;
+
+ private String pubKey;
+
+
+ public CreateBeaconChainValidator() {
+ }
+
+ public Description getDescription() {
+ return description;
+ }
+
+ public void setDescription(Description description) {
+ this.description = description;
+ }
+
+ public Commission getCommission() {
+ return commission;
+ }
+
+ public void setCommission(Commission commission) {
+ this.commission = commission;
+ }
+
+ public String getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(String delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public Token getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(Token delegation) {
+ this.delegation = delegation;
+ }
+ public String getPubKey() {
+ return pubKey;
+ }
+
+ public void setPubKey(String pubKey) {
+ this.pubKey = pubKey;
+ }
+
+ public String getValidatorAddr() {
+ return validatorAddr;
+ }
+
+ public void setValidatorAddr(String validatorAddr) {
+ this.validatorAddr = validatorAddr;
+ }
+
+ @Override
+ public String toString() {
+ return "CreateSideChainValidator{" + '\n' +
+ "description=" + description + '\n' +
+ ", commission=" + commission + '\n' +
+ ", delegatorAddr='" + delegatorAddr + '\'' + '\n' +
+ ", validatorAddr='" + validatorAddr + '\'' + '\n' +
+ ", delegation=" + delegation + '\n' +
+ ", pubKey='" + pubKey + '\'' + '\n' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/EditBeaconChainValidator.java b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/EditBeaconChainValidator.java
new file mode 100644
index 00000000..dbb63b15
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/beaconchain/EditBeaconChainValidator.java
@@ -0,0 +1,64 @@
+package com.binance.dex.api.client.domain.stake.beaconchain;
+
+import com.binance.dex.api.client.domain.stake.Description;
+import com.binance.dex.api.client.encoding.amino.types.PubKeyEd25519;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * @author Francis.Liu
+ **/
+public class EditBeaconChainValidator {
+
+ private Description description;
+
+ private String validatorAddress;
+
+ private long commissionRate;
+
+ public String getPubKey() {
+ return pubKey;
+ }
+
+ public void setPubKey(String pubKey) {
+ this.pubKey = pubKey;
+ }
+
+ private String pubKey;
+
+ public EditBeaconChainValidator() {
+ }
+
+ public Description getDescription() {
+ return description;
+ }
+
+ public void setDescription(Description description) {
+ this.description = description;
+ }
+
+ public String getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(String validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public long getCommissionRate() {
+ return commissionRate;
+ }
+
+ public void setCommissionRate(long commissionRate) {
+ this.commissionRate = commissionRate;
+ }
+
+
+ @Override
+ public String toString() {
+ return "EditSideChainValidator{" +
+ "description=" + description + "\n" +
+ ", validatorAddress='" + validatorAddress + '\'' + "\n" +
+ ", commissionRate=" + commissionRate + "\n" +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/CreateSideChainValidatorWithVoteAddr.java b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/CreateSideChainValidatorWithVoteAddr.java
new file mode 100644
index 00000000..68979f22
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/CreateSideChainValidatorWithVoteAddr.java
@@ -0,0 +1,116 @@
+package com.binance.dex.api.client.domain.stake.sidechain;
+
+import com.binance.dex.api.client.domain.stake.Commission;
+import com.binance.dex.api.client.domain.stake.Description;
+import com.binance.dex.api.client.encoding.message.Token;
+
+public class CreateSideChainValidatorWithVoteAddr {
+
+ private Description description;
+
+ private Commission commission;
+
+ private String delegatorAddr;
+
+ private String validatorAddr;
+
+ private Token delegation;
+
+ private String sideChainId;
+
+ private String sideConsAddr;
+
+ private String sideFeeAddr;
+
+ private String sideVoteAddr;
+
+ public CreateSideChainValidatorWithVoteAddr() {
+ }
+
+ public Description getDescription() {
+ return description;
+ }
+
+ public void setDescription(Description description) {
+ this.description = description;
+ }
+
+ public Commission getCommission() {
+ return commission;
+ }
+
+ public void setCommission(Commission commission) {
+ this.commission = commission;
+ }
+
+ public String getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(String delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public Token getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(Token delegation) {
+ this.delegation = delegation;
+ }
+
+ public String getSideChainId() {
+ return sideChainId;
+ }
+
+ public void setSideChainId(String sideChainId) {
+ this.sideChainId = sideChainId;
+ }
+
+ public String getSideConsAddr() {
+ return sideConsAddr;
+ }
+
+ public void setSideConsAddr(String sideConsAddr) {
+ this.sideConsAddr = sideConsAddr;
+ }
+
+ public String getSideFeeAddr() {
+ return sideFeeAddr;
+ }
+
+ public void setSideFeeAddr(String sideFeeAddr) {
+ this.sideFeeAddr = sideFeeAddr;
+ }
+
+ public String getValidatorAddr() {
+ return validatorAddr;
+ }
+
+ public void setValidatorAddr(String validatorAddr) {
+ this.validatorAddr = validatorAddr;
+ }
+
+ public String getSideVoteAddr() {
+ return sideVoteAddr;
+ }
+
+ public void setSideVoteAddr(String sideVoteAddr) {
+ this.sideVoteAddr = sideVoteAddr;
+ }
+
+ @Override
+ public String toString() {
+ return "CreateSideChainValidator{" + '\n' +
+ "description=" + description + '\n' +
+ ", commission=" + commission + '\n' +
+ ", delegatorAddr='" + delegatorAddr + '\'' + '\n' +
+ ", validatorAddr='" + validatorAddr + '\'' + '\n' +
+ ", delegation=" + delegation + '\n' +
+ ", sideChainId='" + sideChainId + '\'' + '\n' +
+ ", sideConsAddr='" + sideConsAddr + '\'' + '\n' +
+ ", sideFeeAddr='" + sideFeeAddr + '\'' + '\n' +
+ ", sideVoteAddr='" + sideVoteAddr + '\'' + '\n' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/EditSideChainValidatorWithVoteAddr.java b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/EditSideChainValidatorWithVoteAddr.java
new file mode 100644
index 00000000..252a422b
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/EditSideChainValidatorWithVoteAddr.java
@@ -0,0 +1,92 @@
+package com.binance.dex.api.client.domain.stake.sidechain;
+
+import com.binance.dex.api.client.domain.stake.Description;
+
+public class EditSideChainValidatorWithVoteAddr {
+
+ private Description description;
+
+ private String validatorAddress;
+
+ private long commissionRate;
+
+ private String sideChainId;
+
+ private String sideFeeAddr;
+
+ private String sideConsAddr;
+
+ private String sideVoteAddr;
+
+ public EditSideChainValidatorWithVoteAddr() {
+ }
+
+ public Description getDescription() {
+ return description;
+ }
+
+ public void setDescription(Description description) {
+ this.description = description;
+ }
+
+ public String getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(String validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public long getCommissionRate() {
+ return commissionRate;
+ }
+
+ public void setCommissionRate(long commissionRate) {
+ this.commissionRate = commissionRate;
+ }
+
+ public String getSideChainId() {
+ return sideChainId;
+ }
+
+ public void setSideChainId(String sideChainId) {
+ this.sideChainId = sideChainId;
+ }
+
+ public String getSideFeeAddr() {
+ return sideFeeAddr;
+ }
+
+ public void setSideFeeAddr(String sideFeeAddr) {
+ this.sideFeeAddr = sideFeeAddr;
+ }
+
+ public String getSideConsAddr() {
+ return sideConsAddr;
+ }
+
+ public void setSideConsAddr(String sideConsAddr) {
+ this.sideConsAddr = sideConsAddr;
+ }
+
+ public String getSideVoteAddr() {
+ return sideVoteAddr;
+ }
+
+ public void setSideVoteAddr(String sideVoteAddr) {
+ this.sideVoteAddr = sideVoteAddr;
+ }
+
+ @Override
+ public String toString() {
+ return "EditSideChainValidatorWithVoteAddr{" +
+ "description=" + description + "\n" +
+ ", validatorAddress='" + validatorAddress + '\'' + "\n" +
+ ", commissionRate=" + commissionRate + "\n" +
+ ", sideChainId='" + sideChainId + '\'' + "\n" +
+ ", sideFeeAddr='" + sideFeeAddr + '\'' + "\n" +
+ ", sideConsAddr='" + sideConsAddr + '\'' + "\n" +
+ ", sideVoteAddr='" + sideVoteAddr + '\'' + "\n" +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainStakeMigration.java b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainStakeMigration.java
new file mode 100644
index 00000000..76eeb932
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/domain/stake/sidechain/SideChainStakeMigration.java
@@ -0,0 +1,70 @@
+package com.binance.dex.api.client.domain.stake.sidechain;
+
+import com.binance.dex.api.client.encoding.message.Token;
+
+public class SideChainStakeMigration {
+
+ private String validatorSrcAddr;
+
+ private String validatorDstAddr;
+
+ private String delegatorAddr;
+
+ private String refundAddr;
+
+ private Token amount;
+
+ public SideChainStakeMigration() {
+ }
+
+ public String getValidatorSrcAddr() {
+ return validatorSrcAddr;
+ }
+
+ public void setValidatorSrcAddr(String validatorSrcAddr) {
+ this.validatorSrcAddr = validatorSrcAddr;
+ }
+
+ public String getValidatorDstAddr() {
+ return validatorDstAddr;
+ }
+
+ public void setValidatorDstAddr(String validatorDstAddr) {
+ this.validatorDstAddr = validatorDstAddr;
+ }
+
+ public String getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(String delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public String getRefundAddr() {
+ return refundAddr;
+ }
+
+ public void setRefundAddr(String refundAddr) {
+ this.refundAddr = refundAddr;
+ }
+
+ public Token getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Token amount) {
+ this.amount = amount;
+ }
+
+ @Override
+ public String toString() {
+ return "SideChainStakeMigration{" +
+ "validatorSrcAddr='" + validatorSrcAddr + '\'' +
+ ", validatorDstAddr='" + validatorDstAddr + '\'' +
+ ", delegatorAddr='" + delegatorAddr + '\'' +
+ ", refundAddr='" + refundAddr + '\'' +
+ ", amount=" + amount +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/amino/WireType.java b/src/main/java/com/binance/dex/api/client/encoding/amino/WireType.java
index 9c0f8857..c8e4fed5 100644
--- a/src/main/java/com/binance/dex/api/client/encoding/amino/WireType.java
+++ b/src/main/java/com/binance/dex/api/client/encoding/amino/WireType.java
@@ -1,6 +1,7 @@
package com.binance.dex.api.client.encoding.amino;
import com.binance.dex.api.client.encoding.amino.types.PubKeyEd25519;
+import com.binance.dex.api.client.encoding.message.beaconchain.transaction.*;
import com.binance.dex.api.client.encoding.message.bridge.BindMsgMessage;
import com.binance.dex.api.client.encoding.message.bridge.ClaimMsgMessage;
import com.binance.dex.api.client.encoding.message.bridge.TransferOutMsgMessage;
@@ -22,6 +23,12 @@ public class WireType {
static {
classToTypeName.put(PubKeyEd25519.class, "tendermint/PubKeyEd25519");
+ classToTypeName.put(CreateBeaconChainValidatorMessage.class, "cosmos-sdk/MsgCreateValidatorOpen");
+ classToTypeName.put(EditBeaconChainValidatorMessage.class, "cosmos-sdk/MsgEditValidator");
+ classToTypeName.put(BeaconChainDelegateMessage.class, "cosmos-sdk/MsgDelegate");
+ classToTypeName.put(BeaconChainRedelegateMessage.class, "cosmos-sdk/MsgRedelegate");
+ classToTypeName.put(BeaconChainUndelegateMessage.class, "cosmos-sdk/MsgUndelegate");
+
classToTypeName.put(CreateSideChainValidatorMessage.class, "cosmos-sdk/MsgCreateSideChainValidator");
classToTypeName.put(EditSideChainValidatorMessage.class, "cosmos-sdk/MsgEditSideChainValidator");
classToTypeName.put(SideChainDelegateMessage.class, "cosmos-sdk/MsgSideChainDelegate");
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/MessageType.java b/src/main/java/com/binance/dex/api/client/encoding/message/MessageType.java
index bafa81e7..bf0c3c54 100644
--- a/src/main/java/com/binance/dex/api/client/encoding/message/MessageType.java
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/MessageType.java
@@ -53,7 +53,21 @@ public enum MessageType {
TinyTokenIssue("ED2832D4"),
MiniTokenIssue("A3F16C41"),
MiniTokenSetURI("7B1D34E7"),
- MiniTokenList("4C264019");
+ MiniTokenList("4C264019"),
+
+ // open staking
+ CreateBeaconChainValidator("E9FB7335"),
+ EditBeaconChainValidator("C2E8BCCD"),
+ BeaconChainDelegate("921D2E4E"),
+ BeaconChainRedelegate("47A5ED9C"),
+ BeaconChainUndelegate("5C80810D"),
+ UnJail("543AEC70"),
+
+ // fast finality
+ CreateSideChainValidatorWithVoteAddr("A0032998"),
+ EditSideChainValidatorWithVoteAddr("852FDADD"),
+
+ SideChainStakeMigration("38589196");
private byte[] typePrefixBytes;
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainRedelegationMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainRedelegationMessage.java
new file mode 100644
index 00000000..af8a5770
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainRedelegationMessage.java
@@ -0,0 +1,170 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.query;
+
+
+import com.binance.dex.api.client.domain.stake.Redelegation;
+import com.binance.dex.api.client.encoding.message.Token;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainRedelegationMessage {
+
+ //delegator address
+ @JsonProperty(value = "delegator_addr")
+ private String delegatorAddress;
+
+ //validator redelegation source operator address
+ @JsonProperty(value = "validator_src_addr")
+ private String srcValidatorAddress;
+
+ //validator redelegation destination operator address
+ @JsonProperty(value = "validator_dst_addr")
+ private String dstValidatorAddress;
+
+ //height which the redelegation took place
+ @JsonProperty(value = "creation_height")
+ private long createHeight;
+
+ //unix time for redelegation completion
+ @JsonProperty(value = "min_time")
+ private String minTime;
+
+ //initial balance when redelegation started
+ @JsonProperty(value = "initial_balance")
+ private Token initialBalance;
+
+ //current balance
+ @JsonProperty(value = "balance")
+ private Token balance;
+
+ //amount of source shares redelegating
+ @JsonProperty(value = "shares_src")
+ private long srcShares;
+
+ //amount of destination shares redelegating
+ @JsonProperty(value = "shares_dst")
+ private long dstShare;
+
+ public BeaconChainRedelegationMessage() {
+ }
+
+ public Redelegation toRedelegation(){
+ Redelegation redelegation = new Redelegation(this.getDelegatorAddress(),
+ this.getSrcValidatorAddress(),
+ this.getDstValidatorAddress(),
+ this.getCreateHeight(),
+ this.getMinTime(),
+ this.getMinTimeInMs(),
+ this.getInitialBalance(),
+ this.getBalance(),
+ this.getSrcShares(),
+ this.getDstShare()
+ );
+ return redelegation;
+ }
+
+
+ public String getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(String delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public String getSrcValidatorAddress() {
+ return srcValidatorAddress;
+ }
+
+ public void setSrcValidatorAddress(String srcValidatorAddress) {
+ this.srcValidatorAddress = srcValidatorAddress;
+ }
+
+ public String getDstValidatorAddress() {
+ return dstValidatorAddress;
+ }
+
+ public void setDstValidatorAddress(String dstValidatorAddress) {
+ this.dstValidatorAddress = dstValidatorAddress;
+ }
+
+ public long getCreateHeight() {
+ return createHeight;
+ }
+
+ public void setCreateHeight(long createHeight) {
+ this.createHeight = createHeight;
+ }
+
+ public String getMinTime() {
+ return minTime;
+ }
+
+ public void setMinTime(String minTime) {
+ this.minTime = minTime;
+ }
+
+ public long getMinTimeInMs() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+ Date d = null;
+ try {
+ d = sdf.parse(this.minTime);
+ } catch (ParseException e) {
+ return 0;
+ }
+ return d.getTime();
+ }
+
+
+ public Token getInitialBalance() {
+ return initialBalance;
+ }
+
+ public void setInitialBalance(Token initialBalance) {
+ this.initialBalance = initialBalance;
+ }
+
+ public Token getBalance() {
+ return balance;
+ }
+
+ public void setBalance(Token balance) {
+ this.balance = balance;
+ }
+
+ public long getSrcShares() {
+ return srcShares;
+ }
+
+ public void setSrcShares(long srcShares) {
+ this.srcShares = srcShares;
+ }
+
+ public long getDstShare() {
+ return dstShare;
+ }
+
+ public void setDstShare(long dstShare) {
+ this.dstShare = dstShare;
+ }
+
+ @Override
+ public String toString() {
+ return "SideChainRedelegation{" +
+ "delegatorAddress='" + delegatorAddress + '\'' +
+ ", srcValidatorAddress='" + srcValidatorAddress + '\'' +
+ ", dstValidatorAddress='" + dstValidatorAddress + '\'' +
+ ", createHeight=" + createHeight +
+ ", minTime='" + minTime + '\'' +
+ ", initialBalance=" + initialBalance +
+ ", balance=" + balance +
+ ", srcShares=" + srcShares +
+ ", dstShare=" + dstShare +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainUnBondingDelegationMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainUnBondingDelegationMessage.java
new file mode 100644
index 00000000..9552359a
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/BeaconChainUnBondingDelegationMessage.java
@@ -0,0 +1,124 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.query;
+
+import com.binance.dex.api.client.domain.stake.UnBondingDelegation;
+import com.binance.dex.api.client.encoding.message.Token;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainUnBondingDelegationMessage {
+ @JsonProperty(value = "delegator_addr")
+ private String delegatorAddress;
+ @JsonProperty(value = "validator_addr")
+ private String validatorAddress;
+ @JsonProperty(value = "creation_height")
+ private long createHeight;
+ @JsonProperty(value = "min_time")
+ private String minTime;
+ @JsonProperty(value = "initial_balance")
+ private Token initialBalance;
+ @JsonProperty(value = "balance")
+ private Token balance;
+
+ @JsonProperty(value = "cross_stake")
+ private boolean crossStake;
+
+ public UnBondingDelegation toBeaconChainUnBondingDelegation() {
+ UnBondingDelegation redelegation = new UnBondingDelegation(
+ this.getDelegatorAddress(),
+ this.getValidatorAddress(),
+ this.getCreateHeight(),
+ this.getMinTimeInMs(),
+ this.getMinTime(),
+ this.getInitialBalance(),
+ this.getBalance()
+
+ );
+ return redelegation;
+ }
+
+ public String getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(String delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public String getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(String validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public long getCreateHeight() {
+ return createHeight;
+ }
+
+ public void setCreateHeight(long createHeight) {
+ this.createHeight = createHeight;
+ }
+
+ public long getMinTimeInMs() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+ Date d = null;
+ try {
+ d = sdf.parse(this.minTime);
+ } catch (ParseException e) {
+ return 0;
+ }
+ return d.getTime();
+ }
+
+
+ public String getMinTime() {
+ return minTime;
+ }
+
+ public void setMinTime(String minTime) {
+ this.minTime = minTime;
+ }
+
+ public Token getInitialBalance() {
+ return initialBalance;
+ }
+
+ public void setInitialBalance(Token initialBalance) {
+ this.initialBalance = initialBalance;
+ }
+
+ public Token getBalance() {
+ return balance;
+ }
+
+ public void setBalance(Token balance) {
+ this.balance = balance;
+ }
+
+ public boolean isCrossStake() {
+ return crossStake;
+ }
+
+ public void setCrossStake(boolean crossStake) {
+ this.crossStake = crossStake;
+ }
+
+ @Override
+ public String toString() {
+ return "UnBondingDelegation{" +
+ "delegatorAddress='" + delegatorAddress + '\'' +
+ ", validatorAddress='" + validatorAddress + '\'' +
+ ", createHeight=" + createHeight +
+ ", minTime='" + minTime + '\'' +
+ ", initialBalance=" + initialBalance +
+ ", balance=" + balance +
+ '}';
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/PoolMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/PoolMessage.java
new file mode 100644
index 00000000..3b091620
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/query/PoolMessage.java
@@ -0,0 +1,43 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.query;
+
+import com.binance.dex.api.client.domain.stake.Pool;
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.common.Dec;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+public class PoolMessage {
+ @JsonProperty(value = "loose_tokens")
+ private long looseTokens;
+ @JsonProperty(value = "bonded_tokens")
+ private long bondedTokens;
+
+ public long getLooseTokens() {
+ return looseTokens;
+ }
+
+ public void setLooseTokens(long looseTokens) {
+ this.looseTokens = looseTokens;
+ }
+
+ public long getBondedTokens() {
+ return bondedTokens;
+ }
+
+ public void setBondedTokens(long bondedTokens) {
+ this.bondedTokens = bondedTokens;
+ }
+
+ public Pool toPool(){
+ Pool pool = new Pool();
+ pool.setBondedTokens(bondedTokens);
+ pool.setLooseTokens(looseTokens);
+ return pool;
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainDelegateMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainDelegateMessage.java
new file mode 100644
index 00000000..3e5c361f
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainDelegateMessage.java
@@ -0,0 +1,95 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class BeaconChainDelegateMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "delegator_addr")
+ private Bech32AddressValue delegatorAddress;
+
+ @JsonProperty(value = "validator_addr")
+ private Bech32AddressValue validatorAddress;
+
+ @JsonProperty(value = "delegation")
+ private CoinValueStr delegation;
+
+
+ public BeaconChainDelegateMessage() { }
+
+ public Bech32AddressValue getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(Bech32AddressValue delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public Bech32AddressValue getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(Bech32AddressValue validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public CoinValueStr getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(CoinValueStr delegation) {
+ this.delegation = delegation;
+ }
+
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new BeaconChainDelegateMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(Bech32AddressValue.class, delegatorAddress, delegatorAddress == null || delegatorAddress.isDefaultOrEmpty())
+ .addField(Bech32AddressValue.class, validatorAddress, validatorAddress == null || validatorAddress.isDefaultOrEmpty())
+ .addField(CoinValueStr.class, delegation, delegation == null)
+ .build();
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ delegatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 2:
+ validatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 3:
+ delegation = ((CoinValueStr) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainRedelegateMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainRedelegateMessage.java
new file mode 100644
index 00000000..08ecdb6a
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainRedelegateMessage.java
@@ -0,0 +1,109 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class BeaconChainRedelegateMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "delegator_addr")
+ private Bech32AddressValue delegatorAddress;
+
+ @JsonProperty(value = "validator_src_addr")
+ private Bech32AddressValue srcValidatorAddress;
+
+ @JsonProperty(value = "validator_dst_addr")
+ private Bech32AddressValue dstValidatorAddress;
+
+ @JsonProperty(value = "amount")
+ private CoinValueStr amount;
+
+ public BeaconChainRedelegateMessage() {
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new BeaconChainRedelegateMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(Bech32AddressValue.class, delegatorAddress, delegatorAddress == null || delegatorAddress.isDefaultOrEmpty())
+ .addField(Bech32AddressValue.class, srcValidatorAddress, srcValidatorAddress == null || srcValidatorAddress.isDefaultOrEmpty())
+ .addField(Bech32AddressValue.class, dstValidatorAddress, dstValidatorAddress == null || dstValidatorAddress.isDefaultOrEmpty())
+ .addField(CoinValueStr.class, amount, amount == null)
+ .build();
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ delegatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 2:
+ srcValidatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 3:
+ dstValidatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 4:
+ amount = ((CoinValueStr) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ public Bech32AddressValue getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(Bech32AddressValue delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public Bech32AddressValue getSrcValidatorAddress() {
+ return srcValidatorAddress;
+ }
+
+ public void setSrcValidatorAddress(Bech32AddressValue srcValidatorAddress) {
+ this.srcValidatorAddress = srcValidatorAddress;
+ }
+
+ public Bech32AddressValue getDstValidatorAddress() {
+ return dstValidatorAddress;
+ }
+
+ public void setDstValidatorAddress(Bech32AddressValue dstValidatorAddress) {
+ this.dstValidatorAddress = dstValidatorAddress;
+ }
+
+ public CoinValueStr getAmount() {
+ return amount;
+ }
+
+ public void setAmount(CoinValueStr amount) {
+ this.amount = amount;
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainUndelegateMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainUndelegateMessage.java
new file mode 100644
index 00000000..f2ba7ec5
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/BeaconChainUndelegateMessage.java
@@ -0,0 +1,94 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class BeaconChainUndelegateMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "delegator_addr")
+ private Bech32AddressValue delegatorAddress;
+
+ @JsonProperty(value = "validator_addr")
+ private Bech32AddressValue validatorAddress;
+
+ @JsonProperty(value = "amount")
+ private CoinValueStr amount;
+
+ public BeaconChainUndelegateMessage() {
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new BeaconChainUndelegateMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(Bech32AddressValue.class, delegatorAddress, delegatorAddress == null || delegatorAddress.isDefaultOrEmpty())
+ .addField(Bech32AddressValue.class, validatorAddress, validatorAddress == null || validatorAddress.isDefaultOrEmpty())
+ .addField(CoinValueStr.class, amount, amount == null)
+ .build();
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ delegatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 2:
+ validatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 3:
+ amount = ((CoinValueStr) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ public Bech32AddressValue getDelegatorAddress() {
+ return delegatorAddress;
+ }
+
+ public void setDelegatorAddress(Bech32AddressValue delegatorAddress) {
+ this.delegatorAddress = delegatorAddress;
+ }
+
+ public Bech32AddressValue getValidatorAddress() {
+ return validatorAddress;
+ }
+
+ public void setValidatorAddress(Bech32AddressValue validatorAddress) {
+ this.validatorAddress = validatorAddress;
+ }
+
+ public CoinValueStr getAmount() {
+ return amount;
+ }
+
+ public void setAmount(CoinValueStr amount) {
+ this.amount = amount;
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/CreateBeaconChainValidatorMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/CreateBeaconChainValidatorMessage.java
new file mode 100644
index 00000000..2a8cecda
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/CreateBeaconChainValidatorMessage.java
@@ -0,0 +1,138 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.binance.dex.api.client.encoding.message.sidechain.value.CommissionMsgValue;
+import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class CreateBeaconChainValidatorMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "description")
+ private DescriptionValue description = new DescriptionValue();
+
+ @JsonProperty(value = "commission")
+ private CommissionMsgValue commission = new CommissionMsgValue();
+
+ @JsonProperty(value = "delegator_address")
+ private Bech32AddressValue delegatorAddr;
+
+ @JsonProperty(value = "validator_address")
+ private Bech32AddressValue validatorOperatorAddr;
+
+ @JsonProperty(value = "pubkey")
+ private String pubKey;
+
+ @JsonProperty(value = "delegation")
+ private CoinValueStr delegation;
+
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ description = ((DescriptionValue) value);
+ break;
+ case 2:
+ commission = ((CommissionMsgValue) value);
+ break;
+ case 3:
+ delegatorAddr = ((Bech32AddressValue) value);
+ break;
+ case 4:
+ validatorOperatorAddr = ((Bech32AddressValue) value);
+ break;
+ case 5:
+ pubKey = ((String) value);
+ break;
+ case 6:
+ delegation = ((CoinValueStr) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new CreateBeaconChainValidatorMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ ArrayList> fields = new ArrayList<>();
+ fields.add(new AminoField<>(DescriptionValue.class, description, description == null));
+ fields.add(new AminoField<>(CommissionMsgValue.class, commission, commission == null));
+ fields.add(new AminoField<>(Bech32AddressValue.class, delegatorAddr, delegatorAddr == null || delegatorAddr.isDefaultOrEmpty()));
+ fields.add(new AminoField<>(Bech32AddressValue.class, validatorOperatorAddr, validatorOperatorAddr == null || validatorOperatorAddr.isDefaultOrEmpty()));
+ fields.add(new AminoField<>(String.class, pubKey, StringUtils.isEmpty(pubKey)));
+ fields.add(new AminoField<>(CoinValueStr.class, delegation, delegation == null));
+ return fields;
+ }
+
+ public DescriptionValue getDescription() {
+ return description;
+ }
+
+ public void setDescription(DescriptionValue description) {
+ this.description = description;
+ }
+
+ public CommissionMsgValue getCommission() {
+ return commission;
+ }
+
+ public void setCommission(CommissionMsgValue commission) {
+ this.commission = commission;
+ }
+
+ public Bech32AddressValue getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(Bech32AddressValue delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public Bech32AddressValue getValidatorOperatorAddr() {
+ return validatorOperatorAddr;
+ }
+
+ public void setValidatorOperatorAddr(Bech32AddressValue validatorOperatorAddr) {
+ this.validatorOperatorAddr = validatorOperatorAddr;
+ }
+
+ public CoinValueStr getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(CoinValueStr delegation) {
+ this.delegation = delegation;
+ }
+
+ public String getPubKey() {
+ return pubKey;
+ }
+
+ public void setPubKey(String pubKey) {
+ this.pubKey = pubKey;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/EditBeaconChainValidatorMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/EditBeaconChainValidatorMessage.java
new file mode 100644
index 00000000..5f5fb9d1
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/beaconchain/transaction/EditBeaconChainValidatorMessage.java
@@ -0,0 +1,115 @@
+package com.binance.dex.api.client.encoding.message.beaconchain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.Dec;
+import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
+import com.binance.dex.api.client.encoding.serializer.DecToStringSerializer;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class EditBeaconChainValidatorMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "description")
+ private DescriptionValue description;
+
+ @JsonProperty(value = "address")
+ private Bech32AddressValue validatorOperatorAddress;
+
+ @JsonProperty(value = "commission_rate")
+ @JsonSerialize(using = DecToStringSerializer.class)
+ private Dec commissionRate;
+
+ @JsonProperty(value = "pubkey")
+ private String pubKey;
+
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ description = ((DescriptionValue) value);
+ break;
+ case 2:
+ validatorOperatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 3:
+ commissionRate = ((Dec) value);
+ break;
+ case 4:
+ pubKey = ((String) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ public EditBeaconChainValidatorMessage() {
+ }
+
+ public DescriptionValue getDescription() {
+ return description;
+ }
+
+ public void setDescription(DescriptionValue description) {
+ this.description = description;
+ }
+
+ public Bech32AddressValue getValidatorOperatorAddress() {
+ return validatorOperatorAddress;
+ }
+
+ public void setValidatorOperatorAddress(Bech32AddressValue validatorOperatorAddress) {
+ this.validatorOperatorAddress = validatorOperatorAddress;
+ }
+
+ public Dec getCommissionRate() {
+ return commissionRate;
+ }
+
+ public void setCommissionRate(Dec commissionRate) {
+ this.commissionRate = commissionRate;
+ }
+
+ public String getPubKey() {
+ return pubKey;
+ }
+
+ public void setPubKey(String pubKey) {
+ this.pubKey = pubKey;
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new EditBeaconChainValidatorMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(DescriptionValue.class, description, description == null)
+ .addField(Bech32AddressValue.class, validatorOperatorAddress, validatorOperatorAddress == null || validatorOperatorAddress.isDefaultOrEmpty())
+ .addField(Dec.class, commissionRate, commissionRate == null || commissionRate.isDefaultOrEmpty())
+// .addField(Dec.class, commissionRate, false)
+ .addField(String.class, pubKey, StringUtils.isEmpty(pubKey))
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/BechValidator.java b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/BechValidator.java
index 9244f237..ed7d48d9 100644
--- a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/BechValidator.java
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/BechValidator.java
@@ -2,13 +2,14 @@
import com.binance.dex.api.client.domain.stake.Commission;
import com.binance.dex.api.client.domain.stake.Description;
-import com.binance.dex.api.client.domain.stake.sidechain.SideChainValidator;
-import com.binance.dex.api.client.encoding.Crypto;
+import com.binance.dex.api.client.domain.stake.Validator;
import com.binance.dex.api.client.encoding.amino.Amino;
import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
+import java.util.ArrayList;
+
/**
* @author Fitz.Lu
**/
@@ -115,12 +116,34 @@ public void setUpdateTime(String updateTime) {
@JsonProperty(value = "side_fee_addr")
private String sideFeeAddr;
+ @JsonProperty(value = "stake_snapshots")
+ private ArrayList stakeSnapShots;
+
+ public ArrayList getStakeSnapShots() {
+ return stakeSnapShots;
+ }
+
+ public void setStakeSnapShots(ArrayList stakeSnapShots) {
+ this.stakeSnapShots = stakeSnapShots;
+ }
+
+ public String getAccumulatedStake() {
+ return accumulatedStake;
+ }
+
+ public void setAccumulatedStake(String accumulatedStake) {
+ this.accumulatedStake = accumulatedStake;
+ }
+
+ @JsonProperty(value = "accumulated_stake")
+ private String accumulatedStake;
+
public BechValidator() {
}
- public SideChainValidator toSideChainValidator() {
- SideChainValidator validator = new SideChainValidator();
+ public Validator toValidator() {
+ Validator validator = new Validator();
if (feeAddr != null) {
validator.setFeeAddr(feeAddr);
}
@@ -175,6 +198,16 @@ public SideChainValidator toSideChainValidator() {
}
}
+ if(stakeSnapShots != null && stakeSnapShots.size() > 0){
+ ArrayList stakeSnapShots = new ArrayList<>();
+ for(String stakeSnapShot : stakeSnapShots){
+ stakeSnapShots.add(stakeSnapShot);
+ }
+ validator.setStakeSnapShots(stakeSnapShots);
+ }
+
+ validator.setAccumulatedStake(accumulatedStake);
+
return validator;
}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/QueryRedelegationParams.java b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/QueryRedelegationParams.java
new file mode 100644
index 00000000..9f90109a
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/query/QueryRedelegationParams.java
@@ -0,0 +1,67 @@
+package com.binance.dex.api.client.encoding.message.sidechain.query;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+/**
+ * @author Francis.Liu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class QueryRedelegationParams extends BaseQueryParams {
+
+ @JsonProperty(value = "DelegatorAddr")
+ private String delegatorAddr;
+
+ @JsonProperty(value = "ValSrcAddr")
+ private String validatorSrcAddr;
+
+ @JsonProperty(value = "ValDstAddr")
+ private String validatorDstAddr;
+
+ public QueryRedelegationParams() {
+ }
+
+ public QueryRedelegationParams(String sideChainId, String delegatorAddr, String validatorSrcAddr, String validatorDstAddr) {
+ super(sideChainId);
+ this.delegatorAddr = delegatorAddr;
+ this.validatorSrcAddr = validatorSrcAddr;
+ this.validatorDstAddr = validatorDstAddr;
+ }
+
+
+ public String getSideChainId() {
+ return sideChainId;
+ }
+
+ public void setSideChainId(String sideChainId) {
+ this.sideChainId = sideChainId;
+ }
+
+ public String getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(String delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public String getValidatorSrcAddr() {
+ return validatorSrcAddr;
+ }
+
+ public void setValidatorSrcAddr(String validatorSrcAddr) {
+ this.validatorSrcAddr = validatorSrcAddr;
+ }
+
+ public String getValidatorDstAddr() {
+ return validatorDstAddr;
+ }
+
+ public void setValidatorDstAddr(String validatorDstAddr) {
+ this.validatorDstAddr = validatorDstAddr;
+ }
+
+}
+
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/CreateSideChainValidatorWithVoteAddrMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/CreateSideChainValidatorWithVoteAddrMessage.java
new file mode 100644
index 00000000..d2ca1300
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/CreateSideChainValidatorWithVoteAddrMessage.java
@@ -0,0 +1,179 @@
+package com.binance.dex.api.client.encoding.message.sidechain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.binance.dex.api.client.encoding.message.sidechain.value.CommissionMsgValue;
+import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class CreateSideChainValidatorWithVoteAddrMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "description")
+ private DescriptionValue description = new DescriptionValue();
+
+ @JsonProperty(value = "commission")
+ private CommissionMsgValue commission = new CommissionMsgValue();
+
+ @JsonProperty(value = "delegator_address")
+ private Bech32AddressValue delegatorAddr;
+
+ @JsonProperty(value = "validator_address")
+ private Bech32AddressValue validatorOperatorAddr;
+
+ @JsonProperty(value = "delegation")
+ private CoinValueStr delegation;
+
+ @JsonProperty(value = "side_chain_id")
+ private String sideChainId;
+
+ @JsonProperty(value = "side_cons_addr")
+ private byte[] sideConsAddr;
+
+ @JsonProperty(value = "side_fee_addr")
+ private byte[] sideFeeAddr;
+
+ @JsonProperty(value = "side_vote_addr")
+ private byte[] sideVoteAddr;
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ description = ((DescriptionValue) value);
+ break;
+ case 2:
+ commission = ((CommissionMsgValue) value);
+ break;
+ case 3:
+ delegatorAddr = ((Bech32AddressValue) value);
+ break;
+ case 4:
+ validatorOperatorAddr = ((Bech32AddressValue) value);
+ break;
+ case 5:
+ delegation = ((CoinValueStr) value);
+ break;
+ case 6:
+ sideChainId = ((String) value);
+ break;
+ case 7:
+ sideConsAddr = ((byte[]) value);
+ break;
+ case 8:
+ sideFeeAddr = ((byte[]) value);
+ break;
+ case 9:
+ sideVoteAddr = ((byte[]) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new CreateSideChainValidatorWithVoteAddrMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ ArrayList> fields = new ArrayList<>();
+ fields.add(new AminoField<>(DescriptionValue.class, description, description == null));
+ fields.add(new AminoField<>(CommissionMsgValue.class, commission, commission == null));
+ fields.add(new AminoField<>(Bech32AddressValue.class, delegatorAddr, delegatorAddr == null || delegatorAddr.isDefaultOrEmpty()));
+ fields.add(new AminoField<>(Bech32AddressValue.class, validatorOperatorAddr, validatorOperatorAddr == null || validatorOperatorAddr.isDefaultOrEmpty()));
+ fields.add(new AminoField<>(CoinValueStr.class, delegation, delegation == null));
+ fields.add(new AminoField<>(String.class, sideChainId, StringUtils.isEmpty(sideChainId)));
+ fields.add(new AminoField<>(byte[].class, sideConsAddr, sideConsAddr == null || sideConsAddr.length == 0));
+ fields.add(new AminoField<>(byte[].class, sideFeeAddr, sideFeeAddr == null || sideFeeAddr.length == 0));
+ fields.add(new AminoField<>(byte[].class, sideVoteAddr, sideVoteAddr == null || sideVoteAddr.length == 0));
+ return fields;
+ }
+
+ public DescriptionValue getDescription() {
+ return description;
+ }
+
+ public void setDescription(DescriptionValue description) {
+ this.description = description;
+ }
+
+ public CommissionMsgValue getCommission() {
+ return commission;
+ }
+
+ public void setCommission(CommissionMsgValue commission) {
+ this.commission = commission;
+ }
+
+ public Bech32AddressValue getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(Bech32AddressValue delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public Bech32AddressValue getValidatorOperatorAddr() {
+ return validatorOperatorAddr;
+ }
+
+ public void setValidatorOperatorAddr(Bech32AddressValue validatorOperatorAddr) {
+ this.validatorOperatorAddr = validatorOperatorAddr;
+ }
+
+ public CoinValueStr getDelegation() {
+ return delegation;
+ }
+
+ public void setDelegation(CoinValueStr delegation) {
+ this.delegation = delegation;
+ }
+
+ public String getSideChainId() {
+ return sideChainId;
+ }
+
+ public void setSideChainId(String sideChainId) {
+ this.sideChainId = sideChainId;
+ }
+
+ public byte[] getSideConsAddr() {
+ return sideConsAddr;
+ }
+
+ public void setSideConsAddr(byte[] sideConsAddr) {
+ this.sideConsAddr = sideConsAddr;
+ }
+
+ public byte[] getSideFeeAddr() {
+ return sideFeeAddr;
+ }
+
+ public void setSideFeeAddr(byte[] sideFeeAddr) {
+ this.sideFeeAddr = sideFeeAddr;
+ }
+
+ public byte[] getSideVoteAddr() {
+ return sideVoteAddr;
+ }
+
+ public void setSideVoteAddr(byte[] sideVoteAddr) {
+ this.sideVoteAddr = sideVoteAddr;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/EditSideChainValidatorWithVoteAddrMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/EditSideChainValidatorWithVoteAddrMessage.java
new file mode 100644
index 00000000..9a8e9448
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/EditSideChainValidatorWithVoteAddrMessage.java
@@ -0,0 +1,162 @@
+package com.binance.dex.api.client.encoding.message.sidechain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.Dec;
+import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
+import com.binance.dex.api.client.encoding.serializer.DecToStringSerializer;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * @author Fitz.Lu
+ **/
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class EditSideChainValidatorWithVoteAddrMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "description")
+ private DescriptionValue description;
+
+ @JsonProperty(value = "address")
+ private Bech32AddressValue validatorOperatorAddress;
+
+ @JsonProperty(value = "commission_rate")
+ @JsonSerialize(using = DecToStringSerializer.class)
+ private Dec commissionRate;
+
+ @JsonProperty(value = "side_chain_id")
+ private String sideChainId;
+
+ @JsonProperty(value = "side_fee_addr")
+ private byte[] sideFeeAddr;
+
+ @JsonProperty(value = "side_cons_addr")
+ private byte[] sideConsAddr;
+
+ @JsonProperty(value = "side_vote_addr")
+ private byte[] sideVoteAddr;
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ description = ((DescriptionValue) value);
+ break;
+ case 2:
+ validatorOperatorAddress = ((Bech32AddressValue) value);
+ break;
+ case 3:
+ commissionRate = ((Dec) value);
+ break;
+ case 4:
+ sideChainId = ((String) value);
+ break;
+ case 5:
+ sideFeeAddr = ((byte[]) value);
+ break;
+ case 6:
+ sideConsAddr = ((byte[]) value);
+ break;
+ case 7:
+ setSideVoteAddr((byte[]) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ public EditSideChainValidatorWithVoteAddrMessage() {
+ }
+
+ public DescriptionValue getDescription() {
+ return description;
+ }
+
+ public void setDescription(DescriptionValue description) {
+ this.description = description;
+ }
+
+ public Bech32AddressValue getValidatorOperatorAddress() {
+ return validatorOperatorAddress;
+ }
+
+ public void setValidatorOperatorAddress(Bech32AddressValue validatorOperatorAddress) {
+ this.validatorOperatorAddress = validatorOperatorAddress;
+ }
+
+ public Dec getCommissionRate() {
+ return commissionRate;
+ }
+
+ public void setCommissionRate(Dec commissionRate) {
+ this.commissionRate = commissionRate;
+ }
+
+ public String getSideChainId() {
+ return sideChainId;
+ }
+
+ public void setSideChainId(String sideChainId) {
+ this.sideChainId = sideChainId;
+ }
+
+ public byte[] getSideFeeAddr() {
+ return sideFeeAddr;
+ }
+
+ public void setSideFeeAddr(byte[] sideFeeAddr) {
+ this.sideFeeAddr = sideFeeAddr;
+ }
+
+ public byte[] getSideConsAddr() {
+ return sideConsAddr;
+ }
+
+ public void setSideConsAddr(byte[] sideConsAddr) {
+ this.sideConsAddr = sideConsAddr;
+ }
+
+ public byte[] getSideVoteAddr() {
+ return sideVoteAddr;
+ }
+
+ public void setSideVoteAddr(byte[] sideVoteAddr) {
+ if (sideVoteAddr != null && sideVoteAddr.length > 48) {
+ sideVoteAddr = Arrays.copyOfRange(sideVoteAddr, 0, 48);
+ }
+ this.sideVoteAddr = sideVoteAddr;
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new EditSideChainValidatorWithVoteAddrMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(DescriptionValue.class, description, description == null)
+ .addField(Bech32AddressValue.class, validatorOperatorAddress, validatorOperatorAddress == null || validatorOperatorAddress.isDefaultOrEmpty())
+ .addField(Dec.class, commissionRate, commissionRate == null || commissionRate.isDefaultOrEmpty())
+ .addField(String.class, sideChainId, StringUtils.isEmpty(sideChainId))
+ .addField(byte[].class, sideFeeAddr, sideFeeAddr == null || sideFeeAddr.length == 0)
+ .addField(byte[].class, sideConsAddr, sideConsAddr == null || sideConsAddr.length == 0)
+ .addField(byte[].class, sideVoteAddr, sideVoteAddr == null || sideVoteAddr.length == 0)
+ .build();
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/SideChainStakeMigrationMessage.java b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/SideChainStakeMigrationMessage.java
new file mode 100644
index 00000000..be255abd
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/encoding/message/sidechain/transaction/SideChainStakeMigrationMessage.java
@@ -0,0 +1,120 @@
+package com.binance.dex.api.client.encoding.message.sidechain.transaction;
+
+import com.binance.dex.api.client.encoding.amino.AminoField;
+import com.binance.dex.api.client.encoding.amino.AminoSerializable;
+import com.binance.dex.api.client.encoding.message.BinanceDexTransactionMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class SideChainStakeMigrationMessage implements BinanceDexTransactionMessage, AminoSerializable {
+
+ @JsonProperty(value = "validator_src_addr")
+ private Bech32AddressValue validatorSrcAddr;
+
+ @JsonProperty(value = "validator_dst_addr")
+ private byte[] validatorDstAddr;
+
+ @JsonProperty(value = "delegator_addr")
+ private byte[] delegatorAddr;
+
+ @JsonProperty(value = "refund_addr")
+ private Bech32AddressValue refundAddr;
+
+ @JsonProperty(value = "amount")
+ private CoinValueStr amount;
+
+ public SideChainStakeMigrationMessage() {
+ }
+
+ @Override
+ public AminoSerializable newAminoMessage() {
+ return new SideChainStakeMigrationMessage();
+ }
+
+ @Override
+ public ArrayList> IterateFields() {
+ return AminoField.newFieldsBuilder()
+ .addField(Bech32AddressValue.class, validatorSrcAddr, validatorSrcAddr == null || validatorSrcAddr.isDefaultOrEmpty())
+ .addField(byte[].class, validatorDstAddr, validatorDstAddr == null || validatorDstAddr.length == 0)
+ .addField(byte[].class, delegatorAddr, delegatorAddr == null || delegatorAddr.length == 0)
+ .addField(Bech32AddressValue.class, refundAddr, refundAddr == null || refundAddr.isDefaultOrEmpty())
+ .addField(CoinValueStr.class, amount, amount == null)
+ .build();
+ }
+
+ @Override
+ public void setValueByFieldIndex(int fieldIndex, Object value) {
+ switch (fieldIndex) {
+ case 1:
+ validatorSrcAddr = ((Bech32AddressValue) value);
+ break;
+ case 2:
+ validatorDstAddr = ((byte[]) value);
+ break;
+ case 3:
+ delegatorAddr = ((byte[]) value);
+ break;
+ case 4:
+ refundAddr = ((Bech32AddressValue) value);
+ break;
+ case 5:
+ amount = ((CoinValueStr) value);
+ break;
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public boolean useAminoJson() {
+ return true;
+ }
+
+ public Bech32AddressValue getValidatorSrcAddr() {
+ return validatorSrcAddr;
+ }
+
+ public void setValidatorSrcAddr(Bech32AddressValue validatorSrcAddr) {
+ this.validatorSrcAddr = validatorSrcAddr;
+ }
+
+ public byte[] getValidatorDstAddr() {
+ return validatorDstAddr;
+ }
+
+ public void setValidatorDstAddr(byte[] validatorDstAddr) {
+ this.validatorDstAddr = validatorDstAddr;
+ }
+
+ public byte[] getDelegatorAddr() {
+ return delegatorAddr;
+ }
+
+ public void setDelegatorAddr(byte[] delegatorAddr) {
+ this.delegatorAddr = delegatorAddr;
+ }
+
+ public Bech32AddressValue getRefundAddr() {
+ return refundAddr;
+ }
+
+ public void setRefundAddr(Bech32AddressValue refundAddr) {
+ this.refundAddr = refundAddr;
+ }
+
+ public CoinValueStr getAmount() {
+ return amount;
+ }
+
+ public void setAmount(CoinValueStr amount) {
+ this.amount = amount;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiAsyncRestClientImpl.java b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiAsyncRestClientImpl.java
index 967f5e77..756e6943 100644
--- a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiAsyncRestClientImpl.java
+++ b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiAsyncRestClientImpl.java
@@ -8,21 +8,35 @@
import com.binance.dex.api.client.domain.request.TransactionsRequest;
import org.apache.commons.lang3.StringUtils;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
public class BinanceDexApiAsyncRestClientImpl implements BinanceDexApiAsyncRestClient {
private BinanceDexApi binanceDexApi;
+ private BinanceTransactionApi binanceTransactionApi;
public BinanceDexApiAsyncRestClientImpl(String baseUrl) {
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class, baseUrl);
+
+ String transactionUrl = BinanceDexEnvironment.inferTransactionUrl(baseUrl);
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl);
+ }
}
- public BinanceDexApiAsyncRestClientImpl(String baseUrl,String apiKey){
+ public BinanceDexApiAsyncRestClientImpl(String baseUrl, String apiKey){
+ String transactionUrl = BinanceDexEnvironment.inferTransactionUrl(baseUrl);
if(StringUtils.isBlank(apiKey)){
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class, baseUrl);
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl);
+ }
}else{
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class,apiKey,baseUrl + "/internal/");
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl + "/internal/");
+ }
}
}
@@ -149,20 +163,30 @@ public void getTrades(TradesRequest request, BinanceDexApiCallback ca
}
@Override
- public void getTransactions(String address, BinanceDexApiCallback callback) {
+ public void getTransactions(String address, BinanceDexApiCallback callback) {
TransactionsRequest request = new TransactionsRequest();
request.setAddress(address);
+ Long endTime = new Date().getTime();
+ Long startTime = endTime - 86400000;
+ request.setStartTime(startTime);
+ request.setEndTime(endTime);
getTransactions(request, callback);
}
@Override
- public void getTransactions(TransactionsRequest request, BinanceDexApiCallback callback) {
- String sideStr = request.getSide() == null ? null : request.getSide().name();
- String txTypeStr = request.getTxType() != null ? request.getTxType().name() : null;
- binanceDexApi.getTransactions(
- request.getAddress(), request.getBlockHeight(), request.getEndTime(),
- request.getLimit(), request.getOffset(), sideStr,
- request.getStartTime(), request.getTxAsset(), txTypeStr).enqueue(
+ public void getTransactions(TransactionsRequest request, BinanceDexApiCallback callback) {
+ binanceTransactionApi.getTransactions(
+ request.getStartTime(), request.getEndTime(),
+ request.getType(), request.getAsset(),
+ request.getAddress(), request.getAddressType(),
+ request.getOffset(), request.getLimit()).enqueue(
+ new BinanceDexApiCallbackAdapter<>(callback));
+ }
+
+ @Override
+ public void getTransactionsInBlock(long blockHeight, BinanceDexApiCallback callback) {
+ binanceTransactionApi.getTransactionsInBlock(
+ blockHeight).enqueue(
new BinanceDexApiCallbackAdapter<>(callback));
}
}
diff --git a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiNodeClientImpl.java b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiNodeClientImpl.java
index e2312f4f..ee1835fa 100644
--- a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiNodeClientImpl.java
+++ b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiNodeClientImpl.java
@@ -2,11 +2,15 @@
import com.binance.dex.api.client.*;
import com.binance.dex.api.client.domain.*;
-import com.binance.dex.api.client.domain.bridge.TransferIn;
import com.binance.dex.api.client.domain.broadcast.SideVote;
import com.binance.dex.api.client.domain.oracle.Prophecy;
import com.binance.dex.api.client.domain.StakeValidator;
import com.binance.dex.api.client.domain.stake.Pool;
+import com.binance.dex.api.client.domain.stake.beaconchain.*;
+import com.binance.dex.api.client.domain.stake.Delegation;
+import com.binance.dex.api.client.domain.stake.Redelegation;
+import com.binance.dex.api.client.domain.stake.UnBondingDelegation;
+import com.binance.dex.api.client.domain.stake.Validator;
import com.binance.dex.api.client.domain.stake.sidechain.*;
import com.binance.dex.api.client.domain.broadcast.Transaction;
import com.binance.dex.api.client.domain.broadcast.*;
@@ -53,10 +57,14 @@ public class BinanceDexApiNodeClientImpl implements BinanceDexApiNodeClient {
private final NodeTxDelegateSideChainStaking sideChainStakingTxDelegate;
+ private final NodeTxDelegateBeaconChainStaking beaconChainStakingTxDelegate;
+
private final NodeTxDelegateBridge bridgeTxDelegate;
private final NodeQueryDelegateSideChainStaking sideChainQueryDelegate;
+ private final NodeQueryDelegateBeaconChainStaking beaconChainQueryDelegate;
+
private final NodeQueryDelegateOracle oracleQueryDelegate;
public BinanceDexApiNodeClientImpl(String nodeUrl, String hrp, String valHrp) {
@@ -67,8 +75,10 @@ public BinanceDexApiNodeClientImpl(String nodeUrl, String hrp, String valHrp) {
feeConverter = new FeeConverter();
sideChainStakingTxDelegate = new NodeTxDelegateSideChainStaking(binanceDexNodeApi, hrp, valHrp);
+ beaconChainStakingTxDelegate = new NodeTxDelegateBeaconChainStaking(binanceDexNodeApi, hrp, valHrp);
bridgeTxDelegate = new NodeTxDelegateBridge(binanceDexNodeApi, hrp, valHrp);
sideChainQueryDelegate = new NodeQueryDelegateSideChainStaking(binanceDexNodeApi, hrp, valHrp);
+ beaconChainQueryDelegate = new NodeQueryDelegateBeaconChainStaking(binanceDexNodeApi, hrp, valHrp, sideChainQueryDelegate);
oracleQueryDelegate = new NodeQueryDelegateOracle(binanceDexNodeApi, hrp, valHrp);
}
@@ -444,32 +454,32 @@ public List sideChainUnbond(SideChainUnBond sideChainUndele
}
@Override
- public SideChainValidator getSideChainValidator(String sideChainId, String validatorAddress) throws IOException {
+ public Validator getSideChainValidator(String sideChainId, String validatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainValidator(sideChainId, validatorAddress);
}
@Override
- public List getSideChainTopValidators(String sideChainId, int top) throws IOException {
+ public List getSideChainTopValidators(String sideChainId, int top) throws IOException {
return sideChainQueryDelegate.querySideChainTopValidators(sideChainId, top);
}
@Override
- public SideChainDelegation getSideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException {
+ public Delegation getSideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainDelegation(sideChainId, delegatorAddress, validatorAddress);
}
@Override
- public List getSideChainDelegations(String sideChainId, String delegatorAddress) throws IOException {
+ public List getSideChainDelegations(String sideChainId, String delegatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainDelegations(sideChainId, delegatorAddress);
}
@Override
- public SideChainRedelegation getSideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
+ public Redelegation getSideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainRedelegation(sideChainId, delegatorAddress, srcValidatorAddress, dstValidatorAddress);
}
@Override
- public List getSideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException {
+ public List getSideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainRedelegations(sideChainId, delegatorAddress);
}
@@ -489,7 +499,7 @@ public List getSideChainUnBondingDelegationsByValidator(Str
}
@Override
- public List getSideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException {
+ public List getSideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException {
return sideChainQueryDelegate.querySideChainRedelegationsByValidator(sideChainId, validatorAddress);
}
@@ -586,6 +596,106 @@ public com.binance.dex.api.client.domain.MiniToken getMiniTokenInfoBySymbol(Stri
}
}
+ @Override
+ public List createValidator(CreateBeaconChainValidator createBeaconChainValidator, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ synchronized (wallet) {
+ wallet.ensureWalletIsReady(this);
+ return beaconChainStakingTxDelegate.createBeaconChainValidator(createBeaconChainValidator, wallet, options, sync);
+ }
+ }
+
+ @Override
+ public List editValidator(EditBeaconChainValidator editBeaconChainValidator, Wallet wallet, TransactionOption option, boolean sync) throws IOException, NoSuchAlgorithmException {
+ synchronized (wallet) {
+ wallet.ensureWalletIsReady(this);
+ return beaconChainStakingTxDelegate.editBeaconChainValidator(editBeaconChainValidator, wallet, option, sync);
+ }
+ }
+
+ @Override
+ public List delegate(BeaconChainDelegate beaconChainDelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ synchronized (wallet) {
+ wallet.ensureWalletIsReady(this);
+ return beaconChainStakingTxDelegate.beaconChainDelegate(beaconChainDelegate, wallet, options, sync);
+ }
+ }
+
+ @Override
+ public List redelegate(BeaconChainRedelegate beaconChainRedelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ synchronized (wallet) {
+ wallet.ensureWalletIsReady(this);
+ return beaconChainStakingTxDelegate.beaconChainRedelegate(beaconChainRedelegate, wallet, options, sync);
+ }
+ }
+
+ @Override
+ public List undelegate(BeaconChainUndelegate beaconChainUndelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ synchronized (wallet) {
+ wallet.ensureWalletIsReady(this);
+ return beaconChainStakingTxDelegate.beaconChainUndelegate(beaconChainUndelegate, wallet, options, sync);
+ }
+ }
+
+ @Override
+ public Validator getValidator(String validatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainValidator(validatorAddress);
+ }
+
+ @Override
+ public List getTopValidators(int top) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainTopValidators(top);
+ }
+
+ @Override
+ public Delegation getDelegation(String delegatorAddress, String validatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainDelegation(delegatorAddress, validatorAddress);
+ }
+
+ @Override
+ public List getDelegations(String delegatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainDelegations(delegatorAddress);
+ }
+
+ @Override
+ public Redelegation getRedelegation(String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainRedelegation(delegatorAddress, srcValidatorAddress, dstValidatorAddress);
+ }
+
+ @Override
+ public List getRedelegations(String delegatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainRedelegations(delegatorAddress);
+ }
+
+ @Override
+ public UnBondingDelegation getUnBondingDelegation(String delegatorAddress, String validatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainUnBondingDelegation(delegatorAddress, validatorAddress);
+ }
+
+ @Override
+ public List getUnBondingDelegations(String delegatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainUnBondingDelegations(delegatorAddress);
+ }
+
+ @Override
+ public List getUnBondingDelegationsByValidator(String validatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainUnBondingDelegationsByValidator(validatorAddress);
+ }
+
+ @Override
+ public List getRedelegationsByValidator(String validatorAddress) throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainRedelegationsByValidator(validatorAddress);
+ }
+
+ @Override
+ public Pool getPool() throws IOException {
+ return beaconChainQueryDelegate.queryBeaconChainPool();
+ }
+
+ @Override
+ public long getAllValidatorsCount(boolean jailInvolved) throws IOException {
+ return beaconChainQueryDelegate.queryAllBeaconChainValidatorsCount(jailInvolved);
+ }
+
protected Infos convert(NodeInfos nodeInfos) {
Infos infos = new Infos();
diff --git a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiRestClientImpl.java b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiRestClientImpl.java
index b0903540..21a69b43 100644
--- a/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiRestClientImpl.java
+++ b/src/main/java/com/binance/dex/api/client/impl/BinanceDexApiRestClientImpl.java
@@ -13,6 +13,7 @@
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -22,17 +23,29 @@
*/
public class BinanceDexApiRestClientImpl implements BinanceDexApiRestClient {
private BinanceDexApi binanceDexApi;
+ private BinanceTransactionApi binanceTransactionApi;
private static final okhttp3.MediaType MEDIA_TYPE = okhttp3.MediaType.parse("text/plain; charset=utf-8");
public BinanceDexApiRestClientImpl(String baseUrl) {
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class, baseUrl);
+ String transactionUrl = BinanceDexEnvironment.inferTransactionUrl(baseUrl);
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl);
+ }
}
public BinanceDexApiRestClientImpl(String baseUrl,String apiKey){
+ String transactionUrl = BinanceDexEnvironment.inferTransactionUrl(baseUrl);
if(StringUtils.isBlank(apiKey)){
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class, baseUrl);
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl);
+ }
}else{
this.binanceDexApi = BinanceDexApiClientGenerator.createService(BinanceDexApi.class,apiKey,baseUrl + "/internal/");
+ if (transactionUrl != null) {
+ this.binanceTransactionApi = BinanceDexApiClientGenerator.createService(BinanceTransactionApi.class, transactionUrl + "/internal/");
+ }
}
}
@@ -147,21 +160,31 @@ public TradePage getTrades(TradesRequest request) {
}
@Override
- public TransactionPage getTransactions(String address) {
+ public TransactionPageV2 getTransactions(String address) {
TransactionsRequest request = new TransactionsRequest();
request.setAddress(address);
+ Long endTime = new Date().getTime();
+ Long startTime = endTime - 86400000;
+ request.setStartTime(startTime);
+ request.setEndTime(endTime);
return getTransactions(request);
}
@Override
- public TransactionPage getTransactions(TransactionsRequest request) {
- String sideStr = request.getSide() != null ? request.getSide().name() : null;
- String txTypeStr = request.getTxType() != null ? request.getTxType().name() : null;
+ public TransactionPageV2 getTransactions(TransactionsRequest request) {
+ return BinanceDexApiClientGenerator.executeSync(
+ binanceTransactionApi.getTransactions(
+ request.getStartTime(), request.getEndTime(),
+ request.getType(), request.getAsset(),
+ request.getAddress(), request.getAddressType(),
+ request.getOffset(), request.getLimit()));
+ }
+
+
+ @Override
+ public TransactionPageV2 getTransactionsInBlock(long blockHeight) {
return BinanceDexApiClientGenerator.executeSync(
- binanceDexApi.getTransactions(
- request.getAddress(), request.getBlockHeight(), request.getEndTime(),
- request.getLimit(), request.getOffset(), sideStr,
- request.getStartTime(), request.getTxAsset(), txTypeStr));
+ binanceTransactionApi.getTransactionsInBlock(blockHeight));
}
// Broadcast and handle account sequence
diff --git a/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateBeaconChainStaking.java b/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateBeaconChainStaking.java
new file mode 100644
index 00000000..20d27d66
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateBeaconChainStaking.java
@@ -0,0 +1,150 @@
+package com.binance.dex.api.client.impl.node;
+
+import com.binance.dex.api.client.BinanceDexNodeApi;
+import com.binance.dex.api.client.domain.stake.Pool;
+import com.binance.dex.api.client.domain.stake.Delegation;
+import com.binance.dex.api.client.domain.stake.Redelegation;
+import com.binance.dex.api.client.domain.stake.UnBondingDelegation;
+import com.binance.dex.api.client.domain.stake.Validator;
+import com.binance.dex.api.client.encoding.ByteUtil;
+import com.binance.dex.api.client.encoding.EncodeUtils;
+import com.binance.dex.api.client.encoding.message.beaconchain.query.BeaconChainRedelegationMessage;
+import com.binance.dex.api.client.encoding.message.beaconchain.query.BeaconChainUnBondingDelegationMessage;
+import com.binance.dex.api.client.encoding.message.beaconchain.query.PoolMessage;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.sidechain.query.*;
+import com.fasterxml.jackson.core.type.TypeReference;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Francis.Liu
+ **/
+public class NodeQueryDelegateBeaconChainStaking extends NodeQuery {
+
+ private String sideChainId = "";
+
+ private NodeQueryDelegateSideChainStaking sideChainStakingQuery;
+
+ public NodeQueryDelegateBeaconChainStaking(BinanceDexNodeApi binanceDexNodeApi, String hrp, String valHrp, NodeQueryDelegateSideChainStaking sideChainStakingQuery) {
+ super(binanceDexNodeApi, hrp, valHrp);
+ this.sideChainStakingQuery = sideChainStakingQuery;
+ }
+
+ public Validator queryBeaconChainValidator(String validatorAddress) throws IOException {
+ QueryValidatorParams params = new QueryValidatorParams(sideChainId, Bech32AddressValue.fromBech32StringWithNewHrp(validatorAddress, valHrp));
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/validator\"", data);
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ BechValidator validator = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference(){});
+ return validator.toValidator();
+ }
+ return null;
+ }
+
+ public List queryBeaconChainTopValidators(int top) throws IOException {
+ List validators = this.sideChainStakingQuery.querySideChainTopValidators(sideChainId, top);
+ return validators;
+ }
+
+ public Delegation queryBeaconChainDelegation(String delegatorAddress, String validatorAddress) throws IOException {
+ return this.sideChainStakingQuery.querySideChainDelegation(sideChainId, delegatorAddress, validatorAddress);
+ }
+
+ public List queryBeaconChainDelegations(String delegatorAddress) throws IOException {
+ List delegations = this.sideChainStakingQuery.querySideChainDelegations(sideChainId, delegatorAddress);
+ return delegations;
+ }
+
+ public Redelegation queryBeaconChainRedelegation(String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
+ QueryRedelegationParams params = new QueryRedelegationParams(sideChainId, delegatorAddress, srcValidatorAddress, dstValidatorAddress);
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/redelegation\"", data);
+
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ BeaconChainRedelegationMessage message = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference(){});
+ return message.toRedelegation();
+ }
+ return null;
+ }
+
+ public List queryBeaconChainRedelegations(String delegatorAddress) throws IOException {
+ QueryDelegatorParams params = new QueryDelegatorParams();
+ params.setDelegatorAddr(delegatorAddress);
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/delegatorRedelegations\"", data);
+ List results = new ArrayList<>();
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ List messages = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference>(){});
+ for (BeaconChainRedelegationMessage message : messages) {
+ results.add(message.toRedelegation());
+ }
+ }
+ return results;
+ }
+
+
+ public UnBondingDelegation queryBeaconChainUnBondingDelegation(String delegatorAddress, String validatorAddress) throws IOException {
+ QueryBondsParams params = new QueryBondsParams();
+ params.setDelegatorAddr(delegatorAddress);
+ params.setValidatorAddr(validatorAddress);
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/unbondingDelegation\"", data);
+
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ BeaconChainUnBondingDelegationMessage message = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference(){});
+ return message.toBeaconChainUnBondingDelegation();
+ }
+ return null;
+ }
+
+ public List queryBeaconChainUnBondingDelegations(String delegatorAddress) throws IOException {
+ QueryDelegatorParams params = new QueryDelegatorParams();
+ params.setDelegatorAddr(delegatorAddress);
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/delegatorUnbondingDelegations\"", data);
+ List results = new ArrayList<>();
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ List messages = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference>(){});
+ for (BeaconChainUnBondingDelegationMessage message : messages) {
+ results.add(message.toBeaconChainUnBondingDelegation());
+ }
+ }
+ return results;
+ }
+
+ public List queryBeaconChainUnBondingDelegationsByValidator(String validatorAddress) throws IOException {
+ List unBondingDelegations = this.sideChainStakingQuery.querySideChainUnBondingDelegationsByValidator(sideChainId, validatorAddress);
+ return unBondingDelegations;
+ }
+
+ public List queryBeaconChainRedelegationsByValidator(String validatorAddress) throws IOException {
+ List redelegations = this.sideChainStakingQuery.querySideChainRedelegationsByValidator(sideChainId, validatorAddress);
+ return redelegations;
+ }
+
+ public Pool queryBeaconChainPool() throws IOException {
+ BaseQueryParams params = new BaseQueryParams();
+ byte[] data = EncodeUtils.toJsonEncodeBytes(params);
+ byte[] result = queryWithData("\"custom/stake/pool\"", data);
+
+ if (!ByteUtil.isEmpty(result)){
+ String jsonStr = new String(result);
+ PoolMessage message = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference(){});
+ return message.toPool();
+ }
+ return null;
+ }
+
+ public long queryAllBeaconChainValidatorsCount(boolean jailInvolved) throws IOException {
+ return this.sideChainStakingQuery.queryAllSideChainValidatorsCount(sideChainId, jailInvolved);
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateSideChainStaking.java b/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateSideChainStaking.java
index 1f7abe7c..ea99d5b2 100644
--- a/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateSideChainStaking.java
+++ b/src/main/java/com/binance/dex/api/client/impl/node/NodeQueryDelegateSideChainStaking.java
@@ -1,11 +1,8 @@
package com.binance.dex.api.client.impl.node;
import com.binance.dex.api.client.*;
-import com.binance.dex.api.client.domain.stake.Commission;
-import com.binance.dex.api.client.domain.stake.Description;
-import com.binance.dex.api.client.domain.stake.Pool;
-import com.binance.dex.api.client.domain.stake.sidechain.*;
-import com.binance.dex.api.client.domain.stake.sidechain.Delegation;
+import com.binance.dex.api.client.domain.stake.*;
+import com.binance.dex.api.client.domain.stake.Delegation;
import com.binance.dex.api.client.encoding.ByteUtil;
import com.binance.dex.api.client.encoding.Crypto;
import com.binance.dex.api.client.encoding.EncodeUtils;
@@ -52,7 +49,7 @@ public NodeQueryDelegateSideChainStaking(BinanceDexNodeApi binanceDexNodeApi, St
amino = InternalAmino.get();
}
- public SideChainValidator querySideChainValidator(String sideChainId, String validatorAddress) throws IOException {
+ public Validator querySideChainValidator(String sideChainId, String validatorAddress) throws IOException {
byte[] storePrefix = getSideChainStorePrefixKey(sideChainId);
byte[] key = ByteUtil.appendBytesArray(storePrefix, getValidatorKey(Crypto.decodeAddress(validatorAddress)));
byte[] result = queryStore(stakeStoreName, key);
@@ -66,7 +63,7 @@ public SideChainValidator querySideChainValidator(String sideChainId, String val
}
}
- public List querySideChainTopValidators(String sideChainId, int top) throws IOException {
+ public List querySideChainTopValidators(String sideChainId, int top) throws IOException {
if (top > 50 || top < 1){
throw new IllegalArgumentException("top must be between 1 and 50");
}
@@ -81,19 +78,19 @@ public List querySideChainTopValidators(String sideChainId,
List bechValidator = EncodeUtils.getObjectMapper().readValue(jsonStr, new TypeReference>(){});
- List sideChainValidators = new ArrayList<>();
+ List sideChainValidators = new ArrayList<>();
if (bechValidator != null && !bechValidator.isEmpty()){
for (BechValidator validator : bechValidator) {
- sideChainValidators.add(validator.toSideChainValidator());
+ sideChainValidators.add(validator.toValidator());
}
}
return sideChainValidators;
}
- private SideChainValidator convert(SideChainValidatorMessage message){
- SideChainValidator sideChainValidator = new SideChainValidator();
+ private Validator convert(SideChainValidatorMessage message){
+ Validator sideChainValidator = new Validator();
if (message.getFeeAddr() != null) {
sideChainValidator.setFeeAddr(EncodeUtils.bytesToPrefixHex(message.getFeeAddr()));
@@ -168,7 +165,7 @@ private SideChainValidator convert(SideChainValidatorMessage message){
return sideChainValidator;
}
- public SideChainDelegation querySideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException {
+ public Delegation querySideChainDelegation(String sideChainId, String delegatorAddress, String validatorAddress) throws IOException {
QueryBondsParams params = new QueryBondsParams();
params.setSideChainId(sideChainId);
params.setDelegatorAddr(delegatorAddress);
@@ -185,7 +182,7 @@ public SideChainDelegation querySideChainDelegation(String sideChainId, String d
return null;
}
- public List querySideChainDelegations(String sideChainId, String delegatorAddress) throws IOException {
+ public List querySideChainDelegations(String sideChainId, String delegatorAddress) throws IOException {
QueryDelegatorParams params = new QueryDelegatorParams();
params.setSideChainId(sideChainId);
params.setDelegatorAddr(delegatorAddress);
@@ -193,7 +190,7 @@ public List querySideChainDelegations(String sideChainId, S
byte[] paramsBytes = EncodeUtils.toJsonEncodeBytes(params);
byte[] response = queryWithData("\"custom/stake/delegatorDelegations\"", paramsBytes);
- List results = new ArrayList<>();
+ List results = new ArrayList<>();
if (!ByteUtil.isEmpty(response)){
String a = new String(response);
@@ -206,10 +203,10 @@ public List querySideChainDelegations(String sideChainId, S
return results;
}
- private SideChainDelegation convert(DelegationResponse delegationResponse){
- SideChainDelegation sideChainDelegation = new SideChainDelegation();
+ private Delegation convert(DelegationResponse delegationResponse){
+ Delegation sideChainDelegation = new Delegation();
if (delegationResponse.getDelegation() != null) {
- Delegation delegation = new Delegation();
+ DelegationItem delegation = new DelegationItem();
delegation.setDelegatorAddress(delegationResponse.getDelegation().getDelegatorAddress());
delegation.setValidatorAddress(delegationResponse.getDelegation().getValidatorAddress());
delegation.setShares(delegationResponse.getDelegation().getShares());
@@ -222,7 +219,7 @@ private SideChainDelegation convert(DelegationResponse delegationResponse){
return sideChainDelegation;
}
- public SideChainRedelegation querySideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
+ public Redelegation querySideChainRedelegation(String sideChainId, String delegatorAddress, String srcValidatorAddress, String dstValidatorAddress) throws IOException {
byte[] storePrefix = getSideChainStorePrefixKey(sideChainId);
byte[] redKey = getRedelegationKey(Crypto.decodeAddress(delegatorAddress), Crypto.decodeAddress(srcValidatorAddress),
Crypto.decodeAddress(dstValidatorAddress));
@@ -238,12 +235,12 @@ public SideChainRedelegation querySideChainRedelegation(String sideChainId, Stri
return null;
}
- public List querySideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException {
+ public List querySideChainRedelegations(String sideChainId, String delegatorAddress) throws IOException {
byte[] storePrefix = getSideChainStorePrefixKey(sideChainId);
byte[] redsKey = getRedelegationsKey(Crypto.decodeAddress(delegatorAddress));
byte[] key = ByteUtil.appendBytesArray(storePrefix, redsKey);
List result = queryStoreSubspaceKVPairs(stakeStoreName, key);
- List redelegations = new ArrayList<>();
+ List redelegations = new ArrayList<>();
if (result != null && !result.isEmpty()){
for (common.Types.KVPair kvPair : result) {
byte[] k = ByteUtil.cut(kvPair.getKey().toByteArray(), storePrefix.length);
@@ -256,7 +253,7 @@ public List querySideChainRedelegations(String sideChainI
return redelegations;
}
- private SideChainRedelegation convert(RedelegationValue value, byte[] key){
+ private Redelegation convert(RedelegationValue value, byte[] key){
byte[] addresses = ByteUtil.cut(key, 1);
if (addresses.length != addressLength * 3){
throw new IllegalStateException("unexpected address length for (address, srcValidator, dstValidator)");
@@ -266,7 +263,7 @@ private SideChainRedelegation convert(RedelegationValue value, byte[] key){
String srcValAddr = Crypto.encodeAddress(valHrp, ByteUtil.pick(addresses, addressLength, addressLength));
String dstValAddr = Crypto.encodeAddress(valHrp, ByteUtil.pick(addresses, addressLength * 2, addressLength));
- SideChainRedelegation redelegation = new SideChainRedelegation();
+ Redelegation redelegation = new Redelegation();
redelegation.setDelegatorAddress(delAddr);
redelegation.setSrcValidatorAddress(srcValAddr);
redelegation.setDstValidatorAddress(dstValAddr);
@@ -343,12 +340,12 @@ public List querySideChainUnBondingDelegationsByValidator(S
return unBondingDelegations;
}
- public List querySideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException {
+ public List querySideChainRedelegationsByValidator(String sideChainId, String validatorAddress) throws IOException {
QueryValidatorParams params = new QueryValidatorParams(sideChainId, Bech32AddressValue.fromBech32StringWithNewHrp(validatorAddress, valHrp));
byte[] data = EncodeUtils.toJsonEncodeBytes(params);
byte[] result = queryWithData("\"custom/stake/validatorRedelegations\"", data);
- List redelegations = new ArrayList<>();
+ List redelegations = new ArrayList<>();
if (!ByteUtil.isEmpty(result)){
List messages = EncodeUtils.getObjectMapper().readValue(result, new TypeReference>(){});
@@ -405,8 +402,8 @@ public long queryAllSideChainValidatorsCount(String sideChainId, boolean jailInv
return 0L;
}
- private SideChainRedelegation convert(SideChainRedelegationMessage message){
- SideChainRedelegation redelegation = new SideChainRedelegation();
+ private Redelegation convert(SideChainRedelegationMessage message){
+ Redelegation redelegation = new Redelegation();
redelegation.setDelegatorAddress(message.getDelegatorAddress());
redelegation.setSrcValidatorAddress(message.getSrcValidatorAddress());
redelegation.setDstValidatorAddress(message.getDstValidatorAddress());
diff --git a/src/main/java/com/binance/dex/api/client/impl/node/NodeTxDelegateBeaconChainStaking.java b/src/main/java/com/binance/dex/api/client/impl/node/NodeTxDelegateBeaconChainStaking.java
new file mode 100644
index 00000000..a4089fb9
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/impl/node/NodeTxDelegateBeaconChainStaking.java
@@ -0,0 +1,172 @@
+package com.binance.dex.api.client.impl.node;
+
+import com.binance.dex.api.client.BinanceDexNodeApi;
+import com.binance.dex.api.client.Wallet;
+import com.binance.dex.api.client.domain.TransactionMetadata;
+import com.binance.dex.api.client.domain.broadcast.TransactionOption;
+import com.binance.dex.api.client.domain.stake.Commission;
+import com.binance.dex.api.client.domain.stake.Description;
+import com.binance.dex.api.client.domain.stake.beaconchain.*;
+import com.binance.dex.api.client.encoding.message.Token;
+import com.binance.dex.api.client.encoding.message.beaconchain.transaction.*;
+import com.binance.dex.api.client.encoding.message.common.Bech32AddressValue;
+import com.binance.dex.api.client.encoding.message.common.CoinValueStr;
+import com.binance.dex.api.client.encoding.message.common.Dec;
+import com.binance.dex.api.client.encoding.message.sidechain.value.CommissionMsgValue;
+import com.binance.dex.api.client.encoding.message.sidechain.value.DescriptionValue;
+import com.google.common.annotations.VisibleForTesting;
+import org.apache.commons.lang3.StringUtils;
+import org.bouncycastle.util.encoders.Hex;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+
+/**
+ * @author Francis.Liu
+ **/
+public class NodeTxDelegateBeaconChainStaking extends NodeTx {
+
+ public NodeTxDelegateBeaconChainStaking(BinanceDexNodeApi binanceDexNodeApi, String hrp, String valHrp) {
+ super(binanceDexNodeApi, hrp, valHrp);
+ }
+
+ public List createBeaconChainValidator(CreateBeaconChainValidator createBeaconChainValidator, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ CreateBeaconChainValidatorMessage message = convert(createBeaconChainValidator);
+ if (StringUtils.isEmpty(createBeaconChainValidator.getValidatorAddr())) {
+ message.setValidatorOperatorAddr(Bech32AddressValue.fromBech32StringWithNewHrp(wallet.getAddress(), valHrp));
+ }else{
+ message.setValidatorOperatorAddr(Bech32AddressValue.fromBech32StringWithNewHrp(createBeaconChainValidator.getValidatorAddr(), valHrp));
+ }
+ return broadcast(message, wallet, options, sync);
+ }
+
+ public List editBeaconChainValidator(EditBeaconChainValidator editBeaconChainValidator, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ EditBeaconChainValidatorMessage message = convert(editBeaconChainValidator);
+ if (StringUtils.isEmpty(editBeaconChainValidator.getValidatorAddress())) {
+ message.setValidatorOperatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(wallet.getAddress(), valHrp));
+ }else{
+ message.setValidatorOperatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(editBeaconChainValidator.getValidatorAddress(), valHrp));
+ }
+ return broadcast(message, wallet, options, sync);
+ }
+
+ public List beaconChainDelegate(BeaconChainDelegate beaconChainDelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ BeaconChainDelegateMessage message = convert(beaconChainDelegate);
+ return broadcast(message, wallet, options, sync);
+ }
+
+ public List beaconChainRedelegate(BeaconChainRedelegate beaconChainRedelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ BeaconChainRedelegateMessage message = convert(beaconChainRedelegate);
+ return broadcast(message, wallet, options, sync);
+ }
+
+ public List beaconChainUndelegate(BeaconChainUndelegate beaconChainUndelegate, Wallet wallet, TransactionOption options, boolean sync) throws IOException, NoSuchAlgorithmException {
+ BeaconChainUndelegateMessage message = convert(beaconChainUndelegate);
+ return broadcast(message, wallet, options, sync);
+ }
+
+ @VisibleForTesting
+ CreateBeaconChainValidatorMessage convert(CreateBeaconChainValidator createBeaconChainValidator){
+ CreateBeaconChainValidatorMessage message = new CreateBeaconChainValidatorMessage();
+
+ if (createBeaconChainValidator.getDescription() != null){
+ message.setDescription(convert(createBeaconChainValidator.getDescription()));
+ }
+ if (createBeaconChainValidator.getCommission() != null){
+ message.setCommission(convert(createBeaconChainValidator.getCommission()));
+ }
+
+ message.setDelegatorAddr(Bech32AddressValue.fromBech32String(createBeaconChainValidator.getDelegatorAddr()));
+
+ if (createBeaconChainValidator.getDelegation() != null){
+ message.setDelegation(convert(createBeaconChainValidator.getDelegation()));
+ }
+
+ message.setPubKey(createBeaconChainValidator.getPubKey());
+ return message;
+ }
+
+ @VisibleForTesting
+ EditBeaconChainValidatorMessage convert(EditBeaconChainValidator editBeaconChainValidator){
+ EditBeaconChainValidatorMessage message = new EditBeaconChainValidatorMessage();
+
+ if (editBeaconChainValidator.getDescription() != null){
+ message.setDescription(convert(editBeaconChainValidator.getDescription()));
+ }
+
+ message.setCommissionRate(Dec.newInstance(editBeaconChainValidator.getCommissionRate()));
+ if (editBeaconChainValidator.getPubKey() != null){
+ message.setPubKey(editBeaconChainValidator.getPubKey());
+ }
+
+ return message;
+ }
+
+ private byte[] decodeHexAddress(String address){
+ String addr = address;
+ if (addr.startsWith("0x")){
+ addr = address.substring(2);
+ }
+ return Hex.decode(addr);
+ }
+
+ private DescriptionValue convert(Description description){
+ DescriptionValue value = new DescriptionValue();
+ value.setMoniker(description.getMoniker());
+ value.setDetails(description.getDetails());
+ value.setIdentity(description.getIdentity());
+ value.setWebsite(description.getWebsite());
+ return value;
+ }
+
+ private CommissionMsgValue convert(Commission commission){
+ CommissionMsgValue value = new CommissionMsgValue();
+ value.setRate(Dec.newInstance(commission.getRate()));
+ value.setMaxRate(Dec.newInstance(commission.getMaxRate()));
+ value.setMaxChangeRate(Dec.newInstance(commission.getMaxChangeRate()));
+ return value;
+ }
+
+ private CoinValueStr convert(Token token){
+ CoinValueStr value = new CoinValueStr();
+ value.setDenom(token.getDenom());
+ value.setAmount(token.getAmount());
+ return value;
+ }
+
+ private BeaconChainDelegateMessage convert(BeaconChainDelegate beaconChainDelegate){
+ BeaconChainDelegateMessage message = new BeaconChainDelegateMessage();
+ message.setDelegatorAddress(Bech32AddressValue.fromBech32String(beaconChainDelegate.getDelegatorAddress()));
+ message.setValidatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(beaconChainDelegate.getValidatorAddress(), valHrp));
+
+ if (beaconChainDelegate.getDelegation() != null) {
+ message.setDelegation(convert(beaconChainDelegate.getDelegation()));
+ }
+
+ return message;
+ }
+
+ private BeaconChainRedelegateMessage convert(BeaconChainRedelegate redelegate){
+ BeaconChainRedelegateMessage message = new BeaconChainRedelegateMessage();
+ message.setDelegatorAddress(Bech32AddressValue.fromBech32String(redelegate.getDelegatorAddress()));
+ message.setSrcValidatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(redelegate.getSrcValidatorAddress(), valHrp));
+ message.setDstValidatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(redelegate.getDstValidatorAddress(), valHrp));
+ if (redelegate.getAmount() != null) {
+ message.setAmount(convert(redelegate.getAmount()));
+ }
+ return message;
+ }
+
+ private BeaconChainUndelegateMessage convert(BeaconChainUndelegate unBond){
+ BeaconChainUndelegateMessage message = new BeaconChainUndelegateMessage();
+ message.setDelegatorAddress(Bech32AddressValue.fromBech32String(unBond.getDelegatorAddress()));
+ message.setValidatorAddress(Bech32AddressValue.fromBech32StringWithNewHrp(unBond.getValidatorAddress(), valHrp));
+ if (unBond.getAmount() != null) {
+ message.setAmount(convert(unBond.getAmount()));
+ }
+ return message;
+ }
+
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/rlp/Decoder.java b/src/main/java/com/binance/dex/api/client/rlp/Decoder.java
index 21d2c35a..c21e9b4f 100644
--- a/src/main/java/com/binance/dex/api/client/rlp/Decoder.java
+++ b/src/main/java/com/binance/dex/api/client/rlp/Decoder.java
@@ -43,7 +43,7 @@ public static T decodeObject(byte[] raw, Class clazz) throws Exception {
}
- private static Object decodeBytes(byte[] value, Class> type, Object superInstance) throws Exception {
+ public static Object decodeBytes(byte[] value, Class> type, Object superInstance) throws Exception {
if (type == Integer.class) {
return decodeInt(value, 0);
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/DateUtil.java b/src/main/java/com/binance/dex/api/client/utils/converter/DateUtil.java
new file mode 100644
index 00000000..781cfe75
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/DateUtil.java
@@ -0,0 +1,102 @@
+package com.binance.dex.api.client.utils.converter;
+
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+public class DateUtil {
+
+ private static final DateTimeFormatter utcFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("UTC"));
+
+ public static long betweenSecs(Date date1, Date date2) {
+ return Duration.between(date1.toInstant(), date2.toInstant()).getSeconds();
+ }
+
+ public static long betweenDays(Date date1, Date date2) {
+ return date1.toInstant().until(date2.toInstant(), ChronoUnit.DAYS);
+ }
+
+ public static boolean isSameDay(Date date1, Date date2) {
+ Calendar cal1 = Calendar.getInstance();
+ Calendar cal2 = Calendar.getInstance();
+ cal1.setTime(date1);
+ cal2.setTime(date2);
+ return cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) &&
+ cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
+ }
+
+ public static Date toDateFromMilliseconds(Long time) {
+ if (null == time) {
+ return null;
+ }
+ return Date.from(Instant.ofEpochMilli(time));
+ }
+
+ public static Date now() {
+ return Date.from(Instant.now());
+ }
+
+ public static Date parseUTCMilliTime(String dateStr) {
+ ZonedDateTime zdt = ZonedDateTime.parse(dateStr, utcFormatter);
+ return Date.from(zdt.toInstant());
+ }
+
+ public static Date parseUTCTime(String dateStr) {
+ return Date.from(Instant.parse(dateStr));
+ }
+
+ /**
+ * Formats a date at any given format String, at any given Timezone String.
+ *
+ * @param date Valid Date object
+ * @param format String representation of the format, e.g. "yyyy-MM-dd HH:mm"
+ * @param timezone String representation of the time zone, e.g. "CST"
+ * @return The formatted date in the given time zone.
+ */
+ public static String toString(final Date date, final String format, final String timezone) {
+ final TimeZone tz = TimeZone.getTimeZone(timezone);
+ final SimpleDateFormat formatter = new SimpleDateFormat(format);
+ formatter.setTimeZone(tz);
+ return formatter.format(date);
+ }
+
+ private static LocalDateTime dateToUtcDateTime(Date date) {
+ return LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("UTC"));
+ }
+
+ private static Date utcDateTimeToDate(LocalDateTime localDateTime) {
+ return Date.from(localDateTime.atZone(ZoneId.of("UTC")).toInstant());
+ }
+
+ public static Date getPreviousDate(Date date) {
+ LocalDateTime localDateTime = dateToUtcDateTime(date);
+ LocalDateTime previousDate = localDateTime.minusDays(1l);
+ return utcDateTimeToDate(previousDate);
+ }
+
+ public static String toUTCDateString(final Date date) {
+ return toString(date, "yyyyMMdd", "UTC");
+ }
+
+ public static String toUTCDateString(long timeStamp) {
+ return toString(new Date(timeStamp), "yyyyMMdd", "UTC");
+ }
+
+ public static Date atStartOfDay(Date date) {
+ LocalDateTime localDateTime = dateToUtcDateTime(date);
+ LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
+ return utcDateTimeToDate(startOfDay);
+ }
+
+ public static Date atEndOfDay(Date date) {
+ LocalDateTime localDateTime = dateToUtcDateTime(date);
+ LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
+ return utcDateTimeToDate(endOfDay);
+ }
+
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/JsonUtil.java b/src/main/java/com/binance/dex/api/client/utils/converter/JsonUtil.java
new file mode 100644
index 00000000..9b9e3998
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/JsonUtil.java
@@ -0,0 +1,57 @@
+package com.binance.dex.api.client.utils.converter;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
+import java.io.IOException;
+import java.util.List;
+
+public class JsonUtil {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+ private static final TypeFactory typeFactory = objectMapper.getTypeFactory();
+
+ static {
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ }
+
+
+ public static ObjectNode createObjectNode() {
+ return objectMapper.createObjectNode();
+ }
+
+ public static String toJson(Object value) {
+ try {
+ return objectMapper.writeValueAsString(value);
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static T fromJson(String jsonStr, Class tClass) {
+ try {
+ return objectMapper.readValue(jsonStr, tClass);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static List fromJsonToList(String jsonStr, Class tClass) {
+ try {
+ return objectMapper.readValue(jsonStr, typeFactory.constructCollectionType(List.class, tClass));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ public static JsonNode toJsonNode(String json) throws Exception {
+ return objectMapper.readTree(json);
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/NumberUtil.java b/src/main/java/com/binance/dex/api/client/utils/converter/NumberUtil.java
new file mode 100644
index 00000000..7d7133a1
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/NumberUtil.java
@@ -0,0 +1,42 @@
+package com.binance.dex.api.client.utils.converter;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+public class NumberUtil {
+
+ public static final Integer SHIFT_DIGITS = 8;
+
+ public static BigDecimal longToBigDecimal(Long value) {
+ return longToBigDecimal(value, SHIFT_DIGITS);
+ }
+
+ public static String longToBigDecimalString(Long value) {
+ return decimalFormat(longToBigDecimal(value, SHIFT_DIGITS));
+ }
+
+ public static BigDecimal longToBigDecimal(Long value, Integer shiftDigits) {
+ if (null == value) {
+ return null;
+ }
+ return BigDecimal.valueOf(value).movePointLeft(shiftDigits);
+ }
+
+ public static Long bigDecimalToLong(BigDecimal value) {
+ return bigDecimalToLong(value, SHIFT_DIGITS);
+ }
+
+ private static Long bigDecimalToLong(BigDecimal value, Integer precision) {
+ if (null == value) {
+ return null;
+ }
+ return value.multiply(BigDecimal.TEN.pow(precision)).longValue();
+ }
+
+ public static String decimalFormat(BigDecimal value) {
+ if (value == null) {
+ return null;
+ }
+ return new DecimalFormat("0.00000000").format(value);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/Token.java b/src/main/java/com/binance/dex/api/client/utils/converter/Token.java
new file mode 100644
index 00000000..144f0f3c
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/Token.java
@@ -0,0 +1,67 @@
+package com.binance.dex.api.client.utils.converter;
+
+import com.binance.dex.api.client.BinanceDexConstants;
+import com.binance.dex.api.proto.Send;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Builder;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+@Data
+@Builder
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonPropertyOrder(alphabetic = true)
+public class Token {
+ @JsonProperty(value = "denom")
+ private String denom;
+ @JsonProperty(value = "amount")
+ private Long amount;
+
+ public static com.binance.dex.api.client.encoding.message.Token of(com.binance.dex.api.proto.Token source) {
+ com.binance.dex.api.client.encoding.message.Token token = new com.binance.dex.api.client.encoding.message.Token();
+ token.setDenom(source.getDenom());
+ token.setAmount(source.getAmount());
+ return token;
+ }
+
+ public static com.binance.dex.api.client.encoding.message.Token of(Send.Token sendToken) {
+ com.binance.dex.api.client.encoding.message.Token token = new com.binance.dex.api.client.encoding.message.Token();
+ token.setDenom(sendToken.getDenom());
+ token.setAmount(sendToken.getAmount());
+ return token;
+ }
+
+ public Token() {
+ }
+
+ public Token(String denom, Long amount) {
+ this.denom = denom;
+ this.amount = amount;
+ }
+
+ public String getDenom() {
+ return denom;
+ }
+
+ public void setDenom(String denom) {
+ this.denom = denom;
+ }
+
+ public Long getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Long amount) {
+ this.amount = amount;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, BinanceDexConstants.BINANCE_DEX_TO_STRING_STYLE)
+ .append("denom", denom)
+ .append("amount", amount)
+ .toString();
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverter.java
new file mode 100644
index 00000000..37aa3a32
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverter.java
@@ -0,0 +1,27 @@
+package com.binance.dex.api.client.utils.converter;
+
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+
+import java.util.Map;
+
+
+public abstract class TransactionConverter {
+
+ // construct tx data information based on different tx types
+ public abstract void doConvert(TransactionV2 transactionV2, Transaction transaction);
+
+ public abstract com.binance.dex.api.client.domain.broadcast.TxType getType();
+
+ protected Token getToken(Map map, String key) {
+ Map m = (Map) map.get(key);
+ String denom = m.get("denom").toString();
+ Long amount = ((Number) m.get("amount")).longValue();
+ Token token = new Token();
+ token.setDenom(denom);
+ token.setAmount(amount);
+ return token;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverterFactory.java b/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverterFactory.java
new file mode 100644
index 00000000..a188b7a0
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/TransactionConverterFactory.java
@@ -0,0 +1,208 @@
+package com.binance.dex.api.client.utils.converter;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionPage;
+import com.binance.dex.api.client.domain.TransactionPageV2;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.utils.converter.impl.*;
+import com.google.common.collect.Maps;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Map;
+
+
+public class TransactionConverterFactory {
+
+ private static Map converterMap = Maps.newHashMap();
+
+ static {
+ FBscSubmitEvidenceConverter bscSubmitEvidenceConverter = new FBscSubmitEvidenceConverter();
+ converterMap.put(bscSubmitEvidenceConverter.getType(), bscSubmitEvidenceConverter);
+
+ FBurnConverter burnConverter = new FBurnConverter();
+ converterMap.put(burnConverter.getType(), burnConverter);
+
+ FCancelOrderConverter cancelOrderConverter = new FCancelOrderConverter();
+ converterMap.put(cancelOrderConverter.getType(), cancelOrderConverter);
+
+ FClaimHtlConverter claimHtlConverter = new FClaimHtlConverter();
+ converterMap.put(claimHtlConverter.getType(), claimHtlConverter);
+
+ FCreateSideChainValidatorConverter createSideChainValidatorConverter = new FCreateSideChainValidatorConverter();
+ converterMap.put(createSideChainValidatorConverter.getType(), createSideChainValidatorConverter);
+
+ FCreateValidatorConverter createValidatorConverter = new FCreateValidatorConverter();
+ converterMap.put(createValidatorConverter.getType(), createValidatorConverter);
+
+ FCrossBindConverter crossBindConverter = new FCrossBindConverter();
+ converterMap.put(crossBindConverter.getType(), crossBindConverter);
+
+ FCrossTransferOutConverter crossTransferOutConverter = new FCrossTransferOutConverter();
+ converterMap.put(crossTransferOutConverter.getType(), crossTransferOutConverter);
+
+ FCrossUnBindConverter crossUnBindConverter = new FCrossUnBindConverter();
+ converterMap.put(crossUnBindConverter.getType(), crossUnBindConverter);
+
+ FDepositConverter depositConverter = new FDepositConverter();
+ converterMap.put(depositConverter.getType(), depositConverter);
+
+ FDepositHtlConverter depositHtlConverter = new FDepositHtlConverter();
+ converterMap.put(depositHtlConverter.getType(), depositHtlConverter);
+
+ FEditSideChainValidatorConverter editSideChainValidatorConverter = new FEditSideChainValidatorConverter();
+ converterMap.put(editSideChainValidatorConverter.getType(), editSideChainValidatorConverter);
+
+ FFreezeConverter freezeConverter = new FFreezeConverter();
+ converterMap.put(freezeConverter.getType(), freezeConverter);
+
+ FHtlTransferConverter htlTransferConverter = new FHtlTransferConverter();
+ converterMap.put(htlTransferConverter.getType(), htlTransferConverter);
+
+ FIssueTokenConverter issueTokenConverter = new FIssueTokenConverter();
+ converterMap.put(issueTokenConverter.getType(), issueTokenConverter);
+
+ FListingConverter listingConverter = new FListingConverter();
+ converterMap.put(listingConverter.getType(), listingConverter);
+
+ FMiniTokenIssueConverter miniTokenIssueConverter = new FMiniTokenIssueConverter();
+ converterMap.put(miniTokenIssueConverter.getType(), miniTokenIssueConverter);
+
+ FMiniTokenListingConverter miniTokenListingConverter = new FMiniTokenListingConverter();
+ converterMap.put(miniTokenListingConverter.getType(), miniTokenListingConverter);
+
+ FMiniTokenSetURIConverter miniTokenSetURIConverter = new FMiniTokenSetURIConverter();
+ converterMap.put(miniTokenSetURIConverter.getType(), miniTokenSetURIConverter);
+
+ FMintConverter mintConverter = new FMintConverter();
+ converterMap.put(mintConverter.getType(), mintConverter);
+
+ FNewOrderConverter newOrderConverter = new FNewOrderConverter();
+ converterMap.put(newOrderConverter.getType(), newOrderConverter);
+
+ FOracleClaimConverter oracleClaimConverter = new FOracleClaimConverter();
+ converterMap.put(oracleClaimConverter.getType(), oracleClaimConverter);
+
+ FProposalConverter proposalConverter = new FProposalConverter();
+ converterMap.put(proposalConverter.getType(), proposalConverter);
+
+ FRefundHtlConverter refundHtlConverter = new FRefundHtlConverter();
+ converterMap.put(refundHtlConverter.getType(), refundHtlConverter);
+
+ FRemoveValidatorConverter removeValidatorConverter = new FRemoveValidatorConverter();
+ converterMap.put(removeValidatorConverter.getType(), removeValidatorConverter);
+
+ FSetAccountFlagsConverter setAccountFlagsConverter = new FSetAccountFlagsConverter();
+ converterMap.put(setAccountFlagsConverter.getType(), setAccountFlagsConverter);
+
+ FSideChainDelegateConverter sideChainDelegateConverter = new FSideChainDelegateConverter();
+ converterMap.put(sideChainDelegateConverter.getType(), sideChainDelegateConverter);
+
+ FSideChainRedelegateConverter sideChainRedelegateConverter = new FSideChainRedelegateConverter();
+ converterMap.put(sideChainRedelegateConverter.getType(), sideChainRedelegateConverter);
+
+ FSideChainUnJailConverter sideChainUnJailConverter = new FSideChainUnJailConverter();
+ converterMap.put(sideChainUnJailConverter.getType(), sideChainUnJailConverter);
+
+ FSideChainUndelegateConverter sideChainUndelegateConverter = new FSideChainUndelegateConverter();
+ converterMap.put(sideChainUndelegateConverter.getType(), sideChainUndelegateConverter);
+
+ FSideDepositConverter sideDepositConverter = new FSideDepositConverter();
+ converterMap.put(sideDepositConverter.getType(), sideDepositConverter);
+
+ FSideProposalConverter sideProposalConverter = new FSideProposalConverter();
+ converterMap.put(sideProposalConverter.getType(), sideProposalConverter);
+
+ FSideVoteConverter sideVoteConverter = new FSideVoteConverter();
+ converterMap.put(sideVoteConverter.getType(), sideVoteConverter);
+
+ FTimeLockConverter timeLockConverter = new FTimeLockConverter();
+ converterMap.put(timeLockConverter.getType(), timeLockConverter);
+
+ FTimeReLockConverter timeReLockConverter = new FTimeReLockConverter();
+ converterMap.put(timeReLockConverter.getType(), timeReLockConverter);
+
+ FTimeUnlockConverter timeUnlockConverter = new FTimeUnlockConverter();
+ converterMap.put(timeUnlockConverter.getType(), timeUnlockConverter);
+
+ FTinyTokenIssueConverter tinyTokenIssueConverter = new FTinyTokenIssueConverter();
+ converterMap.put(tinyTokenIssueConverter.getType(), tinyTokenIssueConverter);
+
+ FTransferConverter transferConverter = new FTransferConverter();
+ converterMap.put(transferConverter.getType(), transferConverter);
+
+ FTransferOwnershipConverter transferOwnershipConverter = new FTransferOwnershipConverter();
+ converterMap.put(transferOwnershipConverter.getType(), transferOwnershipConverter);
+
+ FUnfreezeConverter unfreezeConverter = new FUnfreezeConverter();
+ converterMap.put(unfreezeConverter.getType(), unfreezeConverter);
+
+ FCreateBeaconChainValidatorConverter createValConverter = new FCreateBeaconChainValidatorConverter();
+ converterMap.put(createValConverter.getType(), createValConverter);
+
+ FEditBeaconChainValidatorConverter editValConverter = new FEditBeaconChainValidatorConverter();
+ converterMap.put(editValConverter.getType(), editValConverter);
+
+ FBeaconChainDelegateConverter delegateConverter = new FBeaconChainDelegateConverter();
+ converterMap.put(delegateConverter.getType(), delegateConverter);
+
+ FBeaconChainRedelegateConverter redelegateConverter = new FBeaconChainRedelegateConverter();
+ converterMap.put(redelegateConverter.getType(), redelegateConverter);
+
+ FBeaconChainUndelegateConverter undelegateConverter = new FBeaconChainUndelegateConverter();
+ converterMap.put(undelegateConverter.getType(), undelegateConverter);
+
+ FVoteConverter voteConverter = new FVoteConverter();
+ converterMap.put(voteConverter.getType(), voteConverter);
+ }
+
+ public static T getConverter(com.binance.dex.api.client.domain.broadcast.TxType txType) {
+ if (converterMap.containsKey(txType)) {
+ return (T) converterMap.get(txType);
+ }
+ return null;
+ }
+
+
+ public Transaction convert(TransactionV2 transactionV2) {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ if (transactionV2 == null) {
+ return null;
+ }
+ Transaction transaction = new Transaction();
+ transaction.setBlockHeight(transactionV2.getBlockHeight());
+ transaction.setTxHash(transactionV2.getHash());
+ transaction.setTxType(transactionV2.getType());
+ transaction.setTimeStamp(formatter.format(new Date(transactionV2.getBlockTime())));
+ transaction.setConfirmBlocks(0L);
+
+ transaction.setCode(transactionV2.getCode());
+ transaction.setMemo(transactionV2.getMemo());
+
+ transaction.setTxAsset(transactionV2.getAsset());
+ transaction.setFromAddr(transactionV2.getFromAddr());
+ transaction.setData(transactionV2.getData());
+
+ transaction.setTxAge(DateUtil.betweenSecs(new Date(transactionV2.getBlockTime()), DateUtil.now()));
+
+ transaction.setTxFee(NumberUtil.longToBigDecimalString(transactionV2.getFee()));
+
+ TransactionConverter converter = getConverter(TxType.getTypeByName(transactionV2.getType()));
+ converter.doConvert(transactionV2, transaction);
+
+ return transaction;
+ }
+
+ public TransactionPage convert(TransactionPageV2 transactionPageV2) {
+ TransactionPage transactionPage = new TransactionPage();
+ if (transactionPageV2 != null) {
+ transactionPage.setTotal(transactionPageV2.getTotal());
+ transactionPage.setTx(new ArrayList<>());
+ transactionPageV2.getTxs().stream().forEach(tx -> {
+ transactionPage.getTx().add(convert(tx));
+ });
+ }
+ return transactionPage;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/TxType.java b/src/main/java/com/binance/dex/api/client/utils/converter/TxType.java
new file mode 100644
index 00000000..ab88a909
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/TxType.java
@@ -0,0 +1,78 @@
+package com.binance.dex.api.client.utils.converter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum TxType {
+ NEW_ORDER(com.binance.dex.api.client.domain.broadcast.TxType.NEW_ORDER),
+ ISSUE_TOKEN(com.binance.dex.api.client.domain.broadcast.TxType.ISSUE),
+ BURN_TOKEN(com.binance.dex.api.client.domain.broadcast.TxType.BURN),
+ LIST_TOKEN(com.binance.dex.api.client.domain.broadcast.TxType.LISTING),
+ CANCEL_ORDER(com.binance.dex.api.client.domain.broadcast.TxType.CANCEL_ORDER),
+ FREEZE_TOKEN(com.binance.dex.api.client.domain.broadcast.TxType.FREEZE_TOKEN),
+ UN_FREEZE_TOKEN(com.binance.dex.api.client.domain.broadcast.TxType.UNFREEZE_TOKEN),
+ TRANSFER(com.binance.dex.api.client.domain.broadcast.TxType.TRANSFER),
+ PROPOSAL(com.binance.dex.api.client.domain.broadcast.TxType.SUBMIT_PROPOSAL),
+ SIDE_PROPOSAL(com.binance.dex.api.client.domain.broadcast.TxType.SIDE_SUBMIT_PROPOSAL),
+ VOTE(com.binance.dex.api.client.domain.broadcast.TxType.VOTE),
+ SIDE_VOTE(com.binance.dex.api.client.domain.broadcast.TxType.SIDE_VOTE),
+ DEPOSIT(com.binance.dex.api.client.domain.broadcast.TxType.DEPOSIT),
+ SIDE_DEPOSIT(com.binance.dex.api.client.domain.broadcast.TxType.SIDE_DEPOSIT),
+ MINT(com.binance.dex.api.client.domain.broadcast.TxType.MINT),
+ CREATE_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.CREATE_VALIDATOR),
+ REMOVE_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.REMOVE_VALIDATOR),
+ TIME_LOCK(com.binance.dex.api.client.domain.broadcast.TxType.TimeLock),
+ TIME_UNLOCK(com.binance.dex.api.client.domain.broadcast.TxType.TimeUnlock),
+ TIME_RELOCK(com.binance.dex.api.client.domain.broadcast.TxType.TimeRelock),
+ SET_ACCOUNT_FLAG(com.binance.dex.api.client.domain.broadcast.TxType.SetAccountFlag),
+ HTL_TRANSFER(com.binance.dex.api.client.domain.broadcast.TxType.HTL_TRANSFER),
+ DEPOSIT_HTL(com.binance.dex.api.client.domain.broadcast.TxType.DEPOSIT_HTL),
+ CLAIM_HTL(com.binance.dex.api.client.domain.broadcast.TxType.CLAIM_HTL),
+ REFUND_HTL(com.binance.dex.api.client.domain.broadcast.TxType.REFUND_HTL),
+ CREATE_SIDECHAIN_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.CREATE_SIDECHAIN_VALIDATOR),
+ EDIT_SIDECHAIN_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.EDIT_SIDECHAIN_VALIDATOR),
+ SIDECHAIN_DELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.SIDECHAIN_DELEGATE),
+ SIDECHAIN_REDELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.SIDECHAIN_REDELEGATE),
+ SIDECHAIN_UNDELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.SIDECHAIN_UNBOND),
+ ORACLE_CLAIM(com.binance.dex.api.client.domain.broadcast.TxType.CLAIM),
+ CROSS_TRANSFER_OUT(com.binance.dex.api.client.domain.broadcast.TxType.TRANSFER_OUT),
+ CROSS_BIND(com.binance.dex.api.client.domain.broadcast.TxType.BIND),
+ CROSS_UNBIND(com.binance.dex.api.client.domain.broadcast.TxType.UNBIND),
+ BSC_SUBMIT_EVIDENCE(com.binance.dex.api.client.domain.broadcast.TxType.BSC_SUBMIT_EVIDENCE),
+ SIDECHAIN_UNJAIL(com.binance.dex.api.client.domain.broadcast.TxType.SIDECHAIN_UNJAIL),
+ TRANSFER_TOKEN_OWNERSHIP(com.binance.dex.api.client.domain.broadcast.TxType.TRANSFER_TOKEN_OWNERSHIP),
+ TINY_TOKEN_ISSUE(com.binance.dex.api.client.domain.broadcast.TxType.TINY_TOKEN_ISSUE),
+ MINI_TOKEN_ISSUE(com.binance.dex.api.client.domain.broadcast.TxType.MINI_TOKEN_ISSUE),
+ MINI_TOKEN_LIST(com.binance.dex.api.client.domain.broadcast.TxType.MINI_TOKEN_LIST),
+ MINI_TOKEN_SET_URI(com.binance.dex.api.client.domain.broadcast.TxType.MINI_TOKEN_SET_URI),
+ CREATE_BEACONCHAIN_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.CREATE_BEACONCHAIN_VALIDATOR),
+ EDIT_BEACONCHAIN_VALIDATOR(com.binance.dex.api.client.domain.broadcast.TxType.EDIT_BEACONCHAIN_VALIDATOR),
+ BEACONCHAIN_DELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.BEACONCHAIN_DELEGATE),
+ BEACONCHAIN_REDELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.BEACONCHAIN_REDELEGATE),
+ BEACONCHAIN_UNDELEGATE(com.binance.dex.api.client.domain.broadcast.TxType.BEACONCHAIN_UNDELEGATE),
+ UNJAIL(com.binance.dex.api.client.domain.broadcast.TxType.UNJAIL),
+ CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR(com.binance.dex.api.client.domain.broadcast.TxType.CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR),
+ EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR(com.binance.dex.api.client.domain.broadcast.TxType.EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR),
+ SIDECHAIN_STAKE_MIGRATION(com.binance.dex.api.client.domain.broadcast.TxType.SIDECHAIN_STAKE_MIGRATION);
+
+ private com.binance.dex.api.client.domain.broadcast.TxType code;
+
+ TxType(com.binance.dex.api.client.domain.broadcast.TxType code) {
+ this.code = code;
+ }
+
+ private static final Map nameTypeMap = new HashMap<>();
+
+ static {
+ for (TxType txType : TxType.values()) {
+ nameTypeMap.put(txType.name().toUpperCase(), txType.code);
+ }
+ }
+
+ public static com.binance.dex.api.client.domain.broadcast.TxType getTypeByName(String name) {
+ if (name == null) {
+ return null;
+ }
+ return nameTypeMap.get(name.toUpperCase());
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainDelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainDelegateConverter.java
new file mode 100644
index 00000000..6fa25f8f
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainDelegateConverter.java
@@ -0,0 +1,39 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.beaconchain.BeaconChainDelegate;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FBeaconChainDelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BEACONCHAIN_DELEGATE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+
+ map.put("delegatorAddress", map.get("delegatorAddr"));
+ map.put("validatorAddress", map.get("validatorAddr"));
+ map.remove("delegatorAddr");
+ map.remove("validatorAddr");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainRedelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainRedelegateConverter.java
new file mode 100644
index 00000000..19441d05
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainRedelegateConverter.java
@@ -0,0 +1,32 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.beaconchain.BeaconChainRedelegate;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+public class FBeaconChainRedelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BEACONCHAIN_REDELEGATE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainUndelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainUndelegateConverter.java
new file mode 100644
index 00000000..79b49b47
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBeaconChainUndelegateConverter.java
@@ -0,0 +1,39 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.beaconchain.BeaconChainUndelegate;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FBeaconChainUndelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BEACONCHAIN_UNDELEGATE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+
+ map.put("delegatorAddress", map.get("delegatorAddr"));
+ map.put("validatorAddress", map.get("validatorAddr"));
+ map.remove("delegatorAddr");
+ map.remove("validatorAddr");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBscSubmitEvidenceConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBscSubmitEvidenceConverter.java
new file mode 100644
index 00000000..386f4e68
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBscSubmitEvidenceConverter.java
@@ -0,0 +1,27 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.slash.BscSubmitEvidence;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FBscSubmitEvidenceConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BSC_SUBMIT_EVIDENCE;
+ }
+
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ map.put("submitter", transactionV2.getFromAddr());
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBurnConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBurnConverter.java
new file mode 100644
index 00000000..8a459009
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FBurnConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Burn;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FBurnConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BURN;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCancelOrderConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCancelOrderConverter.java
new file mode 100644
index 00000000..24181720
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCancelOrderConverter.java
@@ -0,0 +1,39 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.CancelOrder;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class FCancelOrderConverter extends TransactionConverter {
+
+ public TxType getType() {
+ return TxType.CANCEL_ORDER;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ String symbol = (String) map.get("symbol");
+ String orderId = (String) map.get("orderId");
+
+ Map newMap = new HashMap<>();
+ newMap.put("orderData", CO.builder().symbol(symbol).orderId(orderId).build());
+ transaction.setData(JsonUtil.toJson(newMap));
+ }
+}
+
+@Data
+@Builder
+class CO {
+ String symbol;
+ String orderId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FClaimHtlConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FClaimHtlConverter.java
new file mode 100644
index 00000000..d0efbd76
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FClaimHtlConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.ClaimHashTimerLock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FClaimHtlConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CLAIM_HTL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateBeaconChainValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateBeaconChainValidatorConverter.java
new file mode 100644
index 00000000..2d67d231
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateBeaconChainValidatorConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.beaconchain.CreateBeaconChainValidator;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FCreateBeaconChainValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CREATE_BEACONCHAIN_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorConverter.java
new file mode 100644
index 00000000..b77a5fea
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.CreateSideChainValidator;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FCreateSideChainValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CREATE_SIDECHAIN_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorWithVoteAddrConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorWithVoteAddrConverter.java
new file mode 100644
index 00000000..666e0e13
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateSideChainValidatorWithVoteAddrConverter.java
@@ -0,0 +1,23 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.CreateSideChainValidator;
+import com.binance.dex.api.client.domain.stake.sidechain.CreateSideChainValidatorWithVoteAddr;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FCreateSideChainValidatorWithVoteAddrConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateValidatorConverter.java
new file mode 100644
index 00000000..298ec37b
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCreateValidatorConverter.java
@@ -0,0 +1,23 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.CreateValidator;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FCreateValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CREATE_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ transaction.setData(transactionV2.getData());
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossBindConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossBindConverter.java
new file mode 100644
index 00000000..f8ebaf6e
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossBindConverter.java
@@ -0,0 +1,33 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.bridge.Bind;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FCrossBindConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.BIND;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ map.put("symbol", transactionV2.getAsset());
+ map.put("from", transactionV2.getFromAddr());
+ map.put("amount", transactionV2.getAmount());
+
+ transaction.setData(JsonUtil.toJson(map));
+
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossTransferOutConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossTransferOutConverter.java
new file mode 100644
index 00000000..6f407196
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossTransferOutConverter.java
@@ -0,0 +1,36 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.bridge.TransferOut;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FCrossTransferOutConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TRANSFER_OUT;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ map.put("from", transactionV2.getFromAddr());
+ map.put("toAddress", transactionV2.getToAddr());
+
+ Token amount = Token.builder().denom(transactionV2.getAsset()).amount(transactionV2.getAmount()).build();
+ map.put("amount", amount);
+
+ transaction.setData(JsonUtil.toJson(map));
+ }
+
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossUnBindConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossUnBindConverter.java
new file mode 100644
index 00000000..05801848
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FCrossUnBindConverter.java
@@ -0,0 +1,28 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.bridge.Unbind;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class FCrossUnBindConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.UNBIND;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map newMap = new HashMap<>();
+ newMap.put("symbol", transactionV2.getAsset());
+ newMap.put("from", transactionV2.getFromAddr());
+ transaction.setData(JsonUtil.toJson(newMap));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositConverter.java
new file mode 100644
index 00000000..95ea7edc
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositConverter.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Deposit;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FDepositConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.DEPOSIT;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositHtlConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositHtlConverter.java
new file mode 100644
index 00000000..46d1c480
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FDepositHtlConverter.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.DepositHashTimerLock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FDepositHtlConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.DEPOSIT_HTL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditBeaconChainValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditBeaconChainValidatorConverter.java
new file mode 100644
index 00000000..8be17a08
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditBeaconChainValidatorConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.beaconchain.EditBeaconChainValidator;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FEditBeaconChainValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.EDIT_BEACONCHAIN_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorConverter.java
new file mode 100644
index 00000000..8ea937ee
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.EditSideChainValidator;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FEditSideChainValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.EDIT_SIDECHAIN_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorWithVoteAddrConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorWithVoteAddrConverter.java
new file mode 100644
index 00000000..33e00996
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FEditSideChainValidatorWithVoteAddrConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.EditSideChainValidator;
+import com.binance.dex.api.client.domain.stake.sidechain.EditSideChainValidatorWithVoteAddr;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FEditSideChainValidatorWithVoteAddrConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FFreezeConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FFreezeConverter.java
new file mode 100644
index 00000000..0bd777be
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FFreezeConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TokenFreeze;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FFreezeConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.FREEZE_TOKEN;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FHtlTransferConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FHtlTransferConverter.java
new file mode 100644
index 00000000..cc8554a2
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FHtlTransferConverter.java
@@ -0,0 +1,31 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.HashTimerLockTransfer;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FHtlTransferConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.HTL_TRANSFER;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ transaction.setToAddr(transactionV2.getToAddr());
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ map.put("from", transactionV2.getFromAddr());
+ map.put("to", transactionV2.getToAddr());
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FIssueTokenConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FIssueTokenConverter.java
new file mode 100644
index 00000000..34636cf4
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FIssueTokenConverter.java
@@ -0,0 +1,28 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Issue;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FIssueTokenConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.ISSUE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long totalSupply = Long.valueOf(map.get("totalSupply").toString());
+ transaction.setValue(NumberUtil.longToBigDecimalString(totalSupply));
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FListingConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FListingConverter.java
new file mode 100644
index 00000000..e0472eb3
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FListingConverter.java
@@ -0,0 +1,31 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Listing;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+public class FListingConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.LISTING;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long initPrice = ((Number) map.get("initPrice")).longValue();
+ transaction.setValue(NumberUtil.longToBigDecimalString(initPrice));
+
+ String asset = (String) map.get("baseAsset");
+ transaction.setTxAsset(asset);
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenIssueConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenIssueConverter.java
new file mode 100644
index 00000000..0616b768
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenIssueConverter.java
@@ -0,0 +1,29 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.MiniTokenIssue;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FMiniTokenIssueConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.MINI_TOKEN_ISSUE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long totalSupply = Long.valueOf(map.get("totalSupply").toString());
+ transaction.setValue(NumberUtil.longToBigDecimalString(totalSupply));
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenListingConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenListingConverter.java
new file mode 100644
index 00000000..478764b1
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenListingConverter.java
@@ -0,0 +1,32 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.MiniTokenListing;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FMiniTokenListingConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.MINI_TOKEN_LIST;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long initPrice = ((Number) map.get("initPrice")).longValue();
+ transaction.setValue(NumberUtil.longToBigDecimalString(initPrice));
+
+ String asset = (String) map.get("baseAsset");
+ transaction.setTxAsset(asset);
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenSetURIConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenSetURIConverter.java
new file mode 100644
index 00000000..0c0d8f45
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMiniTokenSetURIConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.MiniTokenSetURI;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FMiniTokenSetURIConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.MINI_TOKEN_SET_URI;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMintConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMintConverter.java
new file mode 100644
index 00000000..5ac611e7
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FMintConverter.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Mint;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FMintConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.MINT;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ transaction.setData(null);
+ }
+}
+
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FNewOrderConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FNewOrderConverter.java
new file mode 100644
index 00000000..276a438d
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FNewOrderConverter.java
@@ -0,0 +1,61 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.NewOrder;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+import lombok.Builder;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class FNewOrderConverter extends TransactionConverter {
+
+ public TxType getType() {
+ return TxType.NEW_ORDER;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ String symbol = (String) map.get("symbol");
+ String orderId = (String) map.get("orderId");
+ String orderType = (String) map.get("orderType");
+ String side = (String) map.get("side");
+ String timeInForce = (String) map.get("timeInForce");
+ String price = (String) map.get("price");
+ String quantity = (String) map.get("quantity");
+
+ transaction.setOrderId(orderId);
+ transaction.setTxAsset(symbol.split("_")[0]);
+
+ Map newMap = new HashMap<>();
+ newMap.put("orderData", NO.builder().symbol(symbol).orderId(orderId)
+ .orderType(orderType).side(side).timeInForce(timeInForce)
+ .price(NumberUtil.longToBigDecimal(Long.parseLong(price)).stripTrailingZeros().toPlainString())
+ .quantity(NumberUtil.longToBigDecimal(Long.parseLong(quantity)).stripTrailingZeros().toPlainString())
+ .build());
+ transaction.setData(JsonUtil.toJson(newMap));
+
+ BigDecimal value = NumberUtil.longToBigDecimal(Long.parseLong(price)).multiply(NumberUtil.longToBigDecimal(Long.parseLong(quantity)).setScale(8, BigDecimal.ROUND_HALF_UP));
+ transaction.setValue(NumberUtil.decimalFormat(value));
+ }
+}
+
+@Data
+@Builder
+class NO {
+ String symbol;
+ String orderId;
+ String orderType;
+ String side;
+ String price;
+ String quantity;
+ String timeInForce;
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FOracleClaimConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FOracleClaimConverter.java
new file mode 100644
index 00000000..210000f5
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FOracleClaimConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.oracle.ClaimMsg;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FOracleClaimConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.CLAIM;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setData(transactionV2.getData());
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FProposalConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FProposalConverter.java
new file mode 100644
index 00000000..9e77a65e
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FProposalConverter.java
@@ -0,0 +1,33 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.SubmitProposal;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FProposalConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SUBMIT_PROPOSAL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+
+ map.remove("proposalId");
+ map.remove("baseAssetSymbol");
+ map.remove("quoteAssetSymbol");
+ transaction.setData(JsonUtil.toJson(map));
+
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRefundHtlConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRefundHtlConverter.java
new file mode 100644
index 00000000..9470fb0c
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRefundHtlConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.RefundHashTimerLock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FRefundHtlConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.REFUND_HTL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRemoveValidatorConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRemoveValidatorConverter.java
new file mode 100644
index 00000000..04548ca3
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FRemoveValidatorConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.RemoveValidator;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FRemoveValidatorConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.REMOVE_VALIDATOR;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSetAccountFlagsConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSetAccountFlagsConverter.java
new file mode 100644
index 00000000..83f22e9e
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSetAccountFlagsConverter.java
@@ -0,0 +1,31 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.SetAccountFlag;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class FSetAccountFlagsConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SetAccountFlag;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long flags = ((Number) map.get("flags")).longValue();
+
+ Map newMap = new HashMap<>();
+ newMap.put("fromAddr", transactionV2.getFromAddr());
+ newMap.put("flags", flags);
+ transaction.setData(JsonUtil.toJson(newMap));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainDelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainDelegateConverter.java
new file mode 100644
index 00000000..2ecbb4b8
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainDelegateConverter.java
@@ -0,0 +1,39 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.SideChainDelegate;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FSideChainDelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDECHAIN_DELEGATE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+
+ map.put("delegatorAddress", map.get("delegatorAddr"));
+ map.put("validatorAddress", map.get("validatorAddr"));
+ map.remove("delegatorAddr");
+ map.remove("validatorAddr");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainRedelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainRedelegateConverter.java
new file mode 100644
index 00000000..1f193ae7
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainRedelegateConverter.java
@@ -0,0 +1,32 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.SideChainRedelegate;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+public class FSideChainRedelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDECHAIN_REDELEGATE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainStakeMigrationConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainStakeMigrationConverter.java
new file mode 100644
index 00000000..733bfb02
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainStakeMigrationConverter.java
@@ -0,0 +1,33 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.SideChainRedelegate;
+import com.binance.dex.api.client.domain.stake.sidechain.SideChainStakeMigration;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+public class FSideChainStakeMigrationConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDECHAIN_STAKE_MIGRATION;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUnJailConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUnJailConverter.java
new file mode 100644
index 00000000..5f90e12d
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUnJailConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.slash.SideChainUnJail;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FSideChainUnJailConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDECHAIN_UNJAIL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUndelegateConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUndelegateConverter.java
new file mode 100644
index 00000000..9c8b0092
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideChainUndelegateConverter.java
@@ -0,0 +1,39 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.stake.sidechain.SideChainUnBond;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.Token;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FSideChainUndelegateConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDECHAIN_UNBOND;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ if (transaction.getValue() == null || transaction.getTxAsset() == null) {
+ Token token = getToken(map, "amount");
+ transaction.setTxAsset(token.getDenom());
+ transaction.setValue(NumberUtil.longToBigDecimalString(token.getAmount()));
+ }
+
+ map.put("delegatorAddress", map.get("delegatorAddr"));
+ map.put("validatorAddress", map.get("validatorAddr"));
+ map.remove("delegatorAddr");
+ map.remove("validatorAddr");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideDepositConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideDepositConverter.java
new file mode 100644
index 00000000..908d2c6a
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideDepositConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.SideDeposit;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+public class FSideDepositConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDE_DEPOSIT;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideProposalConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideProposalConverter.java
new file mode 100644
index 00000000..a7154717
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideProposalConverter.java
@@ -0,0 +1,32 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.SideSubmitProposal;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FSideProposalConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDE_SUBMIT_PROPOSAL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+
+ map.remove("proposalId");
+ map.remove("baseAssetSymbol");
+ map.remove("quoteAssetSymbol");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideVoteConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideVoteConverter.java
new file mode 100644
index 00000000..7161fa44
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FSideVoteConverter.java
@@ -0,0 +1,23 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.SideVote;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+import lombok.extern.slf4j.Slf4j;
+
+
+@Slf4j
+public class FSideVoteConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.SIDE_VOTE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeLockConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeLockConverter.java
new file mode 100644
index 00000000..0335615f
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeLockConverter.java
@@ -0,0 +1,30 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TimeLock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FTimeLockConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TimeLock;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+
+ map.remove("amount");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeReLockConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeReLockConverter.java
new file mode 100644
index 00000000..8476fc02
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeReLockConverter.java
@@ -0,0 +1,30 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TimeRelock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FTimeReLockConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TimeRelock;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+
+ map.remove("amount");
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeUnlockConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeUnlockConverter.java
new file mode 100644
index 00000000..3734fffd
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTimeUnlockConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TimeUnlock;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FTimeUnlockConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TimeUnlock;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTinyTokenIssueConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTinyTokenIssueConverter.java
new file mode 100644
index 00000000..adc26909
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTinyTokenIssueConverter.java
@@ -0,0 +1,29 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TinyTokenIssue;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.Map;
+
+
+public class FTinyTokenIssueConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TINY_TOKEN_ISSUE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = JsonUtil.fromJson(transactionV2.getData(), Map.class);
+ Long totalSupply = Long.valueOf(map.get("totalSupply").toString());
+ transaction.setValue(NumberUtil.longToBigDecimalString(totalSupply));
+
+ transaction.setData(null);
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferConverter.java
new file mode 100644
index 00000000..cbafc41d
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferConverter.java
@@ -0,0 +1,24 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.Transfer;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FTransferConverter extends TransactionConverter {
+
+ public TxType getType() {
+ return TxType.TRANSFER;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ if (transactionV2.getAmount() != null) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+ transaction.setToAddr(transactionV2.getToAddr());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferOwnershipConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferOwnershipConverter.java
new file mode 100644
index 00000000..3655a196
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FTransferOwnershipConverter.java
@@ -0,0 +1,31 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.TransferTokenOwnership;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.JsonUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class FTransferOwnershipConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.TRANSFER_TOKEN_OWNERSHIP;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ Map map = new HashMap<>();
+ map.put("from", transactionV2.getFromAddr());
+ map.put("newOwner", transactionV2.getToAddr());
+ map.put("symbol", transactionV2.getAsset());
+
+ transaction.setData(JsonUtil.toJson(map));
+ }
+}
+
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnJailConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnJailConverter.java
new file mode 100644
index 00000000..334a5b5e
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnJailConverter.java
@@ -0,0 +1,21 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.slash.UnJail;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FUnJailConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.UNJAIL;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnfreezeConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnfreezeConverter.java
new file mode 100644
index 00000000..8afa79d3
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FUnfreezeConverter.java
@@ -0,0 +1,22 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TokenUnfreeze;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.utils.converter.NumberUtil;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+
+
+public class FUnfreezeConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.UNFREEZE_TOKEN;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ transaction.setValue(NumberUtil.longToBigDecimalString(transactionV2.getAmount()));
+ }
+}
diff --git a/src/main/java/com/binance/dex/api/client/utils/converter/impl/FVoteConverter.java b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FVoteConverter.java
new file mode 100644
index 00000000..4d48f99c
--- /dev/null
+++ b/src/main/java/com/binance/dex/api/client/utils/converter/impl/FVoteConverter.java
@@ -0,0 +1,23 @@
+package com.binance.dex.api.client.utils.converter.impl;
+
+import com.binance.dex.api.client.domain.Transaction;
+import com.binance.dex.api.client.domain.TransactionV2;
+import com.binance.dex.api.client.domain.broadcast.TxType;
+import com.binance.dex.api.client.domain.broadcast.Vote;
+import com.binance.dex.api.client.utils.converter.TransactionConverter;
+import lombok.extern.slf4j.Slf4j;
+
+
+@Slf4j
+public class FVoteConverter extends TransactionConverter {
+
+ @Override
+ public TxType getType() {
+ return TxType.VOTE;
+ }
+
+ @Override
+ public void doConvert(TransactionV2 transactionV2, Transaction transaction) {
+ return;
+ }
+}
diff --git a/src/main/proto/dex.proto b/src/main/proto/dex.proto
index 6e5fe015..99de24fc 100644
--- a/src/main/proto/dex.proto
+++ b/src/main/proto/dex.proto
@@ -469,4 +469,9 @@ message TransferTokenOwnershipMsg {
bytes from = 1;
string symbol = 2;
bytes new_owner = 3;
+}
+
+message UnJailMsg {
+ // 543AEC70
+ bytes address = 1;
}
\ No newline at end of file
diff --git a/src/test/java/com/binance/dex/api/client/encoding/AminoTest.java b/src/test/java/com/binance/dex/api/client/encoding/AminoTest.java
index 8d913920..c3432860 100644
--- a/src/test/java/com/binance/dex/api/client/encoding/AminoTest.java
+++ b/src/test/java/com/binance/dex/api/client/encoding/AminoTest.java
@@ -8,8 +8,10 @@
import com.binance.dex.api.client.domain.stake.Description;
import com.binance.dex.api.client.domain.stake.sidechain.*;
import com.binance.dex.api.client.encoding.amino.Amino;
+import com.binance.dex.api.client.encoding.amino.types.PubKeyEd25519;
import com.binance.dex.api.client.encoding.message.MessageType;
import com.binance.dex.api.client.encoding.message.Token;
+import com.binance.dex.api.client.encoding.message.beaconchain.transaction.EditBeaconChainValidatorMessage;
import com.binance.dex.api.client.encoding.message.bridge.*;
import com.binance.dex.api.client.encoding.message.common.*;
import com.binance.dex.api.client.encoding.message.sidechain.transaction.*;
@@ -51,6 +53,16 @@ public void testClaim() throws IOException {
Assert.assertNotNull(transaction.getRealTx());
}
+ public static byte[] hexStringToByteArray(String s) {
+ int len = s.length();
+ byte[] data = new byte[len / 2];
+ for (int i = 0; i < len; i += 2) {
+ data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ + Character.digit(s.charAt(i + 1), 16));
+ }
+ return data;
+ }
+
@Test
public void testTransferOut() throws IOException {
TransferOutMsgMessage message = new TransferOutMsgMessage();
@@ -230,10 +242,87 @@ public void testDecodeSideChainUnBond() throws IOException {
Assert.assertNotNull(tx.getRealTx());
}
- EditSideChainValidatorMessage convert(EditSideChainValidator editSideChainValidator){
+ @Test
+ public void testCreateSideChainValidatorWithVoteAddr() throws IOException {
+ CreateSideChainValidatorWithVoteAddr createSideChainValidator = new CreateSideChainValidatorWithVoteAddr();
+
+ //create and set description
+ Description validatorDescription = new Description();
+ validatorDescription.setMoniker("custom-moniker");
+ validatorDescription.setIdentity("ide");
+ validatorDescription.setWebsite("https://www.website.com");
+ validatorDescription.setDetails("This is a side-chain validator");
+
+ createSideChainValidator.setDescription(validatorDescription);
+
+ //create and set commission
+ Commission commission = new Commission();
+ commission.setRate(5L);
+ commission.setMaxRate(100L);
+ commission.setMaxChangeRate(5L);
+
+ createSideChainValidator.setCommission(commission);
+
+ //set delegator address, here use self address
+ createSideChainValidator.setDelegatorAddr(wallet.getAddress());
+
+ createSideChainValidator.setValidatorAddr(wallet.getAddress());
+
+ //set delegation token, here use 1000000 BNB
+ Token delegationToken = new Token();
+ delegationToken.setDenom("BNB");
+ delegationToken.setAmount(10000000000L);
+ createSideChainValidator.setDelegation(delegationToken);
+
+ //set side-chain id
+ createSideChainValidator.setSideChainId("bsc");
+
+ //set side-chain validator cons address
+ createSideChainValidator.setSideConsAddr("0xd1B22dCC24C55f4d728E7aaA5c9b5a22e1512C08");
+
+ //set side-chain validator fee address
+ createSideChainValidator.setSideFeeAddr("0x9fB29AAc15b9A4B7F17c3385939b007540f4d791");
+
+ createSideChainValidator.setSideVoteAddr("0x11FfBAC7fA17f5c9084a15C8f0f15dAe845A5712");
+
+ byte[] msg = amino.encode(convert(createSideChainValidator), MessageType.CreateSideChainValidatorWithVoteAddr.getTypePrefixBytes(), false);
+
+ Transaction tx = transactionConverter.convert(msg);
+ Assert.assertNotNull(tx.getRealTx());
+ }
+
+ @Test
+ public void testDecodeEditSideChainValidatorWithVoteAddr() throws IOException {
+ EditSideChainValidatorWithVoteAddr editSideChainValidator = new EditSideChainValidatorWithVoteAddr();
+
+ //set new description if needed
+ Description description = new Description();
+ description.setMoniker("new Moniker");
+ editSideChainValidator.setDescription(description);
+
+ editSideChainValidator.setValidatorAddress(wallet.getAddress());
+
+ //set new rate if needed
+ editSideChainValidator.setCommissionRate(1L);
+
+ editSideChainValidator.setSideChainId("bsc");
+
+ //set new fee address if needed
+ editSideChainValidator.setSideFeeAddr("0xd1B22dCC24C55f4d728E7aaA5c9b5a22e1512C08");
+ editSideChainValidator.setSideConsAddr("0xd1B22dCC24C55f4d728E7aaA5c9b5a22e1512C99");
+ editSideChainValidator.setSideVoteAddr("0xa96c45e0043e98a4271d84265a0a5177795c61aa188c42a94ecc4b2e54073613a46f49ff1c03e29d4a744fd56589e3a0");
+
+ byte[] msg = amino.encode(convert(editSideChainValidator), MessageType.EditSideChainValidatorWithVoteAddr.getTypePrefixBytes(), false);
+
+ Transaction tx = transactionConverter.convert(msg);
+ Assert.assertNotNull(tx.getRealTx());
+ Assert.assertEquals("0xa96c45e0043e98a4271d84265a0a5177795c61aa188c42a94ecc4b2e54073613a46f49ff1c03e29d4a744fd56589e3a0", ((EditSideChainValidatorWithVoteAddr)tx.getRealTx()).getSideVoteAddr());
+ }
+
+ EditSideChainValidatorMessage convert(EditSideChainValidator editSideChainValidator) {
EditSideChainValidatorMessage message = new EditSideChainValidatorMessage();
- if (editSideChainValidator.getDescription() != null){
+ if (editSideChainValidator.getDescription() != null) {
message.setDescription(convert(editSideChainValidator.getDescription()));
}
@@ -246,20 +335,20 @@ EditSideChainValidatorMessage convert(EditSideChainValidator editSideChainValida
return message;
}
- CreateSideChainValidatorMessage convert(CreateSideChainValidator createSideChainValidator){
+ CreateSideChainValidatorMessage convert(CreateSideChainValidator createSideChainValidator) {
CreateSideChainValidatorMessage message = new CreateSideChainValidatorMessage();
- if (createSideChainValidator.getDescription() != null){
+ if (createSideChainValidator.getDescription() != null) {
message.setDescription(convert(createSideChainValidator.getDescription()));
}
- if (createSideChainValidator.getCommission() != null){
+ if (createSideChainValidator.getCommission() != null) {
message.setCommission(convert(createSideChainValidator.getCommission()));
}
message.setDelegatorAddr(Bech32AddressValue.fromBech32String(createSideChainValidator.getDelegatorAddr()));
message.setValidatorOperatorAddr(Bech32AddressValue.fromBech32String(createSideChainValidator.getValidatorAddr()));
- if (createSideChainValidator.getDelegation() != null){
+ if (createSideChainValidator.getDelegation() != null) {
message.setDelegation(convert(createSideChainValidator.getDelegation()));
}
@@ -269,7 +358,7 @@ CreateSideChainValidatorMessage convert(CreateSideChainValidator createSideChain
return message;
}
- private DescriptionValue convert(Description description){
+ private DescriptionValue convert(Description description) {
DescriptionValue value = new DescriptionValue();
value.setMoniker(description.getMoniker());
value.setDetails(description.getDetails());
@@ -278,7 +367,7 @@ private DescriptionValue convert(Description description){
return value;
}
- private CommissionMsgValue convert(Commission commission){
+ private CommissionMsgValue convert(Commission commission) {
CommissionMsgValue value = new CommissionMsgValue();
value.setRate(Dec.newInstance(commission.getRate()));
value.setMaxRate(Dec.newInstance(commission.getMaxRate()));
@@ -286,14 +375,14 @@ private CommissionMsgValue convert(Commission commission){
return value;
}
- private CoinValueStr convert(Token token){
+ private CoinValueStr convert(Token token) {
CoinValueStr value = new CoinValueStr();
value.setDenom(token.getDenom());
value.setAmount(token.getAmount());
return value;
}
- private SideChainDelegateMessage convert(SideChainDelegate sideChainDelegate){
+ private SideChainDelegateMessage convert(SideChainDelegate sideChainDelegate) {
SideChainDelegateMessage message = new SideChainDelegateMessage();
message.setDelegatorAddress(Bech32AddressValue.fromBech32String(sideChainDelegate.getDelegatorAddress()));
message.setValidatorAddress(Bech32AddressValue.fromBech32String(sideChainDelegate.getValidatorAddress()));
@@ -306,7 +395,7 @@ private SideChainDelegateMessage convert(SideChainDelegate sideChainDelegate){
return message;
}
- private SideChainRedelegateMessage convert(SideChainRedelegate redelegate){
+ private SideChainRedelegateMessage convert(SideChainRedelegate redelegate) {
SideChainRedelegateMessage message = new SideChainRedelegateMessage();
message.setDelegatorAddress(Bech32AddressValue.fromBech32String(redelegate.getDelegatorAddress()));
message.setSrcValidatorAddress(Bech32AddressValue.fromBech32String(redelegate.getSrcValidatorAddress()));
@@ -318,7 +407,7 @@ private SideChainRedelegateMessage convert(SideChainRedelegate redelegate){
return message;
}
- private SideChainUndelegateMessage convert(SideChainUnBond unBond){
+ private SideChainUndelegateMessage convert(SideChainUnBond unBond) {
SideChainUndelegateMessage message = new SideChainUndelegateMessage();
message.setDelegatorAddress(Bech32AddressValue.fromBech32String(unBond.getDelegatorAddress()));
message.setValidatorAddress(Bech32AddressValue.fromBech32String(unBond.getValidatorAddress()));
@@ -329,9 +418,51 @@ private SideChainUndelegateMessage convert(SideChainUnBond unBond){
return message;
}
- private byte[] decodeHexAddress(String address){
+ CreateSideChainValidatorWithVoteAddrMessage convert(CreateSideChainValidatorWithVoteAddr createSideChainValidator) {
+ CreateSideChainValidatorWithVoteAddrMessage message = new CreateSideChainValidatorWithVoteAddrMessage();
+
+ if (createSideChainValidator.getDescription() != null) {
+ message.setDescription(convert(createSideChainValidator.getDescription()));
+ }
+ if (createSideChainValidator.getCommission() != null) {
+ message.setCommission(convert(createSideChainValidator.getCommission()));
+ }
+
+ message.setDelegatorAddr(Bech32AddressValue.fromBech32String(createSideChainValidator.getDelegatorAddr()));
+ message.setValidatorOperatorAddr(Bech32AddressValue.fromBech32String(createSideChainValidator.getValidatorAddr()));
+
+ if (createSideChainValidator.getDelegation() != null) {
+ message.setDelegation(convert(createSideChainValidator.getDelegation()));
+ }
+
+ message.setSideChainId(createSideChainValidator.getSideChainId());
+ message.setSideConsAddr(decodeHexAddress(createSideChainValidator.getSideConsAddr()));
+ message.setSideFeeAddr(decodeHexAddress(createSideChainValidator.getSideFeeAddr()));
+ message.setSideVoteAddr(decodeHexAddress(createSideChainValidator.getSideVoteAddr()));
+ return message;
+ }
+
+ EditSideChainValidatorWithVoteAddrMessage convert(EditSideChainValidatorWithVoteAddr editSideChainValidator) {
+ EditSideChainValidatorWithVoteAddrMessage message = new EditSideChainValidatorWithVoteAddrMessage();
+
+ if (editSideChainValidator.getDescription() != null) {
+ message.setDescription(convert(editSideChainValidator.getDescription()));
+ }
+
+ message.setValidatorOperatorAddress(Bech32AddressValue.fromBech32String(editSideChainValidator.getValidatorAddress()));
+
+ message.setCommissionRate(Dec.newInstance(editSideChainValidator.getCommissionRate()));
+ message.setSideChainId(editSideChainValidator.getSideChainId());
+ message.setSideFeeAddr(decodeHexAddress(editSideChainValidator.getSideFeeAddr()));
+ message.setSideConsAddr(decodeHexAddress(editSideChainValidator.getSideConsAddr()));
+ message.setSideVoteAddr(decodeHexAddress(editSideChainValidator.getSideVoteAddr()));
+
+ return message;
+ }
+
+ private byte[] decodeHexAddress(String address) {
String addr = address;
- if (addr.startsWith("0x")){
+ if (addr.startsWith("0x")) {
addr = address.substring(2);
}
return Hex.decode(addr);
diff --git a/src/test/java/com/binance/dex/api/client/examples/BeaconChainStakingNodeExample.java b/src/test/java/com/binance/dex/api/client/examples/BeaconChainStakingNodeExample.java
new file mode 100644
index 00000000..5cf8deb2
--- /dev/null
+++ b/src/test/java/com/binance/dex/api/client/examples/BeaconChainStakingNodeExample.java
@@ -0,0 +1,443 @@
+package com.binance.dex.api.client.examples;
+
+import com.binance.dex.api.client.BinanceDexApiClientFactory;
+import com.binance.dex.api.client.BinanceDexApiNodeClient;
+import com.binance.dex.api.client.BinanceDexEnvironment;
+import com.binance.dex.api.client.Wallet;
+import com.binance.dex.api.client.domain.Infos;
+import com.binance.dex.api.client.domain.StakeValidator;
+import com.binance.dex.api.client.domain.TransactionMetadata;
+import com.binance.dex.api.client.domain.broadcast.TransactionOption;
+import com.binance.dex.api.client.domain.broadcast.Transfer;
+import com.binance.dex.api.client.domain.stake.*;
+import com.binance.dex.api.client.domain.stake.beaconchain.*;
+import com.binance.dex.api.client.encoding.Crypto;
+import com.binance.dex.api.client.encoding.message.Token;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Francis.Liu
+ **/
+public class BeaconChainStakingNodeExample {
+
+ private Logger logger = LoggerFactory.getLogger(BeaconChainStakingNodeExample.class);
+
+ private BinanceDexApiNodeClient nodeClient = null;
+
+ private BinanceDexEnvironment env;
+ private Wallet wallet;
+
+ private List getMnemonicCodeWords() {
+ String mnemonicCodeWordStr = "bottom quick strong ranch section decide pepper broken oven demand coin run jacket curious business achieve mule bamboo remain vote kid rigid bench rubber";
+ List mnemonicCodeWords = new ArrayList();
+ String[] mnemonicCodeWordStrs = mnemonicCodeWordStr.split(" ");
+ for (String mnemonicCodeWord : mnemonicCodeWordStrs) {
+ mnemonicCodeWords.add(mnemonicCodeWord);
+ }
+ return mnemonicCodeWords;
+ }
+
+ @Before
+ public void setup() {
+ env = BinanceDexEnvironment.LOCAL_NET;
+
+ nodeClient = BinanceDexApiClientFactory.newInstance().newNodeRpcClient(env.getNodeUrl()
+ , env.getHrp(), env.getValHrp());
+ try {
+ wallet = Wallet.createWalletFromMnemonicCode(this.getMnemonicCodeWords(), env);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+// @Test
+// public void testCreateSideChainValidator() throws IOException, NoSuchAlgorithmException {
+// CreateSideChainValidator createSideChainValidator = new CreateSideChainValidator();
+//
+// //create and set description
+// Description validatorDescription = new Description();
+// validatorDescription.setMoniker("rose-moniker");
+// validatorDescription.setIdentity("rose id");
+// validatorDescription.setWebsite("https://www.rose.com");
+// validatorDescription.setDetails("This is rose validator");
+//
+// createSideChainValidator.setDescription(validatorDescription);
+//
+// //create and set commission
+// Commission commission = new Commission();
+// commission.setRate(5L);
+// commission.setMaxRate(1000L);
+// commission.setMaxChangeRate(10L);
+//
+// createSideChainValidator.setCommission(commission);
+//
+// //set delegator address, here use self address
+// createSideChainValidator.setDelegatorAddr(wallet.getAddress());
+//
+// //set delegation token, here use 1000000 BNB
+// Token delegationToken = new Token();
+// delegationToken.setDenom("BNB");
+// delegationToken.setAmount(2000000000000L);
+//
+// createSideChainValidator.setDelegation(delegationToken);
+// //set side-chain id
+// createSideChainValidator.setSideChainId("bsc");
+//
+// //set side-chain validator cons address
+// createSideChainValidator.setSideConsAddr("0x9fB29AAc15b9A4B7F17c3385939b007540f4d791");
+//
+// //set side-chain validator fee address
+// createSideChainValidator.setSideFeeAddr("0xd1B22dCC24C55f4d728E7aaA5c9b5a22e1512C08");
+//
+// TransactionOption options = new TransactionOption("", 0, null);
+//
+// List transactionMetadatas = nodeClient.createSideChainValidator(createSideChainValidator, wallet, options, true);
+// Assert.assertEquals(1, transactionMetadatas.size());
+// }
+//
+// @Test
+// public void testEditSideChainValidator() throws IOException, NoSuchAlgorithmException {
+// EditSideChainValidator editSideChainValidator = new EditSideChainValidator();
+//
+// //set new description if needed
+// Description description = new Description();
+// description.setMoniker("new Moniker");
+// editSideChainValidator.setDescription(description);
+//
+// //set new rate if needed
+//// editSideChainValidator.setCommissionRate(1L);
+//
+// //set new fee address if needed
+// editSideChainValidator.setSideFeeAddr("0xd1B22dCC24C55f4d728E7aaA5c9b5a22e1512C08");
+//
+// editSideChainValidator.setSideChainId("bsc");
+//
+// List transactionMetadatas = nodeClient.editSideChainValidator(editSideChainValidator, wallet, createTransactionOptionForTest(), true);
+// Assert.assertEquals(1, transactionMetadatas.size());
+// }
+
+
+ private int pubKeyIndex = 0;
+
+ private String genPubKey() throws IOException {
+ ArrayList pubKeys = new ArrayList<>();
+ pubKeys.add("bcap1zcjduepq2equ54uaf02j98y9k5ksq2aau9ajns22gfkwgv8ut6ngx5cyteaq6jh5kf");
+ pubKeys.add("bcap1zcjduepq6hpw8zdrqdj2cd07p07pktp2lym7fkm9hn5dkwqczm3rplcupgqsq0w7ev");
+ pubKeys.add("bcap1zcjduepqcr6zgwf95lmxyj0tq6yh4dz4p3r0dkl4m0zrwj9jzgr2pmmct3qqtepuh3");
+ pubKeys.add("bcap1zcjduepqq8600wvagq3n6j3ldk223tzkw433jjwywj4wfjevx74hvtztp8tsndacz7");
+ pubKeys.add("bcap1zcjduepqhrmhu3a7f9z4v3a50z3pa39p872hgqud2t3quh2zsvx3fj0plu3qmar9mh");
+ String pubKey = pubKeys.get(pubKeyIndex);
+ pubKeyIndex = pubKeyIndex + 1;
+ return pubKey;
+ }
+
+ private Wallet genWalletWithBNB(Wallet tokenFrom) throws IOException, NoSuchAlgorithmException {
+ Wallet newWallet = Wallet.createRandomWallet(env);
+
+ String symbol = "BNB";
+ Transfer transfer = new Transfer();
+ transfer.setCoin(symbol);
+ transfer.setFromAddress(tokenFrom.getAddress());
+ transfer.setToAddress(newWallet.getAddress());
+ transfer.setAmount("150");
+
+ TransactionOption options = new TransactionOption("test", 1, null);
+ List resp = nodeClient.transfer(transfer, tokenFrom, options, true);
+ return newWallet;
+ }
+
+
+ @Test
+ public void testStaking() throws IOException, NoSuchAlgorithmException {
+ logger.info("-------------------- begin staking test -------------------");
+ Wallet bob = Wallet.createWalletFromMnemonicCode(this.getMnemonicCodeWords(), env);
+ logger.info(String.format("chainId = %s \n", bob.getChainId()));
+
+ Infos infos = nodeClient.getNodeInfo();
+ logger.info(String.format("infos = %s\n", infos));
+ logger.info(String.format("bob address %s \n", bob.getAddress()));
+
+ // create a random account
+ Wallet validator0 = this.genWalletWithBNB(bob);
+ logger.info(String.format("validator0 address %s \n", validator0.getAddress()));
+
+ // validators
+ List validators = nodeClient.getStakeValidator();
+ logger.info(String.format("validators %s \n", validators));
+ logger.info(String.format("validators length %s \n", validators.size()));
+ Assert.assertTrue("validators len should be >= 1", validators.size() >= 1);
+
+ // query validators count (including jailed)
+ long validatorCount = nodeClient.getAllValidatorsCount(true);
+ logger.info(String.format("validators count: %d \n", validatorCount));
+
+ // query validators count (excluding jailed)
+ long validatorCountWithoutJail = nodeClient.getAllValidatorsCount(false);
+ logger.info(String.format("validators count: %d \n", validatorCountWithoutJail));
+
+ Assert.assertEquals("there is no jailed validators yet", validatorCount, validatorCountWithoutJail);
+
+ // create validator
+ String consensusPubKey = genPubKey();
+ this.createBeaconChainValidator(validator0, consensusPubKey);
+ long validatorCountAfterCreate = nodeClient.getAllValidatorsCount(true);
+ logger.info(String.format("validators count: %d \n", validatorCountAfterCreate));
+ Assert.assertEquals("validators count should be +1", validatorCountAfterCreate, validatorCount + 1);
+
+ // query top validators
+ int topValidatorNum = 3;
+ List topValidators = nodeClient.getTopValidators(topValidatorNum);
+ logger.info(String.format("top validators %s \n", topValidators));
+ Assert.assertTrue("top validators should be 1", topValidators.size() == topValidatorNum);
+ Validator topValidator = topValidators.get(0);
+
+ // query validator
+ String validator0ValAddr = Crypto.getAddressFromPrivateKey(validator0.getPrivateKey(), env.getValHrp());
+ logger.info(String.format("validator addr %s \n", validator0ValAddr));
+ Validator validator = nodeClient.getValidator(validator0ValAddr);
+ logger.info(String.format("query validator: %s \n", validator));
+ Assert.assertNotNull("validator should not be nil", validator);
+ Assert.assertEquals("validator address should be equal", validator.getFeeAddr(), validator0.getAddress());
+ Assert.assertEquals("validator tokens should be 123e8", validator.getTokens(), 12300000000L);
+ Assert.assertEquals("validator description should be equal", validator.getDescription().getMoniker(), "node1");
+ Assert.assertEquals("validator rate should be equal", validator.getCommission().getRate(), 1);
+ Assert.assertEquals("validator consensusPubKey should be equal", new String(validator.getConsPubKey()), consensusPubKey);
+
+ // edit validator todo
+ String consensusPubKey2 = genPubKey();
+// this.editBeaconChainValidator(validator0, consensusPubKey2);
+
+ // check edit validator change
+// validator = nodeClient.getValidator(validator0.getAddress());
+// logger.info(String.format("query validator: %s \n", validator));
+// Assert.assertNotNull("validator should not be nil", validator);
+// Assert.assertEquals("validator address should be equal", validator.getFeeAddr(), validator0.getAddress());
+// Assert.assertEquals("validator tokens should be 123e8", validator.getTokens(), 12300000000L);
+// Assert.assertEquals("validator description should be equal", validator.getDescription().getMoniker(), "node1_v2");
+// Assert.assertEquals("validator rate should be equal", validator.getCommission().getRate(), 1);
+// Assert.assertEquals("validator consensusPubKey should be equal", new String(validator.getConsPubKey()), consensusPubKey2);
+ long tokenBeforeDelegate = validator.getTokens();
+
+ // delegate
+ Wallet delegator = this.genWalletWithBNB(bob);
+ String delegatorValAddr = Crypto.getAddressFromPrivateKey(delegator.getPrivateKey(), env.getValHrp());
+ long delegateAmount = 500000000L;
+ this.beaconChainDelegate(delegator, validator0.getAddress(), delegateAmount);
+
+ // check delegation
+ validator = nodeClient.getValidator(validator0.getAddress());
+ logger.info(String.format("query validator: %s \n", validator));
+ long tokenAfterDelegate = validator.getTokens();
+ Assert.assertEquals("delegate tokens should be equal", tokenAfterDelegate - tokenBeforeDelegate, delegateAmount);
+
+ // query delegation
+ Delegation delegationQuery = nodeClient.getDelegation(delegator.getAddress(), validator0ValAddr);
+ logger.info(String.format("query delegation: %s \n", delegationQuery));
+ Assert.assertEquals("delegation shares should be equal", delegationQuery.getDelegation().getShares(), delegateAmount);
+
+ // query delegations
+ List delegations = nodeClient.getDelegations(delegator.getAddress());
+ logger.info(String.format("query delegations: %s \n", delegations));
+
+ // check redelegate preparation
+ String topValAddr = topValidator.getOperatorAddr();
+ Validator topValidatorBeforeRedelegate = nodeClient.getValidator(topValAddr);
+ logger.info(String.format("top validator before redelegate: %s \n", topValidatorBeforeRedelegate));
+
+ // redelegate from validator0 to top validator, should success immediately
+ long redelegateAmount = 200000000L;
+ this.beaconChainRedelegate(delegator, validator0.getAddress(), topValAddr, redelegateAmount);
+ Validator topValidatorAfterRedelegate = nodeClient.getValidator(topValAddr);
+ logger.info(String.format("top validator after redelegate: %s \n", topValidatorAfterRedelegate));
+ Assert.assertEquals("redelegate tokens should be equal", topValidatorAfterRedelegate.getTokens() - topValidatorBeforeRedelegate.getTokens(), redelegateAmount);
+
+ // undelegate
+ this.beaconChainUndelegate(delegator, topValAddr, redelegateAmount);
+ Validator topValidatorAfterUndelegate = nodeClient.getValidator(topValAddr);
+ logger.info(String.format("top validator after undelegate: %s \n", topValidatorAfterUndelegate));
+ Assert.assertEquals("check undelegation token change", topValidatorAfterUndelegate.getTokens(), topValidatorBeforeRedelegate.getTokens());
+
+ // query pool
+ Pool pool = nodeClient.getPool();
+ logger.info(String.format("pool: %s \n", pool));
+
+ // query unbonding delegation
+ UnBondingDelegation unbondingDelegation = nodeClient.getUnBondingDelegation(delegator.getAddress(), topValAddr);
+ logger.info(String.format("query unbonding delegation: %s \n", unbondingDelegation));
+
+ // query unbonding delegations
+ List unbondingDelegations = nodeClient.getUnBondingDelegations(delegator.getAddress());
+ logger.info(String.format("query unbonding delegations: %s \n", unbondingDelegations));
+
+ // query unbonding delegations by validator
+ List unbondingDelegationsByValidator = nodeClient.getUnBondingDelegationsByValidator(topValAddr);
+ logger.info(String.format("query unbonding delegations by validator: %s \n", unbondingDelegationsByValidator));
+
+ // delegate to top validator and then redelegate
+ Wallet delegator0 = genWalletWithBNB(bob);
+ this.beaconChainDelegate(delegator0, topValAddr, delegateAmount);
+ logger.info(String.format("dest validator: %s \n", topValAddr));
+ logger.info(String.format("validator0 val address: %s \n", validator0.getAddress()));
+ logger.info(String.format("delegator address: %s \n", delegator0.getAddress()));
+
+ this.beaconChainRedelegate(delegator0, topValAddr, validator0.getAddress(), delegateAmount);
+
+ // query redelegation
+ Redelegation redelegation = nodeClient.getRedelegation(delegator0.getAddress(), topValAddr, validator0ValAddr);
+ logger.info(String.format("query redelegation: %s \n", redelegation));
+ Assert.assertNotNull("redelegation should not be nil", redelegation);
+
+ // query redelegations
+ List redelegations = nodeClient.getRedelegations(delegator0.getAddress());
+ logger.info(String.format("query redelegations: %s \n", redelegations));
+ Assert.assertTrue("redelegations should not be empty", redelegations.size() > 0);
+
+ // query redelegations by source validator
+ List redelegationsByValidator = nodeClient.getRedelegationsByValidator(topValAddr);
+ logger.info(String.format("query redelegations by validator: %s \n", redelegationsByValidator));
+ Assert.assertTrue("redelegations by validator should not be empty", redelegationsByValidator.size() > 0);
+
+
+ logger.info("-------------------- end staking test -------------------");
+ }
+
+
+ public void createBeaconChainValidator(Wallet wallet, String pubKey) throws IOException, NoSuchAlgorithmException {
+ CreateBeaconChainValidator createBeaconChainValidator = new CreateBeaconChainValidator();
+
+ //create and set description
+ Description validatorDescription = new Description();
+ validatorDescription.setMoniker("node1");
+ validatorDescription.setIdentity("rose id");
+ validatorDescription.setWebsite("https://www.rose.com");
+ validatorDescription.setDetails("This is rose validator");
+
+ createBeaconChainValidator.setDescription(validatorDescription);
+
+ //create and set commission
+ Commission commission = new Commission();
+ commission.setRate(1);
+ commission.setMaxRate(1);
+ commission.setMaxChangeRate(1);
+
+ createBeaconChainValidator.setCommission(commission);
+
+ //set delegator address, here use self address
+ createBeaconChainValidator.setDelegatorAddr(wallet.getAddress());
+
+ //set delegation token, here use 1000000 BNB
+ Token delegationToken = new Token();
+ delegationToken.setDenom("BNB");
+ delegationToken.setAmount(12300000000L);
+ createBeaconChainValidator.setDelegation(delegationToken);
+
+
+ createBeaconChainValidator.setPubKey(pubKey);
+
+ TransactionOption options = new TransactionOption("", 0, null);
+
+ List transactionMetadatas = nodeClient.createValidator(createBeaconChainValidator, wallet, options, true);
+ logger.info(String.format("create validator res %s \n", transactionMetadatas));
+ Assert.assertEquals(1, transactionMetadatas.size());
+ Assert.assertEquals(0, transactionMetadatas.get(0).getCode());
+ }
+
+
+ public void editBeaconChainValidator(Wallet wallet, String pubKey) throws IOException, NoSuchAlgorithmException {
+ EditBeaconChainValidator editBeaconChainValidator = new EditBeaconChainValidator();
+
+ //set new description if needed
+ Description validatorDescription = new Description();
+ validatorDescription.setMoniker("node1_v2");
+
+ editBeaconChainValidator.setDescription(validatorDescription);
+
+// editBeaconChainValidator.setCommissionRate(1L);
+
+ editBeaconChainValidator.setPubKey(pubKey);
+
+ List transactionMetadatas = nodeClient.editValidator(editBeaconChainValidator, wallet, createTransactionOptionForTest(), true);
+ logger.info(String.format("edit validator res %s \n", transactionMetadatas));
+ Assert.assertEquals(1, transactionMetadatas.size());
+ Assert.assertEquals(0, transactionMetadatas.get(0).getCode());
+ }
+
+ public void beaconChainDelegate(Wallet wallet, String validatorAddress, Long amount) throws IOException, NoSuchAlgorithmException {
+ BeaconChainDelegate beaconChainDelegate = new BeaconChainDelegate();
+
+ //set delegate token
+ Token delegation = new Token("BNB", amount);
+ beaconChainDelegate.setDelegation(delegation);
+
+ //set delegator address, here is self
+ beaconChainDelegate.setDelegatorAddress(wallet.getAddress());
+
+ //set validator address
+ beaconChainDelegate.setValidatorAddress(validatorAddress);
+
+
+ List transactionMetadatas = nodeClient.delegate(beaconChainDelegate, wallet, createTransactionOptionForTest(), true);
+ logger.info(String.format("delegate validator res %s \n", transactionMetadatas));
+ Assert.assertEquals(1, transactionMetadatas.size());
+ Assert.assertEquals(0, transactionMetadatas.get(0).getCode());
+ }
+
+ public void beaconChainRedelegate(Wallet wallet, String srcValidatorAddress, String dstValidatorAddress, Long amount) throws IOException, NoSuchAlgorithmException {
+ BeaconChainRedelegate redelegate = new BeaconChainRedelegate();
+
+ //set redelegate amount
+ redelegate.setAmount(new Token("bnb".toUpperCase(), amount));
+
+ //set delegator address
+ redelegate.setDelegatorAddress(wallet.getAddress());
+
+ //set source validator address
+ redelegate.setSrcValidatorAddress(srcValidatorAddress);
+
+ //set destination validator address
+ redelegate.setDstValidatorAddress(dstValidatorAddress);
+
+ List transactionMetadatas = nodeClient.redelegate(redelegate, wallet, createTransactionOptionForTest(), true);
+ logger.info(String.format("redelegate res %s \n", transactionMetadatas));
+ Assert.assertEquals(1, transactionMetadatas.size());
+ Assert.assertEquals(0, transactionMetadatas.get(0).getCode());
+ }
+
+ public void beaconChainUndelegate(Wallet wallet, String validatorAddress, Long amount) throws IOException, NoSuchAlgorithmException {
+ BeaconChainUndelegate beaconChainUndelegate = new BeaconChainUndelegate();
+
+ //set unbond amount
+ beaconChainUndelegate.setAmount(new Token("BNB", amount));
+
+ //set delegator address
+ beaconChainUndelegate.setDelegatorAddress(wallet.getAddress());
+
+ //set validator address
+ beaconChainUndelegate.setValidatorAddress(validatorAddress);
+
+
+ List transactionMetadatas = nodeClient.undelegate(beaconChainUndelegate, wallet, createTransactionOptionForTest(), true);
+ logger.info(String.format("undelegate res %s \n", transactionMetadatas));
+ Assert.assertEquals(1, transactionMetadatas.size());
+ Assert.assertEquals(0, transactionMetadatas.get(0).getCode());
+ }
+
+ /**
+ * Create a transaction option for test
+ *
+ * @return TransactionOption
+ */
+ private TransactionOption createTransactionOptionForTest() {
+ return new TransactionOption("", 0, null);
+ }
+
+}
diff --git a/src/test/java/com/binance/dex/api/client/examples/NodeClientExample.java b/src/test/java/com/binance/dex/api/client/examples/NodeClientExample.java
index f6a41573..ad1440fc 100644
--- a/src/test/java/com/binance/dex/api/client/examples/NodeClientExample.java
+++ b/src/test/java/com/binance/dex/api/client/examples/NodeClientExample.java
@@ -1,6 +1,5 @@
package com.binance.dex.api.client.examples;
-
import com.binance.dex.api.client.BinanceDexApiClientFactory;
import com.binance.dex.api.client.BinanceDexApiNodeClient;
import com.binance.dex.api.client.BinanceDexEnvironment;
@@ -28,7 +27,7 @@ public class NodeClientExample {
@Before
public void setup() {
- binanceDexNodeApi = BinanceDexApiClientFactory.newInstance().newNodeRpcClient(BinanceDexEnvironment.TEST_NET.getNodeUrl(),BinanceDexEnvironment.TEST_NET.getHrp(), BinanceDexEnvironment.TEST_NET.getValHrp());
+ binanceDexNodeApi = BinanceDexApiClientFactory.newInstance().newNodeRpcClient(BinanceDexEnvironment.PROD.getNodeUrl(), BinanceDexEnvironment.PROD.getHrp(), BinanceDexEnvironment.PROD.getValHrp());
}
@Test
@@ -39,7 +38,7 @@ public void testAccount() {
}
@Test
- public void testCommittedAccount(){
+ public void testCommittedAccount() {
String address = "tbnb16hywxpvvkaz6cecjz89mf2w0da3vfeg6z6yky2";
Account account = binanceDexNodeApi.getCommittedAccount(address);
Assert.assertEquals(address, account.getAddress());
@@ -253,17 +252,17 @@ public void testGetBlockMetaByHash() {
}
@Test
- public void testGetTokenInfoBySymbol(){
+ public void testGetTokenInfoBySymbol() {
Token token = binanceDexNodeApi.getTokenInfoBySymbol("BNB");
Assert.assertNotNull(token);
- Assert.assertEquals("BNB",token.getSymbol());
+ Assert.assertEquals("BNB", token.getSymbol());
}
@Test
- public void testGetMiniTokenInfoBySymbol(){
+ public void testGetMiniTokenInfoBySymbol() {
MiniToken token = binanceDexNodeApi.getMiniTokenInfoBySymbol("TTT-873M");
Assert.assertNotNull(token);
- Assert.assertEquals("TTT-873M",token.getSymbol());
+ Assert.assertEquals("TTT-873M", token.getSymbol());
}
@Test
@@ -281,14 +280,28 @@ public void testStakeValidator() {
}
@Test
- public void testGetProposalById(){
+ public void testGetProposalById() {
Proposal proposal = binanceDexNodeApi.getProposalById("1");
- Assert.assertEquals("1",proposal.getValue().getProposalId());
+ Assert.assertEquals("1", proposal.getValue().getProposalId());
}
@Test
- public void testGetSideProposalById(){
+ public void testGetSideProposalById() {
Proposal proposal = binanceDexNodeApi.getSideProposalById("4", "rialto");
- Assert.assertEquals("4",proposal.getValue().getProposalId());
+ Assert.assertEquals("4", proposal.getValue().getProposalId());
+ }
+
+ @Test
+ public void testCreateSidechainValidatorWithVoteAddr() {
+ Transaction transaction = binanceDexNodeApi.getTransaction("7A6A818048DBE4330BC72DD169F684F2E51E8780185A140E1F1B0AF5414EA48A");
+ Assert.assertNotNull(transaction);
+ Assert.assertEquals(transaction.getTxType(), TxType.CREATE_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR);
+ }
+
+ @Test
+ public void testEditSidechainValidatorWithVoteAddr() {
+ Transaction transaction = binanceDexNodeApi.getTransaction("30A5699E193929FB04F1D6C151303ABAA4E9D51CC1F718A9E8BD4E086DFDE305");
+ Assert.assertNotNull(transaction);
+ Assert.assertEquals(transaction.getTxType(), TxType.EDIT_SIDECHAIN_VALIDATOR_WITH_VOTE_ADDR);
}
}
diff --git a/src/test/java/com/binance/dex/api/client/examples/SideChainStakingNodeExample.java b/src/test/java/com/binance/dex/api/client/examples/SideChainStakingNodeExample.java
index d9b924a4..21d28720 100644
--- a/src/test/java/com/binance/dex/api/client/examples/SideChainStakingNodeExample.java
+++ b/src/test/java/com/binance/dex/api/client/examples/SideChainStakingNodeExample.java
@@ -9,6 +9,10 @@
import com.binance.dex.api.client.domain.stake.Commission;
import com.binance.dex.api.client.domain.stake.Description;
import com.binance.dex.api.client.domain.stake.Pool;
+import com.binance.dex.api.client.domain.stake.Delegation;
+import com.binance.dex.api.client.domain.stake.Redelegation;
+import com.binance.dex.api.client.domain.stake.UnBondingDelegation;
+import com.binance.dex.api.client.domain.stake.Validator;
import com.binance.dex.api.client.domain.stake.sidechain.*;
import com.binance.dex.api.client.encoding.message.*;
import com.binance.dex.api.client.encoding.message.sidechain.SideChainIds;
@@ -174,7 +178,7 @@ public void testSideChainUnbond() throws IOException, NoSuchAlgorithmException {
@Test
public void testGetSideChainValidator() throws IOException {
- SideChainValidator validator = nodeClient.getSideChainValidator(SideChainIds.RIALTO, jackValidator);
+ Validator validator = nodeClient.getSideChainValidator(SideChainIds.RIALTO, jackValidator);
if (validator != null){
Assert.assertNotNull(validator.getOperatorAddr());
}
@@ -182,13 +186,13 @@ public void testGetSideChainValidator() throws IOException {
@Test
public void testGetSideChainTopValidators() throws IOException {
- List validators = nodeClient.getSideChainTopValidators(SideChainIds.RIALTO, 5);
+ List validators = nodeClient.getSideChainTopValidators(SideChainIds.RIALTO, 5);
Assert.assertNotNull(validators);
}
@Test
public void testGetSideChainDelegation() throws IOException {
- SideChainDelegation delegation = nodeClient.getSideChainDelegation(SideChainIds.RIALTO, wallet.getAddress(), roseValidator);
+ Delegation delegation = nodeClient.getSideChainDelegation(SideChainIds.RIALTO, wallet.getAddress(), roseValidator);
if (delegation != null) {
Assert.assertNotNull(delegation.getDelegation());
Assert.assertNotNull(delegation.getBalance());
@@ -197,13 +201,13 @@ public void testGetSideChainDelegation() throws IOException {
@Test
public void testGetSideChainDelegations() throws IOException {
- List delegations = nodeClient.getSideChainDelegations(SideChainIds.RIALTO, wallet.getAddress());
+ List delegations = nodeClient.getSideChainDelegations(SideChainIds.RIALTO, wallet.getAddress());
Assert.assertNotNull(delegations);
}
@Test
public void getSideChainRedelegation() throws IOException {
- SideChainRedelegation redelegation = nodeClient.getSideChainRedelegation(SideChainIds.RIALTO, wallet.getAddress(), jackValidator, roseValidator);
+ Redelegation redelegation = nodeClient.getSideChainRedelegation(SideChainIds.RIALTO, wallet.getAddress(), jackValidator, roseValidator);
if (redelegation != null) {
Assert.assertNotNull(redelegation.getDelegatorAddress());
}
@@ -211,7 +215,7 @@ public void getSideChainRedelegation() throws IOException {
@Test
public void getSideChainRedelegations() throws IOException {
- List