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 f99db4e987c..94adc9f0ad5 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, KAIA, METER, OKXCHAIN, POLYGONZKEVM, SCROLL,
CONFLUXESPACE, ACALAEVM, OPBNB, NEON, BASE, LINEA, GREENFIELD, MANTLE, ZENEON, MANTAPACIFIC,
- ZETAEVM, MERLIN, LIGHTLINK, BLAST, BOUNCEBIT, ZKLINKNOVA,
+ ZETAEVM, MERLIN, LIGHTLINK, BLAST, BOUNCEBIT, ZKLINKNOVA, SONIC,
-> assertEquals("0x8f348F300873Fd5DA36950B2aC75a26584584feE", address)
RONIN -> assertEquals("ronin:8f348F300873Fd5DA36950B2aC75a26584584feE", address)
diff --git a/docs/registry.md b/docs/registry.md
index 1473aa7b5ca..2c0bce5d0bc 100644
--- a/docs/registry.md
+++ b/docs/registry.md
@@ -114,6 +114,7 @@ This list is generated from [./registry.json](../registry.json)
| 10000100 | Gnosis Chain | xDAI |
| |
| 10000118 | Osmosis | OSMO |
| |
| 10000145 | Smart Bitcoin Cash | BCH |
| |
+| 10000146 | Sonic | S |
| |
| 10000250 | Fantom | FTM |
| |
| 10000288 | Boba | BOBAETH |
| |
| 10000321 | KuCoin Community Chain | KCS |
| |
diff --git a/include/TrustWalletCore/TWCoinType.h b/include/TrustWalletCore/TWCoinType.h
index 9d2f10e36c9..da009c8f1ff 100644
--- a/include/TrustWalletCore/TWCoinType.h
+++ b/include/TrustWalletCore/TWCoinType.h
@@ -187,6 +187,7 @@ enum TWCoinType {
TWCoinTypeBounceBit = 6001,
TWCoinTypeZkLinkNova = 810180,
TWCoinTypePactus = 21888,
+ TWCoinTypeSonic = 10000146,
// 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 959fd4821eb..77417a3bc42 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, Kaia, Meter, OKXChain, PolygonzkEVM, Scroll,
ConfluxeSpace, AcalaEVM, OpBNB, Neon, Base, Linea, Greenfield, Mantle, ZenEON, MantaPacific,
- ZetaEVM, Merlin, Lightlink, Blast, BounceBit, ZkLinkNova,
+ ZetaEVM, Merlin, Lightlink, Blast, BounceBit, ZkLinkNova, Sonic,
-> "0x8f348F300873Fd5DA36950B2aC75a26584584feE"
Ronin -> "ronin:8f348F300873Fd5DA36950B2aC75a26584584feE"
diff --git a/registry.json b/registry.json
index c7abaa1b929..c4815092bb7 100644
--- a/registry.json
+++ b/registry.json
@@ -4788,6 +4788,36 @@
"documentation": "https://docs.zklink.io"
}
},
+ {
+ "id": "sonic",
+ "name": "Sonic",
+ "coinId": 10000146,
+ "symbol": "S",
+ "decimals": 18,
+ "blockchain": "Ethereum",
+ "derivation": [
+ {
+ "path": "m/44'/60'/0'/0/0"
+ }
+ ],
+ "curve": "secp256k1",
+ "publicKeyType": "secp256k1Extended",
+ "chainId": "146",
+ "addressHasher": "keccak256",
+ "explorer": {
+ "url": "https://sonicscan.org",
+ "txPath": "/tx/",
+ "accountPath": "/address/",
+ "sampleTx": "0x886c34de9e054c741b2bcb15c3a3e0382e3ed7a48f2c6f2a489f6d82abdd4a7c",
+ "sampleAccount": "0x9c174f0e2d11559447e5fe2815d930475be19016"
+ },
+ "info": {
+ "url": "https://www.soniclabs.com",
+ "source": "https://github.com/Fantom-foundation/Sonic",
+ "rpc": "https://rpc.soniclabs.com",
+ "documentation": "https://docs.soniclabs.com"
+ }
+ },
{
"id": "pactus",
"name": "Pactus",
diff --git a/rust/tw_tests/tests/coin_address_derivation_test.rs b/rust/tw_tests/tests/coin_address_derivation_test.rs
index 34c318c09f4..44725a3d910 100644
--- a/rust/tw_tests/tests/coin_address_derivation_test.rs
+++ b/rust/tw_tests/tests/coin_address_derivation_test.rs
@@ -91,6 +91,7 @@ fn test_coin_address_derivation() {
| CoinType::Blast
| CoinType::BounceBit
| CoinType::ZkLinkNova
+ | CoinType::Sonic
// end_of_evm_address_derivation_tests_marker_do_not_modify
=> "0xAc1ec44E4f0ca7D172B7803f6836De87Fb72b309",
CoinType::Bitcoin => "bc1qten42eesehw0ktddcp0fws7d3ycsqez3f7d5yt",
diff --git a/swift/Tests/CoinAddressDerivationTests.swift b/swift/Tests/CoinAddressDerivationTests.swift
index 72c611f4083..24631acb24a 100644
--- a/swift/Tests/CoinAddressDerivationTests.swift
+++ b/swift/Tests/CoinAddressDerivationTests.swift
@@ -119,7 +119,8 @@ class CoinAddressDerivationTests: XCTestCase {
.lightlink,
.blast,
.bounceBit,
- .zkLinkNova:
+ .zkLinkNova,
+ .sonic:
let expectedResult = "0x8f348F300873Fd5DA36950B2aC75a26584584feE"
assertCoinDerivation(coin, expectedResult, derivedAddress, address)
case .ronin:
diff --git a/tests/chains/Sonic/TWCoinTypeTests.cpp b/tests/chains/Sonic/TWCoinTypeTests.cpp
new file mode 100644
index 00000000000..a1af7ec9d24
--- /dev/null
+++ b/tests/chains/Sonic/TWCoinTypeTests.cpp
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: Apache-2.0
+//
+// Copyright © 2017 Trust Wallet.
+
+#include "TestUtilities.h"
+#include
+#include
+
+TEST(TWSonicCoinType, TWCoinType) {
+ const auto coin = TWCoinTypeSonic;
+ const auto symbol = WRAPS(TWCoinTypeConfigurationGetSymbol(coin));
+ const auto id = WRAPS(TWCoinTypeConfigurationGetID(coin));
+ const auto name = WRAPS(TWCoinTypeConfigurationGetName(coin));
+ const auto txId = WRAPS(TWStringCreateWithUTF8Bytes("0x886c34de9e054c741b2bcb15c3a3e0382e3ed7a48f2c6f2a489f6d82abdd4a7c"));
+ const auto txUrl = WRAPS(TWCoinTypeConfigurationGetTransactionURL(coin, txId.get()));
+ const auto accId = WRAPS(TWStringCreateWithUTF8Bytes("0x9c174f0e2d11559447e5fe2815d930475be19016"));
+ const auto accUrl = WRAPS(TWCoinTypeConfigurationGetAccountURL(coin, accId.get()));
+
+ assertStringsEqual(id, "sonic");
+ assertStringsEqual(name, "Sonic");
+ assertStringsEqual(symbol, "S");
+ 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://sonicscan.org/tx/0x886c34de9e054c741b2bcb15c3a3e0382e3ed7a48f2c6f2a489f6d82abdd4a7c");
+ assertStringsEqual(accUrl, "https://sonicscan.org/address/0x9c174f0e2d11559447e5fe2815d930475be19016");
+}
diff --git a/tests/common/CoinAddressDerivationTests.cpp b/tests/common/CoinAddressDerivationTests.cpp
index 6df5336c5c0..c537a8d8f90 100644
--- a/tests/common/CoinAddressDerivationTests.cpp
+++ b/tests/common/CoinAddressDerivationTests.cpp
@@ -89,6 +89,7 @@ TEST(Coin, DeriveAddress) {
case TWCoinTypeBlast:
case TWCoinTypeBounceBit:
case TWCoinTypeZkLinkNova:
+ case TWCoinTypeSonic:
// end_of_evm_address_derivation_tests_marker_do_not_modify
EXPECT_EQ(address, "0x9d8A62f656a8d1615C1294fd71e9CFb3E4855A4F");
break;