Skip to content

Commit

Permalink
Remove not used methods TWAnySignerDecode and TWAnySignerEncode (#1362)
Browse files Browse the repository at this point in the history
* Remove not used methods TWAnySignerDecode and TWAnySignerEncode

* iOS test fix

* Fix android side

* Further removals

* Even more removals

* Put back RLP decodeList, Length, etc.

* Emprty lines

Co-authored-by: Catenocrypt <catenocrypt@users.noreply.github.com>
  • Loading branch information
optout21 and catenocrypt committed Apr 13, 2021
1 parent 0f2c369 commit edee0ed
Show file tree
Hide file tree
Showing 19 changed files with 20 additions and 244 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,8 @@ class TestEthereumTransactionSigner {
}

val output = AnySigner.sign(signingInput.build(), ETHEREUM, SigningOutput.parser())
val encoded = AnySigner.encode(signingInput.build(), ETHEREUM)

assertArrayEquals(output.encoded.toByteArray(), encoded)
assertEquals(Numeric.toHexString(encoded), "0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83")
assertEquals(Numeric.toHexString(output.encoded.toByteArray()), "0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83")
}

@Test
Expand All @@ -62,10 +60,8 @@ class TestEthereumTransactionSigner {
}

val output = AnySigner.sign(signingInput.build(), ETHEREUM, SigningOutput.parser())
val encoded = AnySigner.encode(signingInput.build(), ETHEREUM)

assertArrayEquals(output.encoded.toByteArray(), encoded)
assertEquals(Numeric.toHexString(encoded), "0xf8aa808509c7652400830130b9946b175474e89094c44da98b954eedeac495271d0f80b844a9059cbb0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000001bc16d674ec8000025a0724c62ad4fbf47346b02de06e603e013f26f26b56fdc0be7ba3d6273401d98cea0032131cae15da7ddcda66963e8bef51ca0d9962bfef0547d3f02597a4a58c931")
assertEquals(Numeric.toHexString(output.encoded.toByteArray()), "0xf8aa808509c7652400830130b9946b175474e89094c44da98b954eedeac495271d0f80b844a9059cbb0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000001bc16d674ec8000025a0724c62ad4fbf47346b02de06e603e013f26f26b56fdc0be7ba3d6273401d98cea0032131cae15da7ddcda66963e8bef51ca0d9962bfef0547d3f02597a4a58c931")
assertEquals(Numeric.toHexString(output.data.toByteArray()), "0xa9059cbb0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000001bc16d674ec80000")
}

Expand All @@ -89,10 +85,8 @@ class TestEthereumTransactionSigner {
}

val output = AnySigner.sign(signingInput.build(), ETHEREUM, SigningOutput.parser())
val encoded = AnySigner.encode(signingInput.build(), ETHEREUM)

assertArrayEquals(output.encoded.toByteArray(), encoded)
assertEquals(Numeric.toHexString(encoded), "0xf8cc8202de8522ecb25c00830130b9940d8c864da1985525e0af0acbeef6562881827bd580b86423b872dd0000000000000000000000007d8bf18c7ce84b3e175b339c4ca93aed1dd166f100000000000000000000000047331175b23c2f067204b506ca1501c26731c9900000000000000000000000000000000000000000000000000000000000000fd825a04c5d8242a8c2db1cfa352a3486dd85c82824e01b9bcf0ce4170fcd2329fb7bcaa02d85ab09e750a73fd4dd26b142830ada1e991f8474795b43d96d93e65caaefe7")
assertEquals(Numeric.toHexString(output.encoded.toByteArray()), "0xf8cc8202de8522ecb25c00830130b9940d8c864da1985525e0af0acbeef6562881827bd580b86423b872dd0000000000000000000000007d8bf18c7ce84b3e175b339c4ca93aed1dd166f100000000000000000000000047331175b23c2f067204b506ca1501c26731c9900000000000000000000000000000000000000000000000000000000000000fd825a04c5d8242a8c2db1cfa352a3486dd85c82824e01b9bcf0ce4170fcd2329fb7bcaa02d85ab09e750a73fd4dd26b142830ada1e991f8474795b43d96d93e65caaefe7")
assertEquals(Numeric.toHexString(output.data.toByteArray()), "0x23b872dd0000000000000000000000007d8bf18c7ce84b3e175b339c4ca93aed1dd166f100000000000000000000000047331175b23c2f067204b506ca1501c26731c9900000000000000000000000000000000000000000000000000000000000000fd8")
}

