mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-04-15 02:31:57 +00:00
commit
906c2c3a97
6 changed files with 50 additions and 74 deletions
crypto_plugins
docs
lib
services/exchange/nanswap
wallets/wallet/impl
|
@ -1 +1 @@
|
|||
Subproject commit 238455f2b3fe39564cc617ed0ea45f22971aa644
|
||||
Subproject commit 25e6cb3a3e7bee04e425af6beccb47e8d0708fdb
|
|
@ -1 +1 @@
|
|||
Subproject commit f111cdf183bec1c71c2b20cf265d3879a81f7903
|
||||
Subproject commit 6f1310eccd336fb3c8dc00b61e39a3f0f3a2b59a
|
|
@ -13,12 +13,12 @@ Here you will find instructions on how to install the necessary tools for buildi
|
|||
The following instructions are for building and running on a Linux host. Alternatively, see the [Mac](#mac-host) and/or [Windows](#windows-host) section. This entire section (except for the Android Studio section) needs to be completed in WSL if building on a Windows host.
|
||||
|
||||
### Flutter
|
||||
Install Flutter 3.29.0 by [following their guide](https://docs.flutter.dev/get-started/install/linux/desktop?tab=download#install-the-flutter-sdk). You can also clone https://github.com/flutter/flutter, check out the `3.29.0` tag, and add its `flutter/bin` folder to your PATH as in
|
||||
Install Flutter 3.29.2 by [following their guide](https://docs.flutter.dev/get-started/install/linux/desktop?tab=download#install-the-flutter-sdk). You can also clone https://github.com/flutter/flutter, check out the `3.29.2` tag, and add its `flutter/bin` folder to your PATH as in
|
||||
```sh
|
||||
FLUTTER_DIR="$HOME/development/flutter"
|
||||
git clone https://github.com/flutter/flutter.git "$FLUTTER_DIR"
|
||||
cd "$FLUTTER_DIR"
|
||||
git checkout 3.29.0
|
||||
git checkout 3.29.2
|
||||
echo 'export PATH="$PATH:'"$FLUTTER_DIR"'/bin"' >> "$HOME/.profile"
|
||||
source "$HOME/.profile"
|
||||
flutter precache
|
||||
|
@ -38,7 +38,7 @@ Use `Tools > SDK Manager` to install:
|
|||
- `SDK Tools > Android SDK command line tools`
|
||||
- `SDK Tools > CMake`
|
||||
and for Android builds,
|
||||
- `SDK Tools > Android SDK (API 30)`
|
||||
- `SDK Tools > Android SDK (API 35)`
|
||||
- `SDK Tools > NDK`
|
||||
|
||||
Then in `File > Settings > Plugins`, install the **Flutter** and **Dart** plugins and restart the IDE. In `File > Settings > Languages & Frameworks > Flutter > Editor`, enable auto format on save to match the project's code style. If you have problems with the Dart SDK, make sure to run `flutter` in a terminal to download it (use `source ~/.bashrc` to update your environment variables if you're still using the same terminal from which you ran `setup.sh`). Run `flutter doctor` to install any missing dependencies and review and agree to any license agreements.
|
||||
|
@ -68,13 +68,13 @@ sudo apt install pipx libgcrypt20-dev libglib2.0-dev libsecret-1-dev
|
|||
pipx install meson==0.64.1 markdown==3.4.1 markupsafe==2.1.1 jinja2==3.1.2 pygments==2.13.0 toml==0.10.2 typogrify==2.0.7 tomli==2.0.1
|
||||
```
|
||||
|
||||
Install [Rust](https://www.rust-lang.org/tools/install) via [rustup.rs](https://rustup.rs), the required Rust toolchains, and `cargo-ndk 2.12.7` with command:
|
||||
Install [Rust](https://www.rust-lang.org/tools/install) via [rustup.rs](https://rustup.rs), the required Rust toolchains, and `cargo-ndk` with command:
|
||||
```
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
source ~/.bashrc
|
||||
rustup install 1.85.1 1.81.0
|
||||
rustup default 1.85.1
|
||||
cargo install cargo-ndk --version 2.12.7 --locked
|
||||
cargo install cargo-ndk
|
||||
```
|
||||
|
||||
Android specific dependencies:
|
||||
|
@ -215,7 +215,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|||
source ~/.bashrc
|
||||
rustup install 1.85.1 1.81.0
|
||||
rustup default 1.85.1
|
||||
cargo install cargo-ndk --version 2.12.7 --locked
|
||||
cargo install cargo-ndk
|
||||
cargo install cbindgen cargo-lipo
|
||||
rustup target add aarch64-apple-ios aarch64-apple-darwin
|
||||
```
|
||||
|
@ -223,7 +223,7 @@ rustup target add aarch64-apple-ios aarch64-apple-darwin
|
|||
Optionally download [Android Studio](https://developer.android.com/studio) as an IDE and activate its Dart and Flutter plugins. VS Code may work as an alternative, but this is not recommended.
|
||||
|
||||
### Flutter
|
||||
Install [Flutter](https://docs.flutter.dev/get-started/install) 3.29.0 on your Mac host by following [these instructions](https://docs.flutter.dev/get-started/install/macos). Run `flutter doctor` in a terminal to confirm its installation.
|
||||
Install [Flutter](https://docs.flutter.dev/get-started/install) 3.29.2 on your Mac host by following [these instructions](https://docs.flutter.dev/get-started/install/macos). Run `flutter doctor` in a terminal to confirm its installation.
|
||||
|
||||
### Build plugins and configure
|
||||
#### Building plugins for iOS
|
||||
|
@ -290,13 +290,13 @@ If the DLLs were built on the WSL filesystem instead of on Windows, copy the res
|
|||
Frostdart will be built by the Windows host later.
|
||||
|
||||
### Install Flutter on Windows host
|
||||
Install Flutter 3.29.0 on your Windows host (not in WSL2) by [following their guide](https://docs.flutter.dev/get-started/install/windows/desktop?tab=download#install-the-flutter-sdk) or by cloning https://github.com/flutter/flutter, checking out the `3.29.0` tag, and adding its `flutter/bin` folder to your PATH as in
|
||||
Install Flutter 3.29.2 on your Windows host (not in WSL2) by [following their guide](https://docs.flutter.dev/get-started/install/windows/desktop?tab=download#install-the-flutter-sdk) or by cloning https://github.com/flutter/flutter, checking out the `3.29.2` tag, and adding its `flutter/bin` folder to your PATH as in
|
||||
```bat
|
||||
@echo off
|
||||
set "FLUTTER_DIR=%USERPROFILE%\development\flutter"
|
||||
git clone https://github.com/flutter/flutter.git "%FLUTTER_DIR%"
|
||||
cd /d "%FLUTTER_DIR%"
|
||||
git checkout 3.29.0
|
||||
git checkout 3.29.2
|
||||
setx PATH "%PATH%;%FLUTTER_DIR%\bin"
|
||||
echo Flutter setup completed. Please restart your command prompt.
|
||||
```
|
||||
|
@ -308,7 +308,7 @@ Install [Rust](https://www.rust-lang.org/tools/install) on the Windows host (not
|
|||
```
|
||||
rustup install 1.85.1 1.81.0
|
||||
rustup default 1.85.1
|
||||
cargo install cargo-ndk --version 2.12.7 --locked
|
||||
cargo install cargo-ndk
|
||||
```
|
||||
|
||||
### Windows SDK and Developer Mode
|
||||
|
|
|
@ -4,7 +4,7 @@ class NCurrency {
|
|||
final String name;
|
||||
final String image;
|
||||
final String network;
|
||||
final bool hasExternalId;
|
||||
final bool? hasExternalId;
|
||||
final bool feeLess;
|
||||
|
||||
NCurrency({
|
||||
|
@ -24,7 +24,7 @@ class NCurrency {
|
|||
name: json['name'] as String,
|
||||
image: json['image'] as String,
|
||||
network: json['network'] as String,
|
||||
hasExternalId: json['hasExternalId'] as bool,
|
||||
hasExternalId: json['hasExternalId'] as bool?,
|
||||
feeLess: json['feeless'] as bool,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -33,12 +33,11 @@ class NanswapAPI {
|
|||
try {
|
||||
final response = await _client.get(
|
||||
url: uri,
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
proxyInfo: Prefs.instance.useTor
|
||||
? TorService.sharedInstance.getProxyInfo()
|
||||
: null,
|
||||
headers: {'Accept': 'application/json'},
|
||||
proxyInfo:
|
||||
Prefs.instance.useTor
|
||||
? TorService.sharedInstance.getProxyInfo()
|
||||
: null,
|
||||
);
|
||||
|
||||
code = response.code;
|
||||
|
@ -56,10 +55,7 @@ class NanswapAPI {
|
|||
}
|
||||
}
|
||||
|
||||
Future<dynamic> _makePostRequest(
|
||||
Uri uri,
|
||||
Map<String, dynamic> body,
|
||||
) async {
|
||||
Future<dynamic> _makePostRequest(Uri uri, Map<String, dynamic> body) async {
|
||||
int code = -1;
|
||||
try {
|
||||
final response = await _client.post(
|
||||
|
@ -70,9 +66,10 @@ class NanswapAPI {
|
|||
'Accept': 'application/json',
|
||||
},
|
||||
body: jsonEncode(body),
|
||||
proxyInfo: Prefs.instance.useTor
|
||||
? TorService.sharedInstance.getProxyInfo()
|
||||
: null,
|
||||
proxyInfo:
|
||||
Prefs.instance.useTor
|
||||
? TorService.sharedInstance.getProxyInfo()
|
||||
: null,
|
||||
);
|
||||
|
||||
code = response.code;
|
||||
|
@ -117,9 +114,7 @@ class NanswapAPI {
|
|||
//
|
||||
// application/json
|
||||
Future<ExchangeResponse<List<NCurrency>>> getSupportedCurrencies() async {
|
||||
final uri = _buildUri(
|
||||
endpoint: "all-currencies",
|
||||
);
|
||||
final uri = _buildUri(endpoint: "all-currencies");
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
|
@ -128,11 +123,7 @@ class NanswapAPI {
|
|||
for (final key in (json as Map).keys) {
|
||||
final _map = json[key] as Map;
|
||||
_map["id"] = key;
|
||||
result.add(
|
||||
NCurrency.fromJson(
|
||||
Map<String, dynamic>.from(_map),
|
||||
),
|
||||
);
|
||||
result.add(NCurrency.fromJson(Map<String, dynamic>.from(_map)));
|
||||
}
|
||||
|
||||
return ExchangeResponse(value: result);
|
||||
|
@ -196,11 +187,7 @@ class NanswapAPI {
|
|||
map["to"] ??= to.toUpperCase();
|
||||
map["from"] ??= from.toUpperCase();
|
||||
|
||||
return ExchangeResponse(
|
||||
value: NEstimate.fromJson(
|
||||
map,
|
||||
),
|
||||
);
|
||||
return ExchangeResponse(value: NEstimate.fromJson(map));
|
||||
} catch (e, s) {
|
||||
Logging.instance.e(
|
||||
"Nanswap.getEstimate() response was: $json",
|
||||
|
@ -270,11 +257,7 @@ class NanswapAPI {
|
|||
map["to"] ??= to.toUpperCase();
|
||||
map["from"] ??= from.toUpperCase();
|
||||
|
||||
return ExchangeResponse(
|
||||
value: NEstimate.fromJson(
|
||||
map,
|
||||
),
|
||||
);
|
||||
return ExchangeResponse(value: NEstimate.fromJson(map));
|
||||
} catch (e, s) {
|
||||
Logging.instance.e(
|
||||
"Nanswap.getEstimateReverse() exception: ",
|
||||
|
@ -312,20 +295,14 @@ class NanswapAPI {
|
|||
}) async {
|
||||
final uri = _buildUri(
|
||||
endpoint: "get-limits",
|
||||
params: {
|
||||
"to": to.toUpperCase(),
|
||||
"from": from.toUpperCase(),
|
||||
},
|
||||
params: {"to": to.toUpperCase(), "from": from.toUpperCase()},
|
||||
);
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
|
||||
return ExchangeResponse(
|
||||
value: (
|
||||
minFrom: json["min"] as num,
|
||||
maxFrom: json["max"] as num,
|
||||
),
|
||||
value: (minFrom: json["min"] as num, maxFrom: json["max"] as num),
|
||||
);
|
||||
} catch (e, s) {
|
||||
Logging.instance.e(
|
||||
|
@ -397,9 +374,7 @@ class NanswapAPI {
|
|||
required String toAddress,
|
||||
String? extraIdOrMemo,
|
||||
}) async {
|
||||
final uri = _buildUri(
|
||||
endpoint: "create-order",
|
||||
);
|
||||
final uri = _buildUri(endpoint: "create-order");
|
||||
|
||||
final body = {
|
||||
"from": from.toUpperCase(),
|
||||
|
@ -417,9 +392,7 @@ class NanswapAPI {
|
|||
|
||||
try {
|
||||
return ExchangeResponse(
|
||||
value: NTrade.fromJson(
|
||||
Map<String, dynamic>.from(json as Map),
|
||||
),
|
||||
value: NTrade.fromJson(Map<String, dynamic>.from(json as Map)),
|
||||
);
|
||||
} catch (_) {
|
||||
debugPrint(json.toString());
|
||||
|
@ -489,21 +462,14 @@ class NanswapAPI {
|
|||
//
|
||||
// The order id
|
||||
Future<ExchangeResponse<NTrade>> getOrder({required String id}) async {
|
||||
final uri = _buildUri(
|
||||
endpoint: "get-order",
|
||||
params: {
|
||||
"id": id,
|
||||
},
|
||||
);
|
||||
final uri = _buildUri(endpoint: "get-order", params: {"id": id});
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
|
||||
try {
|
||||
return ExchangeResponse(
|
||||
value: NTrade.fromJson(
|
||||
Map<String, dynamic>.from(json as Map),
|
||||
),
|
||||
value: NTrade.fromJson(Map<String, dynamic>.from(json as Map)),
|
||||
);
|
||||
} catch (_) {
|
||||
debugPrint(json.toString());
|
||||
|
|
|
@ -361,12 +361,22 @@ class XelisWallet extends LibXelisWallet {
|
|||
await libXelisWallet!.rescan(topoheight: BigInt.from(pruningHeight));
|
||||
}
|
||||
|
||||
final txList = objTransactions ??
|
||||
(await libXelisWallet!.allHistory())
|
||||
.map((jsonStr) => xelis_sdk.TransactionEntry.fromJson(
|
||||
json.decode(jsonStr),
|
||||
) as xelis_sdk.TransactionEntry)
|
||||
.toList();
|
||||
xelis_sdk.TransactionEntry _checkDecodeJsonStringTxEntry(
|
||||
String jsonString,
|
||||
) {
|
||||
final json = jsonDecode(jsonString);
|
||||
if (json is Map) {
|
||||
return xelis_sdk.TransactionEntry.fromJson(json.cast());
|
||||
}
|
||||
|
||||
throw Exception("Not a Map on jsonDecode($jsonString)");
|
||||
}
|
||||
|
||||
final txList =
|
||||
objTransactions ??
|
||||
(await libXelisWallet!.allHistory())
|
||||
.map(_checkDecodeJsonStringTxEntry)
|
||||
.toList();
|
||||
|
||||
final List<TransactionV2> txns = [];
|
||||
|
||||
|
|
Loading…
Reference in a new issue