diff --git a/.gitignore b/.gitignore
index 84a7ecdcd..98ac9ab3a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
*.log
*.pyc
*.swp
+*.zip
.DS_Store
.atom/
.buildlog/
@@ -140,6 +141,7 @@ lib/tron/tron.dart
lib/wownero/wownero.dart
lib/zano/zano.dart
lib/decred/decred.dart
+lib/xelis/xelis.dart
ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png
ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png
diff --git a/README.md b/README.md
index ea796dbf2..1790c4e68 100644
--- a/README.md
+++ b/README.md
@@ -84,6 +84,12 @@ Cake Wallet includes support for several cryptocurrencies, including:
* Automatically generate new addresses
* Specify multiple recipients for batch sending
+### Xelis Specific Features
+
+* Store XEL and all native assets/tokens
+* Add custom tokens by asset ID
+* Specify multiple recipients for batch sending
+
# Monero.com by Cake Wallet for Android and iOS
## Open Source Monero-Only Wallet
diff --git a/analysis_options.yaml b/analysis_options.yaml
index bd35233ba..2ee64b902 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -23,6 +23,7 @@ analyzer:
lib/tron/cw_tron.dart,
lib/wownero/cw_wownero.dart,
lib/zano/cw_zano.dart,
+ lib/xelis/cw_xelis.dart,
]
language:
strict-casts: true
diff --git a/android/.project b/android/.project
index 17c95d4b1..9b27d1b7f 100644
--- a/android/.project
+++ b/android/.project
@@ -14,4 +14,15 @@
org.eclipse.buildship.core.gradleprojectnature
+
+
+ 1744859372158
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs
index 9d2efc8e7..e47955840 100644
--- a/android/.settings/org.eclipse.buildship.core.prefs
+++ b/android/.settings/org.eclipse.buildship.core.prefs
@@ -1,2 +1,13 @@
+arguments=
+auto.sync=false
+build.scans.enabled=false
+connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir=
-eclipse.preferences.version=1
\ No newline at end of file
+eclipse.preferences.version=1
+gradle.user.home=
+java.home=
+jvm.arguments=
+offline.mode=false
+override.workspace.settings=false
+show.console.view=false
+show.executions.view=false
diff --git a/assets/images/xelis_icon.png b/assets/images/xelis_icon.png
new file mode 100644
index 000000000..9239ab811
Binary files /dev/null and b/assets/images/xelis_icon.png differ
diff --git a/assets/images/xelis_testnet_icon.png b/assets/images/xelis_testnet_icon.png
new file mode 100644
index 000000000..3fb68b4be
Binary files /dev/null and b/assets/images/xelis_testnet_icon.png differ
diff --git a/assets/xelis_node_list.yml b/assets/xelis_node_list.yml
new file mode 100644
index 000000000..db92ebcf5
--- /dev/null
+++ b/assets/xelis_node_list.yml
@@ -0,0 +1,25 @@
+-
+ uri: us-node.xelis.io
+ useSSL: true
+ is_default: true
+-
+ uri: pl-node.xelis.io
+ useSSL: true
+-
+ uri: de-node.xelis.io
+ useSSL: true
+-
+ uri: fr-node.xelis.io
+ useSSL: true
+-
+ uri: sg-node.xelis.io
+ useSSL: true
+-
+ uri: uk-node.xelis.io
+ useSSL: true
+-
+ uri: ca-node.xelis.io
+ useSSL: true
+-
+ uri: testnet-node.xelis.io
+ useSSL: true
\ No newline at end of file
diff --git a/cakewallet.bat b/cakewallet.bat
index 1904c5710..86c7abe21 100644
--- a/cakewallet.bat
+++ b/cakewallet.bat
@@ -1,5 +1,5 @@
@echo off
-set cw_win_app_config=--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron
+set cw_win_app_config=--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --xelis
set cw_root=%cd%
set cw_archive_name=Cake Wallet.zip
set cw_archive_path=%cw_root%\%cw_archive_name%
@@ -24,7 +24,7 @@ IF NOT EXIST "%secrets_file_path%" (
) ELSE (echo === Using previously/already generated secrets file: %secrets_file_path% ===)
echo === Generating mobx models ===
-for /d %%i in (cw_core cw_monero cw_bitcoin cw_ethereum cw_evm cw_polygon cw_nano cw_bitcoin_cash cw_solana cw_tron .) do (
+for /d %%i in (cw_core cw_monero cw_bitcoin cw_ethereum cw_evm cw_polygon cw_nano cw_bitcoin_cash cw_solana cw_tron cw_xelis.) do (
cd %%i
call flutter pub get > nul
call dart run build_runner build --delete-conflicting-outputs > nul
diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart
index 4b0f9521e..366e19e50 100644
--- a/cw_core/lib/crypto_currency.dart
+++ b/cw_core/lib/crypto_currency.dart
@@ -111,7 +111,9 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen
CryptoCurrency.zano,
CryptoCurrency.ton,
CryptoCurrency.flip,
- CryptoCurrency.deuro
+ CryptoCurrency.deuro,
+ CryptoCurrency.xel,
+ CryptoCurrency.xet
];
static const havenCurrencies = [
@@ -234,6 +236,9 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen
static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18);
static const deuro = CryptoCurrency(title: 'DEURO', tag: 'ETH', fullName: 'Decentralized Euro', raw: 98, name: 'deuro', iconPath: 'assets/images/deuro_icon.png', decimals: 18);
+ static const xel = CryptoCurrency(title: 'XEL', fullName: 'Xelis', raw: 99, name: 'xel', iconPath: 'assets/images/xelis_icon.png', decimals: 8);
+ static const xet = CryptoCurrency(title: 'XET', fullName: 'Testnet Xelis', raw: 100, name: 'xet', iconPath: 'assets/images/xelis_testnet_icon.png', decimals: 8);
+
static final Map _rawCurrencyMap =
[...all, ...havenCurrencies].fold