Expand All @@ -118,10 +112,8 @@ class TestEthereumTransactionSigner {
}

val output = AnySigner.sign(signingInput.build(), ETHEREUM, SigningOutput.parser())
val encoded = AnySigner.encode(signingInput.build(), ETHEREUM)

assertArrayEquals(output.encoded.toByteArray(), encoded)
assertEquals(Numeric.toHexString(encoded), "0xf9014a808509c7652400830130b9944e45e92ed38f885d39a733c14f1817217a89d42580b8e4f242432a000000000000000000000000718046867b5b1782379a14ea4fc0c9b724da94fc0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000000000000023c47ee50000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004010203040000000000000000000000000000000000000000000000000000000026a010315488201ac801ce346bffd1570de147615462d7e7db3cf08cf558465c6b79a06643943b24593bc3904a9fda63bb169881730994c973ab80f07d66a698064573")
assertEquals(Numeric.toHexString(output.encoded.toByteArray()), "0xf9014a808509c7652400830130b9944e45e92ed38f885d39a733c14f1817217a89d42580b8e4f242432a000000000000000000000000718046867b5b1782379a14ea4fc0c9b724da94fc0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000000000000023c47ee50000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000004010203040000000000000000000000000000000000000000000000000000000026a010315488201ac801ce346bffd1570de147615462d7e7db3cf08cf558465c6b79a06643943b24593bc3904a9fda63bb169881730994c973ab80f07d66a698064573")
assertEquals(Numeric.toHexString(output.data.toByteArray()), "0xf242432a000000000000000000000000718046867b5b1782379a14ea4fc0c9b724da94fc0000000000000000000000005322b34c88ed0691971bf52a7047448f0f4efc840000000000000000000000000000000000000000000000000000000023c47ee50000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000040102030400000000000000000000000000000000000000000000000000000000")
}

Expand All @@ -145,12 +137,4 @@ class TestEthereumTransactionSigner {

assertEquals("f86a8084d693a400825208947d8bf18c7ce84b3e175b339c4ca93aed1dd166f1870348bca5a160008025a0fe5802b49e04c6b1705088310e133605ed8b549811a18968ad409ea02ad79f21a05bf845646fb1e1b9365f63a7fd5eb5e984094e3ed35c3bed7361aebbcbf41f10", result)
}

