From 8daa8f9e66e2a8315ca0a3294d670a16bea794dc Mon Sep 17 00:00:00 2001
From: satoshiotomakan <127754187+satoshiotomakan@users.noreply.github.com>
Date: Thu, 11 Apr 2024 12:51:31 +0200
Subject: [PATCH] [Lightlink]: Add Lightlink Phoenix EVM chain (#3784)
* feat(lightlink): Add Lightlink Phoenix EVM chain
* feat(lightlink): Fix iOS test
---
.../blockchains/CoinAddressDerivationTests.kt | 2 +-
docs/registry.md | 1 +
include/TrustWalletCore/TWCoinType.h | 1 +
.../core/test/CoinAddressDerivationTests.kt | 2 +-
registry.json | 31 +++++++++++++++++++
.../tests/coin_address_derivation_test.rs | 1 +
swift/Tests/CoinAddressDerivationTests.swift | 3 +-
tests/chains/Lightlink/TWCoinTypeTests.cpp | 29 +++++++++++++++++
tests/common/CoinAddressDerivationTests.cpp | 1 +
9 files changed, 68 insertions(+), 3 deletions(-)
create mode 100644 tests/chains/Lightlink/TWCoinTypeTests.cpp
diff --git a/android/app/src/androidTest/java/com/trustwallet/core/app/blockchains/CoinAddressDerivationTests.kt b/android/app/src/androidTest/java/com/trustwallet/core/app/blockchains/CoinAddressDerivationTests.kt
index da03cbf9021..aec21fe9d39 100644
--- a/android/app/src/androidTest/java/com/trustwallet/core/app/blockchains/CoinAddressDerivationTests.kt
+++ b/android/app/src/androidTest/java/com/trustwallet/core/app/blockchains/CoinAddressDerivationTests.kt
@@ -47,7 +47,7 @@ class CoinAddressDerivationTests {
FANTOM, CELO, CRONOSCHAIN, SMARTBITCOINCASH, KUCOINCOMMUNITYCHAIN, BOBA, METIS,
AURORA, EVMOS, MOONRIVER, MOONBEAM, KAVAEVM, KLAYTN, METER, OKXCHAIN, POLYGONZKEVM, SCROLL,
CONFLUXESPACE, ACALAEVM, OPBNB, NEON, BASE, LINEA, GREENFIELD, MANTLE, ZENEON, MANTAPACIFIC,
- ZETAEVM, MERLIN,
+ ZETAEVM, MERLIN, LIGHTLINK,
-> assertEquals("0x8f348F300873Fd5DA36950B2aC75a26584584feE", address)
RONIN -> assertEquals("ronin:8f348F300873Fd5DA36950B2aC75a26584584feE", address)
diff --git a/docs/registry.md b/docs/registry.md
index 4079dd81817..1b07f45a003 100644
--- a/docs/registry.md
+++ b/docs/registry.md
@@ -84,6 +84,7 @@ This list is generated from [./registry.json](../registry.json)
| 1030 | Conflux eSpace | CFX | | |
| 1729 | Tezos | XTZ | | |
| 1815 | Cardano | ADA | | |
+| 1890 | Lightlink Phoenix | ETH | | |
| 2301 | Qtum | QTUM | | |
| 2718 | Nebulas | NAS | | |
| 3030 | Hedera | HBAR | | |
diff --git a/include/TrustWalletCore/TWCoinType.h b/include/TrustWalletCore/TWCoinType.h
index 7722e0bea4c..e953cccc197 100644
--- a/include/TrustWalletCore/TWCoinType.h
+++ b/include/TrustWalletCore/TWCoinType.h
@@ -182,6 +182,7 @@ enum TWCoinType {
TWCoinTypeZetaEVM = 20007000,
TWCoinTypeDydx = 22000118,
TWCoinTypeMerlin = 4200,
+ TWCoinTypeLightlink = 1890,
// end_of_tw_coin_type_marker_do_not_modify
};
diff --git a/kotlin/wallet-core-kotlin/src/commonTest/kotlin/com/trustwallet/core/test/CoinAddressDerivationTests.kt b/kotlin/wallet-core-kotlin/src/commonTest/kotlin/com/trustwallet/core/test/CoinAddressDerivationTests.kt
index b075a460195..0f50a958c6a 100644
--- a/kotlin/wallet-core-kotlin/src/commonTest/kotlin/com/trustwallet/core/test/CoinAddressDerivationTests.kt
+++ b/kotlin/wallet-core-kotlin/src/commonTest/kotlin/com/trustwallet/core/test/CoinAddressDerivationTests.kt
@@ -40,7 +40,7 @@ class CoinAddressDerivationTests {
Fantom, Celo, CronosChain, SmartBitcoinCash, KuCoinCommunityChain, Boba, Metis,
Aurora, Evmos, Moonriver, Moonbeam, KavaEvm, Klaytn, Meter, OKXChain, PolygonzkEVM, Scroll,
ConfluxeSpace, AcalaEVM, OpBNB, Neon, Base, Linea, Greenfield, Mantle, ZenEON, MantaPacific,
- ZetaEVM, Merlin,
+ ZetaEVM, Merlin, Lightlink,
-> "0x8f348F300873Fd5DA36950B2aC75a26584584feE"
Ronin -> "ronin:8f348F300873Fd5DA36950B2aC75a26584584feE"
diff --git a/registry.json b/registry.json
index acb68493aea..06b15a770e9 100644
--- a/registry.json
+++ b/registry.json
@@ -4658,5 +4658,36 @@
"rpc": "https://rpc.merlinchain.io",
"documentation": "https://docs.merlinchain.io/merlin-docs"
}
+ },
+ {
+ "id": "lightlink",
+ "name": "Lightlink",
+ "displayName": "Lightlink Phoenix",
+ "coinId": 1890,
+ "symbol": "ETH",
+ "decimals": 18,
+ "blockchain": "Ethereum",
+ "derivation": [
+ {
+ "path": "m/44'/60'/0'/0/0"
+ }
+ ],
+ "curve": "secp256k1",
+ "publicKeyType": "secp256k1Extended",
+ "chainId": "1890",
+ "addressHasher": "keccak256",
+ "explorer": {
+ "url": "https://phoenix.lightlink.io",
+ "txPath": "/tx/",
+ "accountPath": "/address/",
+ "sampleTx": "0xc65f82445aefc883fd4ffe09149c8ce48f61b670c0734528a49d4a8bd8309bb0",
+ "sampleAccount": "0x4566ED6c7a7fFc90E2C7cfF7eB9156262afD2fDe"
+ },
+ "info": {
+ "url": "https://lightlink.io",
+ "source": "https://github.com/lightlink-network",
+ "rpc": "https://endpoints.omniatech.io/v1/lightlink/phoenix/public",
+ "documentation": "https://docs.lightlink.io/lightlink-protocol"
+ }
}
]
diff --git a/rust/tw_any_coin/tests/coin_address_derivation_test.rs b/rust/tw_any_coin/tests/coin_address_derivation_test.rs
index 6225dc7304a..7a4189138a2 100644
--- a/rust/tw_any_coin/tests/coin_address_derivation_test.rs
+++ b/rust/tw_any_coin/tests/coin_address_derivation_test.rs
@@ -87,6 +87,7 @@ fn test_coin_address_derivation() {
| CoinType::MantaPacific
| CoinType::ZetaEVM
| CoinType::Merlin
+ | CoinType::Lightlink
// end_of_evm_address_derivation_tests_marker_do_not_modify
=> "0xAc1ec44E4f0ca7D172B7803f6836De87Fb72b309",
CoinType::Bitcoin
diff --git a/swift/Tests/CoinAddressDerivationTests.swift b/swift/Tests/CoinAddressDerivationTests.swift
index 25e187439f3..b4bb9d10cbb 100644
--- a/swift/Tests/CoinAddressDerivationTests.swift
+++ b/swift/Tests/CoinAddressDerivationTests.swift
@@ -115,7 +115,8 @@ class CoinAddressDerivationTests: XCTestCase {
.zenEON,
.mantaPacific,
.zetaEVM,
- .merlin:
+ .merlin,
+ .lightlink:
let expectedResult = "0x8f348F300873Fd5DA36950B2aC75a26584584feE"
assertCoinDerivation(coin, expectedResult, derivedAddress, address)
case .ronin:
diff --git a/tests/chains/Lightlink/TWCoinTypeTests.cpp b/tests/chains/Lightlink/TWCoinTypeTests.cpp
new file mode 100644
index 00000000000..1b41b162d87
--- /dev/null
+++ b/tests/chains/Lightlink/TWCoinTypeTests.cpp
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: Apache-2.0
+//
+// Copyright © 2017 Trust Wallet.
+
+#include "TestUtilities.h"
+#include
+#include
+
+TEST(TWLightlinkCoinType, TWCoinType) {
+ const auto coin = TWCoinTypeLightlink;
+ const auto symbol = WRAPS(TWCoinTypeConfigurationGetSymbol(coin));
+ const auto id = WRAPS(TWCoinTypeConfigurationGetID(coin));
+ const auto name = WRAPS(TWCoinTypeConfigurationGetName(coin));
+ const auto txId = WRAPS(TWStringCreateWithUTF8Bytes("0xc65f82445aefc883fd4ffe09149c8ce48f61b670c0734528a49d4a8bd8309bb0"));
+ const auto txUrl = WRAPS(TWCoinTypeConfigurationGetTransactionURL(coin, txId.get()));
+ const auto accId = WRAPS(TWStringCreateWithUTF8Bytes("0x4566ED6c7a7fFc90E2C7cfF7eB9156262afD2fDe"));
+ const auto accUrl = WRAPS(TWCoinTypeConfigurationGetAccountURL(coin, accId.get()));
+
+ assertStringsEqual(id, "lightlink");
+ assertStringsEqual(name, "Lightlink Phoenix");
+ assertStringsEqual(symbol, "ETH");
+ ASSERT_EQ(TWCoinTypeConfigurationGetDecimals(coin), 18);
+ ASSERT_EQ(TWCoinTypeBlockchain(coin), TWBlockchainEthereum);
+ ASSERT_EQ(TWCoinTypeP2pkhPrefix(coin), 0);
+ ASSERT_EQ(TWCoinTypeP2shPrefix(coin), 0);
+ ASSERT_EQ(TWCoinTypeStaticPrefix(coin), 0);
+ assertStringsEqual(txUrl, "https://phoenix.lightlink.io/tx/0xc65f82445aefc883fd4ffe09149c8ce48f61b670c0734528a49d4a8bd8309bb0");
+ assertStringsEqual(accUrl, "https://phoenix.lightlink.io/address/0x4566ED6c7a7fFc90E2C7cfF7eB9156262afD2fDe");
+}
diff --git a/tests/common/CoinAddressDerivationTests.cpp b/tests/common/CoinAddressDerivationTests.cpp
index 398db624bfd..1ecef1da434 100644
--- a/tests/common/CoinAddressDerivationTests.cpp
+++ b/tests/common/CoinAddressDerivationTests.cpp
@@ -85,6 +85,7 @@ TEST(Coin, DeriveAddress) {
case TWCoinTypeMantaPacific:
case TWCoinTypeZetaEVM:
case TWCoinTypeMerlin:
+ case TWCoinTypeLightlink:
// end_of_evm_address_derivation_tests_marker_do_not_modify
EXPECT_EQ(address, "0x9d8A62f656a8d1615C1294fd71e9CFb3E4855A4F");
break;