Skip to content

Commit

Permalink
[DO NOT MERGE] Switch to binance mainnet (#333)
Browse files Browse the repository at this point in the history
Switch to binance mainnet
  • Loading branch information
hewigovens committed Apr 18, 2019
1 parent 1cce6aa commit 625495e
Show file tree
Hide file tree
Showing 13 changed files with 36 additions and 42 deletions.
Expand Up @@ -26,7 +26,7 @@ class CoinAddressDerivationTests {
}

private fun runDerivationChecks(coin: CoinType, address: String?) = when (coin) {
BINANCE -> assertEquals("tbnb12vtaxl9952zm6rwf7v8jerq74pvaf77fkw9xhl", address)
BINANCE -> assertEquals("bnb12vtaxl9952zm6rwf7v8jerq74pvaf77fcmvzhw", address)
BITCOIN -> assertEquals("bc1quvuarfksewfeuevuc6tn0kfyptgjvwsvrprk9d", address)
BITCOINCASH -> assertEquals("bitcoincash:qpzl3jxkzgvfd9flnd26leud5duv795fnv7vuaha70", address)
CALLISTO -> assertEquals("0x3E6FFC80745E6669135a76F4A7ce6BCF02436e04", address)
Expand Down
Expand Up @@ -26,7 +26,6 @@ class TestBinanceTransactionSigning {
signingInput.chainId = "Binance-Chain-Nile"
signingInput.accountNumber = 0
signingInput.sequence = 0
signingInput.testNet = true

signingInput.privateKey = ByteString.copyFrom(privateKey.data())

Expand All @@ -35,11 +34,11 @@ class TestBinanceTransactionSigning {
token.amount = 1

val input = Binance.SendOrder.Input.newBuilder()
input.address = ByteString.copyFrom(CosmosAddress(HRP.BINANCETEST, publicKey).keyHash())
input.address = ByteString.copyFrom(CosmosAddress(HRP.BINANCE, publicKey).keyHash())
input.addAllCoins(listOf(token.build()))

val output = Binance.SendOrder.Output.newBuilder()
output.address = ByteString.copyFrom(CosmosAddress("tbnb1hlly02l6ahjsgxw9wlcswnlwdhg4xhx3f309d9").keyHash())
output.address = ByteString.copyFrom(CosmosAddress("bnb1hlly02l6ahjsgxw9wlcswnlwdhg4xhx38yxpd5").keyHash())
output.addAllCoins(listOf(token.build()))

val sendOrder = Binance.SendOrder.newBuilder()
Expand All @@ -50,6 +49,6 @@ class TestBinanceTransactionSigning {

val sign: Binance.SigningOutput = BinanceSigner.sign(signingInput.build())
val signBytes = sign.encoded.toByteArray()
assertEquals(signBytes.toHex(), "0xb801f0625dee0a462a2c87fa0a1f0a1440c2979694bbc961023d1d27be6fc4d21a9febe612070a03424e421001121f0a14bffe47abfaede50419c577f1074fee6dd1535cd112070a03424e421001126a0a26eb5ae98721026a35920088d98c3888ca68c53dfc93f4564602606cbb87f0fe5ee533db38e5021240376f64070fdb621a4cf24e24da350476260efaf4bae799cacca19b31bc0d1ce4054f09fcffe9cfabef6a8d6a24bc1814bd444720a35f035f3c26409ffad2a9e2")
assertEquals(signBytes.toHex(), "0xb801f0625dee0a462a2c87fa0a1f0a1440c2979694bbc961023d1d27be6fc4d21a9febe612070a03424e421001121f0a14bffe47abfaede50419c577f1074fee6dd1535cd112070a03424e421001126a0a26eb5ae98721026a35920088d98c3888ca68c53dfc93f4564602606cbb87f0fe5ee533db38e50212401b1181faec30b60a2ddaa2804c253cf264c69180ec31814929b5de62088c0c5a45e8a816d1208fc5366bb8b041781a6771248550d04094c3d7a504f9e8310679")
}
}
2 changes: 0 additions & 2 deletions include/TrustWalletCore/TWHRP.h
Expand Up @@ -20,14 +20,12 @@ enum TWHRP {
TWHRPViacoin /* "via" */,
TWHRPBitcoinCash /* "bitcoincash" */,
TWHRPBinance /* "bnb" */,
TWHRPBinanceTest /* "tbnb" */,
TWHRPCosmos /* "cosmos" */,
TWHRPGroestlcoin /* "grs" */,
TWHRPQtum /* "qtum" */,
};

static const char *_Nonnull HRP_BINANCE = "bnb";
static const char *_Nonnull HRP_BINANCE_TEST = "tbnb";
static const char *_Nonnull HRP_BITCOIN = "bc";
static const char *_Nonnull HRP_BITCOINCASH = "bitcoincash";
static const char *_Nonnull HRP_LITECOIN = "ltc";
Expand Down
24 changes: 12 additions & 12 deletions src/Binance/Serialization.cpp
Expand Up @@ -13,9 +13,9 @@ using namespace TW;

using json = nlohmann::json;

static inline std::string addressString(const std::string& bytes, bool testNet) {
static inline std::string addressString(const std::string& bytes) {
auto data = std::vector<uint8_t>(bytes.begin(), bytes.end());
auto address = Cosmos::Address(testNet ? HRP_BINANCE_TEST : HRP_BINANCE, data);
auto address = Cosmos::Address(HRP_BINANCE, data);
return address.string();
}

Expand All @@ -38,45 +38,45 @@ json Binance::orderJSON(const Binance::Proto::SigningInput& input) {
j["ordertype"] = 2;
j["price"] = input.trade_order().price();
j["quantity"] = input.trade_order().quantity();
j["sender"] = addressString(input.trade_order().sender(), input.test_net());
j["sender"] = addressString(input.trade_order().sender());
j["side"] = input.trade_order().side();
j["symbol"] = input.trade_order().symbol();
j["timeinforce"] = input.trade_order().timeinforce();
} else if (input.has_cancel_trade_order()) {
j["refid"] = input.cancel_trade_order().refid();
j["sender"] = addressString(input.cancel_trade_order().sender(), input.test_net());
j["sender"] = addressString(input.cancel_trade_order().sender());
j["symbol"] = input.cancel_trade_order().symbol();
} else if (input.has_send_order()) {
j["inputs"] = inputsJSON(input.send_order(), input.test_net());
j["outputs"] = outputsJSON(input.send_order(), input.test_net());
j["inputs"] = inputsJSON(input.send_order());
j["outputs"] = outputsJSON(input.send_order());
} else if (input.has_freeze_order()) {
j["from"] = addressString(input.freeze_order().from(), input.test_net());
j["from"] = addressString(input.freeze_order().from());
j["symbol"] = input.freeze_order().symbol();
j["amount"] = input.freeze_order().amount();
} else if (input.has_unfreeze_order()) {
j["from"] = addressString(input.unfreeze_order().from(), input.test_net());
j["from"] = addressString(input.unfreeze_order().from());
j["symbol"] = input.unfreeze_order().symbol();
j["amount"] = input.unfreeze_order().amount();
}
return j;
}

json Binance::inputsJSON(const Binance::Proto::SendOrder& order, bool testNet) {
json Binance::inputsJSON(const Binance::Proto::SendOrder& order) {
json j = json::array();
for (auto& input : order.inputs()) {
json sj;
sj["address"] = addressString(input.address(), testNet);
sj["address"] = addressString(input.address());
sj["coins"] = tokensJSON(input.coins());
j.push_back(sj);
}
return j;
}

json Binance::outputsJSON(const Binance::Proto::SendOrder& order, bool testNet) {
json Binance::outputsJSON(const Binance::Proto::SendOrder& order) {
json j = json::array();
for (auto& output : order.outputs()) {
json sj;
sj["address"] = addressString(output.address(), testNet);
sj["address"] = addressString(output.address());
sj["coins"] = tokensJSON(output.coins());
j.push_back(sj);
}
Expand Down
4 changes: 2 additions & 2 deletions src/Binance/Serialization.h
Expand Up @@ -13,8 +13,8 @@ namespace TW::Binance {

nlohmann::json signatureJSON(const Binance::Proto::SigningInput& input);
nlohmann::json orderJSON(const Binance::Proto::SigningInput& input);
nlohmann::json inputsJSON(const Binance::Proto::SendOrder& order, bool testNet);
nlohmann::json outputsJSON(const Binance::Proto::SendOrder& order, bool testNet);
nlohmann::json inputsJSON(const Binance::Proto::SendOrder& order);
nlohmann::json outputsJSON(const Binance::Proto::SendOrder& order);
nlohmann::json tokensJSON(const ::google::protobuf::RepeatedPtrField<Binance::Proto::SendOrder_Token>& tokens);

} // namespace TW::Binance
13 changes: 5 additions & 8 deletions src/Coin.cpp
Expand Up @@ -42,8 +42,7 @@ bool TW::validateAddress(TWCoinType coin, const std::string& string) {
return Aion::Address::isValid(string);

case TWCoinTypeBinance:
return Cosmos::Address::isValid(string, HRP_BINANCE) ||
Cosmos::Address::isValid(string, HRP_BINANCE_TEST);
return Cosmos::Address::isValid(string, HRP_BINANCE);

case TWCoinTypeBitcoin:
return Bitcoin::Bech32Address::isValid(string, HRP_BITCOIN) ||
Expand Down Expand Up @@ -123,7 +122,7 @@ bool TW::validateAddress(TWCoinType coin, const std::string& string) {

case TWCoinTypeNEO:
return NEO::Address::isValid(string);

case TWCoinTypeLux:
// same p2pkh prefix as litecoin
return Bitcoin::Address::isValid(string, {{TWP2PKHPrefixLitecoin}, {TWP2SHPrefixLux}});
Expand Down Expand Up @@ -217,6 +216,7 @@ TWCurve TW::curve(TWCoinType coin) {
return TWCurveSECP256k1;

case TWCoinTypeNEO:
case TWCoinTypeOntology:
return TWCurveNIST256p1;

case TWCoinTypeAion:
Expand All @@ -226,9 +226,6 @@ TWCurve TW::curve(TWCoinType coin) {
case TWCoinTypeTezos:
case TWCoinTypeKIN:
return TWCurveEd25519;

case TWCoinTypeOntology:
return TWCurveNIST256p1;
}
}

Expand Down Expand Up @@ -457,7 +454,7 @@ std::string TW::deriveAddress(TWCoinType coin, const PrivateKey& privateKey) {
std::string TW::deriveAddress(TWCoinType coin, const PublicKey& publicKey) {
switch (coin) {
case TWCoinTypeBinance:
return Cosmos::Address(HRP_BINANCE_TEST, publicKey).string();
return Cosmos::Address(HRP_BINANCE, publicKey).string();

case TWCoinTypeCosmos:
return Cosmos::Address(HRP_COSMOS, publicKey).string();
Expand Down Expand Up @@ -537,7 +534,7 @@ std::string TW::deriveAddress(TWCoinType coin, const PublicKey& publicKey) {

case TWCoinTypeNULS:
return NULS::Address(publicKey).string();

case TWCoinTypeQtum:
return Bitcoin::Address(publicKey, TWP2PKHPrefixQtum).string();
}
Expand Down
3 changes: 0 additions & 3 deletions src/interface/TWHRP.cpp
Expand Up @@ -15,7 +15,6 @@ const char* stringForHRP(enum TWHRP hrp) {
case TWHRPViacoin: return HRP_VIACOIN;
case TWHRPBitcoinCash: return HRP_BITCOINCASH;
case TWHRPBinance: return HRP_BINANCE;
case TWHRPBinanceTest: return HRP_BINANCE_TEST;
case TWHRPCosmos: return HRP_COSMOS;
case TWHRPGroestlcoin: return HRP_GROESTLCOIN;
case TWHRPQtum: return HRP_QTUM;
Expand All @@ -34,8 +33,6 @@ enum TWHRP hrpForString(const char *_Nonnull string) {
return TWHRPBitcoinCash;
} else if (std::strcmp(string, HRP_BINANCE) == 0) {
return TWHRPBinance;
} else if (std::strcmp(string, HRP_BINANCE_TEST) == 0) {
return TWHRPBinanceTest;
} else if (std::strcmp(string, HRP_COSMOS) == 0) {
return TWHRPCosmos;
} else if (std::strcmp(string, HRP_GROESTLCOIN) == 0) {
Expand Down
1 change: 0 additions & 1 deletion src/proto/Binance.proto
Expand Up @@ -83,7 +83,6 @@ message SigningInput {
int64 source = 4;
string memo = 5;
bytes private_key = 6;
bool test_net = 7;

oneof order_oneof {
TradeOrder trade_order = 8;
Expand Down
2 changes: 1 addition & 1 deletion swift/Sources/Addresses/CoinType+Address.swift
Expand Up @@ -109,7 +109,7 @@ public extension CoinType {
case .bitcoinCash:
return .bitcoinCash
case .binance:
return .binanceTest
return .binance
case .cosmos:
return .cosmos
case .litecoin:
Expand Down
7 changes: 3 additions & 4 deletions swift/Tests/BinanceSignerTests.swift
Expand Up @@ -16,7 +16,6 @@ class BinanceSignerTests: XCTestCase {
signingInput.chainID = "Binance-Chain-Nile"
signingInput.accountNumber = 0
signingInput.sequence = 0
signingInput.testNet = true

signingInput.privateKey = privateKey.data

Expand All @@ -25,11 +24,11 @@ class BinanceSignerTests: XCTestCase {
token.amount = 1

var input = TW_Binance_Proto_SendOrder.Input()
input.address = CosmosAddress(hrp: .binanceTest, publicKey: publicKey)!.keyHash
input.address = CosmosAddress(hrp: .binance, publicKey: publicKey)!.keyHash
input.coins = [token]

var output = TW_Binance_Proto_SendOrder.Output()
output.address = CosmosAddress(string: "tbnb1hlly02l6ahjsgxw9wlcswnlwdhg4xhx3f309d9")!.keyHash
output.address = CosmosAddress(string: "bnb1hlly02l6ahjsgxw9wlcswnlwdhg4xhx38yxpd5")!.keyHash
output.coins = [token]

var sendOrder = TW_Binance_Proto_SendOrder()
Expand All @@ -40,6 +39,6 @@ class BinanceSignerTests: XCTestCase {

let data = BinanceSigner.sign(input: signingInput)

XCTAssertEqual(data.encoded.hexString, "b801f0625dee0a462a2c87fa0a1f0a1440c2979694bbc961023d1d27be6fc4d21a9febe612070a03424e421001121f0a14bffe47abfaede50419c577f1074fee6dd1535cd112070a03424e421001126a0a26eb5ae98721026a35920088d98c3888ca68c53dfc93f4564602606cbb87f0fe5ee533db38e5021240376f64070fdb621a4cf24e24da350476260efaf4bae799cacca19b31bc0d1ce4054f09fcffe9cfabef6a8d6a24bc1814bd444720a35f035f3c26409ffad2a9e2")
XCTAssertEqual(data.encoded.hexString, "b801f0625dee0a462a2c87fa0a1f0a1440c2979694bbc961023d1d27be6fc4d21a9febe612070a03424e421001121f0a14bffe47abfaede50419c577f1074fee6dd1535cd112070a03424e421001126a0a26eb5ae98721026a35920088d98c3888ca68c53dfc93f4564602606cbb87f0fe5ee533db38e50212401b1181faec30b60a2ddaa2804c253cf264c69180ec31814929b5de62088c0c5a45e8a816d1208fc5366bb8b041781a6771248550d04094c3d7a504f9e8310679")
}
}
4 changes: 2 additions & 2 deletions swift/Tests/Blockchains/BinanceChainTests.swift
Expand Up @@ -16,12 +16,12 @@ class BinanceChainTests: XCTestCase {
XCTAssertEqual("bnb1grpf0955h0ykzq3ar5nmum7y6gdfl6lxfn46h2", address?.description)
}

func testBinanceTestnet() {
func testBinanceMainnet() {
let wallet = HDWallet(mnemonic: "rabbit tilt arm protect banner ill produce vendor april bike much identify pond upset front easily glass gallery address hair priority focus forest angle", passphrase: "")
let key = wallet.getKeyForCoin(coin: .binance)
let address = CoinType.binance.deriveAddress(privateKey: key)

XCTAssertEqual(key.data.hexString, "727f677b390c151caf9c206fd77f77918f56904b5504243db9b21e51182c4c06")
XCTAssertEqual("tbnb1devga6q804tx9fqrnx0vtu5r36kxgp9t4ruzk2", address.description)
XCTAssertEqual("bnb1devga6q804tx9fqrnx0vtu5r36kxgp9tmk4xkm", address.description)
}
}
2 changes: 1 addition & 1 deletion swift/Tests/CoinAddressDerivationTests.swift
Expand Up @@ -23,7 +23,7 @@ class CoinAddressDerivationTests: XCTestCase {
let expectedResult = "0xa0629f34c9ea4757ad0b275628d4d02e3db6c9009ba2ceeba76a5b55fb2ca42e"
AssetCoinDerivation(coin, expectedResult, derivedAddress, address)
case .binance:
let expectedResult = "tbnb12vtaxl9952zm6rwf7v8jerq74pvaf77fkw9xhl"
let expectedResult = "bnb12vtaxl9952zm6rwf7v8jerq74pvaf77fcmvzhw"
AssetCoinDerivation(coin, expectedResult, derivedAddress, address)
case .cosmos:
let expectedResult = "cosmos142j9u5eaduzd7faumygud6ruhdwme98qsy2ekn"
Expand Down
7 changes: 6 additions & 1 deletion tests/CoinTests.cpp
Expand Up @@ -29,6 +29,11 @@ TEST(Coin, validateAddressBitcoin) {
EXPECT_FALSE(validateAddress(TWCoinTypeBitcoin, "MPmoY6RX3Y3HFjGEnFxyuLPCQdjvHwMEny"));
}

TEST(Coin, ValidateAddressBinance) {
EXPECT_TRUE(validateAddress(TWCoinTypeBinance, "bnb12vtaxl9952zm6rwf7v8jerq74pvaf77fcmvzhw"));
EXPECT_FALSE(validateAddress(TWCoinTypeBinance, "tbnb12vtaxl9952zm6rwf7v8jerq74pvaf77fkw9xhl"));
}

TEST(Coin, ValidateAddressLitecoin) {
EXPECT_TRUE(validateAddress(TWCoinTypeLitecoin, "ltc1q5wmm9vrz55war9c0rgw26tv9un5fxnn7slyjpy"));
EXPECT_TRUE(validateAddress(TWCoinTypeLitecoin, "MPmoY6RX3Y3HFjGEnFxyuLPCQdjvHwMEny"));
Expand Down Expand Up @@ -113,7 +118,7 @@ TEST(Coin, validateAddressQtum) {
TEST(Coin, DeriveAddress) {
const auto privateKey = PrivateKey(parse_hex("0x4646464646464646464646464646464646464646464646464646464646464646"));
EXPECT_EQ(TW::deriveAddress(TWCoinTypeAion, privateKey), "0xa0010b0ea04ba4d76ca6e5e9900bacf19bc4402eaec7e36ea7ddd8eed48f60f3");
EXPECT_EQ(TW::deriveAddress(TWCoinTypeBinance, privateKey), "tbnb1hkfq3zahaqkkzx5mjnamwjsfpq2jk7z042ftd7");
EXPECT_EQ(TW::deriveAddress(TWCoinTypeBinance, privateKey), "bnb1hkfq3zahaqkkzx5mjnamwjsfpq2jk7z0mlq0d0");
EXPECT_EQ(TW::deriveAddress(TWCoinTypeBitcoin, privateKey), "bc1qhkfq3zahaqkkzx5mjnamwjsfpq2jk7z00ppggv");
EXPECT_EQ(TW::deriveAddress(TWCoinTypeBitcoinCash, privateKey), "bitcoincash:qz7eyzytkl5z6cg6nw20hd62pyyp22mcfuardfd2vn");
EXPECT_EQ(TW::deriveAddress(TWCoinTypeCallisto, privateKey), "0x9d8A62f656a8d1615C1294fd71e9CFb3E4855A4F");
Expand Down

0 comments on commit 625495e

Please sign in to comment.