@Test
fun testEthereumTransactionDecoding() {
val rawTx = "0xf8a86484b2d05e008277fb9400000000000c2e074ec69a0dfb2997ba6c7d2e1e80b8441896f70ae71cd96d4ba1c4b512b0c5bee30d2b6becf61e574c32a17a67156fa9ed3c4c6f0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba4125a0b55e479d5872b7531437621780ead128cd25d8988fb3cda9bcfb4baeb0eda4dfa077b096cf0cb4bee6eb8c756e9cdba95a6cf62af74e05e7e4cdaa8100271a508d".toHexByteArray()
val decoded = AnySigner.decode(rawTx, ETHEREUM)

assertEquals(String(decoded), """{"gas":"0x77fb","gasPrice":"0xb2d05e00","input":"0x1896f70ae71cd96d4ba1c4b512b0c5bee30d2b6becf61e574c32a17a67156fa9ed3c4c6f0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41","nonce":"0x64","r":"0xb55e479d5872b7531437621780ead128cd25d8988fb3cda9bcfb4baeb0eda4df","s":"0x77b096cf0cb4bee6eb8c756e9cdba95a6cf62af74e05e7e4cdaa8100271a508d","to":"0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e","v":"0x25","value":"0x"}""")
}
}
2 changes: 1 addition & 1 deletion docs/coins.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ This list is generated from [./coins.json](../coins.json)
| 820 | Callisto | CLO | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/callisto/info/logo.png" width="32" /> | <https://callisto.network> |
| 888 | NEO | NEO | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/neo/info/logo.png" width="32" /> | <https://neo.org> |
| 889 | TomoChain | TOMO | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tomochain/info/logo.png" width="32" /> | <https://tomochain.com> |
| 966 | Polygon | MATIC | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/matic/info/logo.png" width="32" /> | <https://polygon.technology> |
| 966 | Polygon | MATIC | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png" width="32" /> | <https://polygon.technology> |
| 1001 | Thunder Token | TT | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/thundertoken/info/logo.png" width="32" /> | <https://thundercore.com> |
| 1023 | Harmony | ONE | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/harmony/info/logo.png" width="32" /> | <https://harmony.one> |
| 1024 | Ontology | ONT | <img src="https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ontology/info/logo.png" width="32" /> | <https://ont.io> |
Expand Down
8 changes: 0 additions & 8 deletions include/TrustWalletCore/TWAnySigner.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,6 @@ extern TWString *_Nonnull TWAnySignerSignJSON(TWString *_Nonnull json, TWData *_

extern bool TWAnySignerSupportsJSON(enum TWCoinType coin);

/// Encodes serialized SigningInput data to raw platform/coin specific bytes
/// Example: EthereumSigningInput will be encoded as raw RLP bytes which can be sent over JSONRPC (eth_sendRawTransaction)
extern TWData *_Nonnull TWAnySignerEncode(TWData *_Nonnull input, enum TWCoinType coin);

/// Decodes raw platform/coin specific bytes to representable json data
/// Example: Ethereum RLP bytes will be decoded into same json returned from JSONRPC (eth_getTransactionByHash)
extern TWData *_Nonnull TWAnySignerDecode(TWData *_Nonnull input, enum TWCoinType coin);

/// Plan a transaction (for UTXO chains).
extern TWData *_Nonnull TWAnySignerPlan(TWData *_Nonnull input, enum TWCoinType coin);

Expand Down
16 changes: 0 additions & 16 deletions jni/cpp/AnySigner.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,6 @@ jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeSign(JNIEnv *env, jclas
return resultData;
}

jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeEncode(JNIEnv *env, jclass thisClass, jbyteArray input, jint coin) {
TWData *inputData = TWDataCreateWithJByteArray(env, input);
TWData *outputData = TWAnySignerEncode(inputData, coin);
jbyteArray resultData = TWDataJByteArray(outputData, env);
TWDataDelete(inputData);
return resultData;
}

jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeDecode(JNIEnv *env, jclass thisClass, jbyteArray input, jint coin) {
TWData *inputData = TWDataCreateWithJByteArray(env, input);
TWData *outputData = TWAnySignerDecode(inputData, coin);
jbyteArray resultData = TWDataJByteArray(outputData, env);
TWDataDelete(inputData);
return resultData;
}

jboolean JNICALL Java_wallet_core_java_AnySigner_supportsJSON(JNIEnv *env, jclass thisClass, jint coin) {
return TWAnySignerSupportsJSON(coin);
}
Expand Down
6 changes: 0 additions & 6 deletions jni/cpp/AnySigner.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@ TW_EXTERN_C_BEGIN
JNIEXPORT
jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeSign(JNIEnv *env, jclass thisClass, jbyteArray input, jint coin);

JNIEXPORT
jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeEncode(JNIEnv *env, jclass thisClass, jbyteArray input, jint coin);

JNIEXPORT
jbyteArray JNICALL Java_wallet_core_java_AnySigner_nativeDecode(JNIEnv *env, jclass thisClass, jbyteArray input, jint coin);

JNIEXPORT
jboolean JNICALL Java_wallet_core_java_AnySigner_supportsJSON(JNIEnv *env, jclass thisClass, jint coin);

Expand Down
13 changes: 0 additions & 13 deletions jni/java/wallet/core/java/AnySigner.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,6 @@ public static <T extends Message> T sign(Message input, CoinType coin, Parser<T>
}
public static native byte[] nativeSign(byte[] data, int coin);

public static byte[] encode(Message input, CoinType coin) throws Exception {
byte[] data = input.toByteArray();
return nativeEncode(data, coin.value());
}

public static native byte[] nativeEncode(byte[] data, int coin);

public static byte[] decode(byte[] data, CoinType coin) throws Exception {
return nativeDecode(data, coin.value());
}

public static native byte[] nativeDecode(byte[] data, int coin);

public static native String signJSON(String json, byte[] key, int coin);

public static native boolean supportsJSON(int coin);
Expand Down
12 changes: 0 additions & 12 deletions src/Coin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,18 +232,6 @@ bool TW::supportsJSONSigning(TWCoinType coinType) {
return dispatcher->supportsJSONSigning();
}

void TW::anyCoinEncode(TWCoinType coinType, const Data& dataIn, Data& dataOut) {
auto dispatcher = coinDispatcher(coinType);
assert(dispatcher != nullptr);
dispatcher->encodeRawTx(coinType, dataIn, dataOut);
}

void TW::anyCoinDecode(TWCoinType coinType, const Data& dataIn, Data& dataOut) {
auto dispatcher = coinDispatcher(coinType);
assert(dispatcher != nullptr);
dispatcher->decodeRawTx(coinType, dataIn, dataOut);
}

void TW::anyCoinPlan(TWCoinType coinType, const Data& dataIn, Data& dataOut) {
auto dispatcher = coinDispatcher(coinType);
assert(dispatcher != nullptr);
Expand Down
4 changes: 0 additions & 4 deletions src/Coin.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,6 @@ std::string anySignJSON(TWCoinType coinType, const std::string& json, const Data

bool supportsJSONSigning(TWCoinType coinType);

void anyCoinEncode(TWCoinType coinType, const Data& dataIn, Data& dataOut);

void anyCoinDecode(TWCoinType coinType, const Data& dataIn, Data& dataOut);

void anyCoinPlan(TWCoinType coinType, const Data& dataIn, Data& dataOut);

// Return coins handled by the same dispatcher as the given coin (mostly for testing)
Expand Down
11 changes: 0 additions & 11 deletions src/CoinEntry.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ class CoinEntry {
virtual bool supportsJSONSigning() const { return false; }
// It is optional, Signing JSON input with private key
virtual std::string signJSON(TWCoinType coin, const std::string& json, const Data& key) const { return ""; }
// Sign and encode broadcastable raw transaction
virtual void encodeRawTx(TWCoinType coin, const Data& dataIn, Data& dataOut) const { return; }
virtual void decodeRawTx(TWCoinType coin, const Data& dataIn, Data& dataOut) const { return; }
// Planning, for UTXO chains, in preparation for signing
// It is optional, only UTXO chains need it, default impl. leaves empty result.
virtual void plan(TWCoinType coin, const Data& dataIn, Data& dataOut) const { return; }
Expand All @@ -51,14 +48,6 @@ void signTemplate(const Data& dataIn, Data& dataOut) {
dataOut.insert(dataOut.end(), serializedOut.begin(), serializedOut.end());
}

template <typename Signer, typename Input>
void encodeTemplate(const Data& dataIn, Data& dataOut) {
auto input = Input();
input.ParseFromArray(dataIn.data(), (int)dataIn.size());
auto encoded = Signer::sign(input).encoded();
dataOut.insert(dataOut.end(), encoded.begin(), encoded.end());
}

// Note: use output parameter to avoid unneeded copies
template <typename Planner, typename Input>
void planTemplate(const Data& dataIn, Data& dataOut) {
Expand Down
14 changes: 0 additions & 14 deletions src/Ethereum/Entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

#include "Address.h"
#include "Signer.h"
#include "RLP.h"

using namespace TW::Ethereum;
using namespace std;
Expand All @@ -33,16 +32,3 @@ void Entry::sign(TWCoinType coin, const TW::Data& dataIn, TW::Data& dataOut) con
string Entry::signJSON(TWCoinType coin, const std::string& json, const Data& key) const {
return Signer::signJSON(json, key);
}

void Entry::encodeRawTx(TWCoinType coin, const TW::Data& dataIn, TW::Data& dataOut) const {
encodeTemplate<Signer, Proto::SigningInput>(dataIn, dataOut);
}

void Entry::decodeRawTx(TWCoinType coin, const TW::Data& dataIn, TW::Data& dataOut) const {
try {
auto data = RLP::decodeRawTransaction(dataIn);
dataOut.insert(dataOut.end(), data.begin(), data.end());
} catch(...) {
return;
}
}
2 changes: 0 additions & 2 deletions src/Ethereum/Entry.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ class Entry: public CoinEntry {
virtual void sign(TWCoinType coin, const Data& dataIn, Data& dataOut) const;
virtual bool supportsJSONSigning() const { return true; }
virtual std::string signJSON(TWCoinType coin, const std::string& json, const Data& key) const;
virtual void encodeRawTx(TWCoinType coin, const Data& dataIn, Data& dataOut) const;
virtual void decodeRawTx(TWCoinType coin, const Data& dataIn, Data& dataOut) const;
};

} // namespace TW::Ethereum
28 changes: 2 additions & 26 deletions src/Ethereum/RLP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,12 @@
#include "../Data.h"
#include "../uint256.h"
#include "../BinaryCoding.h"
#include "../HexCoding.h"

#include <nlohmann/json.hpp>
#include <tuple>

using namespace TW;
using namespace TW::Ethereum;

using json = nlohmann::json;

Data RLP::encode(const uint256_t& value) noexcept {
using boost::multiprecision::cpp_int;

Expand Down Expand Up @@ -141,26 +137,7 @@ Data RLP::putint(uint64_t i) noexcept {
// clang-format on
}

Data RLP::decodeRawTransaction(const Data& data) {
auto decoded = decode(data).decoded;
if (decoded.size() < 9) {
return {};
}
auto result = json {
{"nonce", hexEncoded(decoded[0])},
{"gasPrice", hexEncoded(decoded[1])},
{"gas", hexEncoded(decoded[2])},
{"to", hexEncoded(decoded[3])},
{"value", hexEncoded(decoded[4])},
{"input", hexEncoded(decoded[5])},
{"v", hexEncoded(decoded[6])},
{"r", hexEncoded(decoded[7])},
{"s", hexEncoded(decoded[8])},
}.dump();
return Data(result.begin(), result.end());
}

static RLP::DecodedItem decodeList(const Data& input) {
RLP::DecodedItem RLP::decodeList(const Data& input) {
RLP::DecodedItem item;
auto remainder = input;
while(true) {
Expand All @@ -175,7 +152,7 @@ static RLP::DecodedItem decodeList(const Data& input) {
return item;
}

static uint64_t decodeLength(const Data& data) {
uint64_t RLP::decodeLength(const Data& data) {
size_t index = 0;
auto decodedLen = decodeVarInt(data, index);
if (!std::get<0>(decodedLen)) {
Expand Down Expand Up @@ -237,7 +214,6 @@ RLP::DecodedItem RLP::decode(const Data& input) {
if (inputLen < listLen) {
throw std::invalid_argument("Invalid rlp string length");
}

// empty list
if (listLen == 0) {
item.remainder = Data(input.begin() + 1, input.end());
Expand Down
5 changes: 2 additions & 3 deletions src/Ethereum/RLP.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,8 @@ struct RLP {
Data remainder;
};

/// Decodes raw transaction to json data
static Data decodeRawTransaction(const Data& data);

static DecodedItem decodeList(const Data& input);
static uint64_t decodeLength(const Data& data);
/// Decodes data, remainder from RLP encoded data
static DecodedItem decode(const Data& data);
};
Expand Down
14 changes: 0 additions & 14 deletions src/interface/TWAnySigner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,6 @@ extern bool TWAnySignerSupportsJSON(enum TWCoinType coin) {
return TW::supportsJSONSigning(coin);
}

TWData* _Nonnull TWAnySignerEncode(TWData* _Nonnull data, enum TWCoinType coin) {
const Data& dataIn = *(reinterpret_cast<const Data*>(data));
Data dataOut;
TW::anyCoinEncode(coin, dataIn, dataOut);
return TWDataCreateWithBytes(dataOut.data(), dataOut.size());
}

TWData* _Nonnull TWAnySignerDecode(TWData* _Nonnull data, enum TWCoinType coin) {
const Data& dataIn = *(reinterpret_cast<const Data*>(data));
Data dataOut;
TW::anyCoinDecode(coin, dataIn, dataOut);
return TWDataCreateWithBytes(dataOut.data(), dataOut.size());
}

TWData* _Nonnull TWAnySignerPlan(TWData* _Nonnull data, enum TWCoinType coin) {
const Data& dataIn = *(reinterpret_cast<const Data*>(data));
Data dataOut;
Expand Down
Loading

0 comments on commit edee0ed

Please sign in to comment.