Compare commits

...

67 Commits

Author SHA1 Message Date
wowario 804c7586d5 Update 'README.md'
3 years ago
wowario cc0e40e6dc Merge pull request 'update' (#13) from wowario/cyberwow:update into master
3 years ago
wowario f504bad5ae
update img screen
3 years ago
wowario fce1ee2b22
update openssl
3 years ago
wowario 7f69814827
bump to wownero v0.9.3.3
3 years ago
wowario 7918db09ec
remove google link
3 years ago
wowario f53fd248d6
update README.md
4 years ago
jw b3b54abed6
Merge pull request #10 from fuwa0529/fix-fdroid
4 years ago
fuwa d27ff15c63 up version
4 years ago
fuwa 93e8017435 fix build for fdroid
4 years ago
jw d62434b2a9
Merge pull request #9 from fuwa0529/dev
4 years ago
fuwa 7598775243 fix build for non nix-shell
4 years ago
fuwa 77d637aaf1 use wownero 0.8
4 years ago
fuwa 589e223c4a use flutter stable
4 years ago
fuwa ffc9aceeae add unbound
4 years ago
fuwa 87fd4e8bee add bsd3 license to shell.nix
4 years ago
fuwa e9bc70a26d clean up makefile
4 years ago
fuwa 95a6ad7ae5 point to the fdroid build script in readme
4 years ago
fuwa 44dad34fa2 bundle deps
4 years ago
fuwa a0557ba036 update flutter beta to 1.17
4 years ago
fuwa a598d517cd update openssl
4 years ago
fuwa b845c6eee2 use ndk21b
4 years ago
fuwa c60b82e608 only build daemon
4 years ago
fuwa 034baa21d2 remove zlib
4 years ago
fuwa a4cf3bb9de set theme background color
4 years ago
fuwa 00b12b09a9 add build-bundle task
4 years ago
fuwa 022ed929dc remove unbound
4 years ago
fuwa 4386f00f6a use dev-v0.8
4 years ago
fuwa e2d90dbca9 update wownero build script
4 years ago
fuwa 73a50151bd add changelog
4 years ago
jw cc5f0a6882
Merge pull request #7 from fuwa0529/dev
4 years ago
fuwa cff517b6b0 up version
4 years ago
fuwa 62edd0c4f9 update openssl
4 years ago
fuwa b02b5f8bb3 useless clean up using switch
4 years ago
fuwa c6d6f2984f fix ui lag caused by large tx pool
4 years ago
fuwa 4e16219f61 fix nullable intent
4 years ago
fuwa 597b9bdb84 upgrade gradle to 6.3 for jdk13
4 years ago
fuwa 54ff3cf83c rework resyncing state
4 years ago
fuwa 03cbfc78f3 use jdk13
4 years ago
fuwa 48b87fa11f log to /dev/null
4 years ago
fuwa 14b1d83672 increase terminal buffer size
4 years ago
jw 647412fb81
Merge pull request #6 from fuwa0529/dev
4 years ago
fuwa 52867a79d4 up version
4 years ago
fuwa 4759e76b32 update pub
4 years ago
fuwa 094417ac68 use linesplitter on stdout
4 years ago
fuwa a35249348f fix checking for connections
4 years ago
fuwa 5d850823ca update to flutter beta-1.15.17
4 years ago
fuwa 5f63666ab7 add a link to fdroid build status
4 years ago
fuwa fad6080035 use beta channel
4 years ago
fuwa 12b41c1d54 add libvirt to fdroid.shell
4 years ago
fuwa 1c61f7c8d5 disable keyboard suggestions
4 years ago
fuwa deb2d961c4 fix a null switch
4 years ago
fuwa c31df8bf2f use jdk12
4 years ago
fuwa e316b7b897 update ndk to r20b
4 years ago
fuwa e5b1283103 update flutter deps
4 years ago
fuwa 54baa98ae3 add libvirt for fdroid
4 years ago
fuwa 98ab9869aa update wow-fake-build
4 years ago
fuwa c7972d63a5 update shell
4 years ago
fuwa f5f457bd65 add sdk tools to path
4 years ago
fuwa ecd17336ad add interface/rpc
4 years ago
fuwa a258f7ee9e add logic/view/rpc
4 years ago
fuwa 7fa0c4d249 move rpc to sensor
4 years ago
fuwa 329f3d996a move daemon to sensor
4 years ago
fuwa bf652633f8 move controller to logic
4 years ago
fuwa 9d52582552 remove unused helper
4 years ago
fuwa fa4e1458e2 add watch-build task
4 years ago
fuwa ec07428e6d update zsh config in shell.nix
4 years ago

@ -38,6 +38,10 @@ watch:
find cyberwow/lib/ -name '*.dart' | \
entr kill -USR1 `cat /tmp/flutter.pid`
watch-build:
find cyberwow/lib/ -name '*.dart' | \
entr $(MAKE) build-debug
run:
cd cyberwow && \
flutter run --debug --pid-file /tmp/flutter.pid
@ -46,32 +50,17 @@ run-release:
cd cyberwow && \
flutter run --release --pid-file /tmp/flutter.pid
# clang -target aarch64-linux-android21 cyberwow/native/hello.c -o cyberwow/native/output/hello
c:
clang -target x86_64-linux-android21 cyberwow/native/hello.c -o cyberwow/native/output/x86_64/wownerod
build-c: c
cd cyberwow && \
flutter clean
push:
adb push cyberwow/native/output/hello /data/local/tmp
test-android:
adb shell /data/local/tmp/hello
test-c: c push test-android
collect:
cp ../vendor/wownero/bin/wownerod cyberwow/native/output/arm64/
build:
cd cyberwow && \
flutter build apk --target-platform android-arm64
build-bundle:
cd cyberwow && \
flutter build appbundle --target-platform android-arm64
build-debug:
cd cyberwow && \
flutter build apk --debug --target-platform android-arm64
flutter build appbundle --debug --target-platform android-arm64
install: build
cd cyberwow && \
@ -83,8 +72,6 @@ script := etc/scripts/build-external-libs
wow: clean-external-libs collect-wownero build
wow-fake: clean-external-libs collect-wownero-fake build
clean-external-libs:
$(script)/clean.sh
@ -99,11 +86,7 @@ boost: iconv
$(script)/boost/fetch.sh
$(script)/boost/build.sh
zlib: toolchain
$(script)/zlib/fetch.sh
$(script)/zlib/build.sh
openssl: zlib
openssl: toolchain
$(script)/openssl/fetch.sh
$(script)/openssl/build.sh
@ -122,10 +105,6 @@ wownero: openssl boost sodium toolchain-wow
collect-wownero: wownero
$(script)/collect.sh
collect-wownero-fake:
$(script)/collect-fake.sh
# etc
remove-exif:

@ -1,66 +1,3 @@
# CyberWOW
# CyberWOW Mobile Node
A dumb android pruned full node for Wownero.
[<img src="https://f-droid.org/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/en/packages/org.wownero.cyberwow/)
<a href='https://play.google.com/store/apps/details?id=org.wownero.cyberwow'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height='80'/></a>
## How to build
### Compile wownerod for android-arm64
#### Simple method with Docker
```
pushd .
git clone https://github.com/wownero/wownero
cd wownero
git submodule init && git submodule update
docker build -f utils/build_scripts/android64.Dockerfile -t wownero-android .
# Create container
docker create -it --name wownero-android wownero-android bash
# Get binaries
docker cp wownero-android:/src/build/release/bin .
```
The binary needed is `./bin/wownerod`.
#### Alternative methods
1. One docker instance per hash
See `etc/scripts/docker-build-wownero.sh`, modify the value of `version` per build.
2. Debian based system similar to F-droid
See the `wow` task in `Makefile`.
### Install flutter and make sure it's in path
### Compile CyberWOW
```
popd
git clone https://github.com/wownero/cyberwow/
cd cyberwow
mkdir -p cyberwow/android/app/src/main/jniLibs/arm64-v8a
# Copy wownerod that we just built
cp $PATH_TO_WOWNEROD \
cyberwow/android/app/src/main/jniLibs/arm64-v8a/libwownerod.so
make build
```
The resulting apk is `cyberwow/build/app/outputs/apk/release/app-release.apk`.
## How to use custom start up arguments
Sending the arguments to an unopened CyberWOW app will cause `wownerod` to use them on start up, for example:
`--add-exclusive-node 192.168.1.3`
archived

@ -41,8 +41,8 @@ android {
applicationId "org.wownero.cyberwow"
minSdkVersion 26
targetSdkVersion 29
versionCode 23
versionName "0.7.0.0-j"
versionCode 28
versionName "0.9.3.3"
}
if(project.hasProperty("RELEASE_STORE_FILE")) {

@ -44,9 +44,9 @@ class MainActivity: FlutterActivity() {
}
internal fun handleSendText(intent:Intent) {
val text:String = intent.getStringExtra(Intent.EXTRA_TEXT)
val text:String? = intent.getStringExtra(Intent.EXTRA_TEXT)
if (initialIntentSet == false) {
initialIntentText = text
initialIntentText = text ?: "";
}
}

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

@ -35,6 +35,8 @@ const emuHost = '192.168.10.100';
const host = isEmu ? emuHost : '127.0.0.1';
const stdoutLineBufferSize = 100;
const stdoutLineBufferSize = 200;
const bannerShownKey = 'banner-shown';
const int maxPoolTxSize = 5000;

@ -34,6 +34,7 @@ final _theme = ThemeData
accentColor: crtGreen,
cursorColor: crtGreen,
backgroundColor: Colors.black,
scaffoldBackgroundColor: Colors.black,
textTheme: TextTheme
@ -83,7 +84,7 @@ final config = CryptoConfig
(
'libwownerod.so',
'wownerod',
'Follow the white rabbit.',
'You ever danced with the devil in the pale moonlight?',
70,
_theme,
34568,
@ -95,6 +96,7 @@ final config = CryptoConfig
'--no-igd',
'--check-updates=disabled',
'--disable-dns-checkpoints',
'--log-file=/dev/null',
'--max-log-file-size=0',
'--p2p-use-ipv6',
],

@ -1,36 +0,0 @@
/*
Copyright 2019 fuwa
This file is part of CyberWOW.
CyberWOW is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
CyberWOW is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:async';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:flutter/foundation.dart';
Future<String> getBinaryPath(final String name) async {
final tmpDir = await getTemporaryDirectory();
return tmpDir.path + '/' + name;
}
Future<bool> binaryExists(final String name) async {
final binPath = await getBinaryPath(name);
return new File(binPath).exists();
}

@ -26,10 +26,9 @@ import 'dart:io';
import 'dart:async';
import 'dart:convert';
import '../helper.dart';
import '../../config.dart' as config;
import '../../logging.dart';
import '../../logic/sensor/helper.dart' as helper;
import '../../../config.dart' as config;
import '../../../logging.dart';
import '../../sensor/helper.dart' as helper;
typedef ShouldExit = bool Function();
@ -80,7 +79,11 @@ Stream<String> runBinary
if (input != null) {
printInput();
}
await for (final line in outputProcess.stdout.transform(utf8.decoder)) {
final _stdout = outputProcess.stdout
.transform(utf8.decoder).transform(const LineSplitter());
await for (final line in _stdout) {
log.finest('process output: ' + line);
yield line;
}

@ -23,11 +23,10 @@ import 'package:logging/logging.dart';
import 'dart:ui';
import 'dart:async';
import 'rpc/rpc.dart' as rpc;
import '../config.dart';
import '../logging.dart';
import '../helper.dart';
import '../../config.dart';
import '../../logging.dart';
import '../../helper.dart';
typedef GetNotificationFunc = AppLifecycleState Function();

@ -0,0 +1,79 @@
/*
Copyright 2019 fuwa
This file is part of CyberWOW.
CyberWOW is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
CyberWOW is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
import '../../../logging.dart';
Future<http.Response> rpcHTTP(final String method) async {
final url = 'http://${config.host}:${config.c.port}/json_rpc';
final body = json.encode
(
{
'jsonrpc': '2.0',
'method': method,
}
);
try {
final response = await http.post
( url,
body: body
);
return response;
}
catch (e) {
log.warning(e);
return null;
}
}
dynamic jsonDecode(final String responseBody) => json.decode(responseBody);
Future<dynamic> rpc(final String method, {final String field}) async {
final response = await rpcHTTP(method);
if (response == null) return null;
if (response.statusCode != 200) {
return null;
} else {
final _body = await compute(jsonDecode, response.body);
final _result = _body['result'];
if (_result == null) return null;
final _field = field == null ? _result : _result[field];
return _field;
}
}
Future<String> rpcString(final String method, {final String field}) async {
final _field = await rpc(method, field: field);
return pretty(_field);
}

@ -0,0 +1,64 @@
/*
Copyright 2019 fuwa
This file is part of CyberWOW.
CyberWOW is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
CyberWOW is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
import '../../../logging.dart';
Future<http.Response> rpc2(final String method) async {
final url = 'http://${config.host}:${config.c.port}/${method}';
try {
final response = await http.post
( url,
);
return response;
}
catch (e) {
log.warning(e);
return null;
}
}
dynamic jsonDecode(final String responseBody) => json.decode(responseBody);
Future<String> rpc2String(final String method, {final String field}) async {
final response = await rpc2(method);
if (response == null) return '';
if (response.statusCode != 200) {
return '';
} else {
final _body = await compute(jsonDecode, response.body);
final _field = field == null ? _body: _body[field];
return pretty(_field);
}
}

@ -23,16 +23,13 @@ import 'dart:async';
import 'dart:convert';
import 'rpc/rpc.dart' as rpc;
import '../config.dart' as config;
import '../logging.dart';
import '../../config.dart' as config;
import '../../logging.dart';
Future<bool> isConnected() async {
final _outPeers = await rpc.outgoingConnectionsCount();
final _inPeers = await rpc.incomingConnectionsCount();
log.finest('outPeers: ${_outPeers}');
log.finest('inPeers: ${_inPeers}');
return _outPeers + _inPeers > 0;
final _connections = await rpc.getConnectionsSimple();
log.finer('cyberwow: _connections: ${_connections}');
return !_connections.isEmpty;
}
Future<bool> isSynced() async {

@ -23,65 +23,10 @@ import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';
import '../../config.dart' as config;
import '../../helper.dart';
import '../../logging.dart';
int rpcID = 0;
Future<http.Response> rpcHTTP(final String method) async {
final url = 'http://${config.host}:${config.c.port}/json_rpc';
rpcID += 1;
final body = json.encode
(
{
'jsonrpc': '2.0',
'id': rpcID.toString(),
'method': method,
}
);
try {
final response = await http.post
( url,
body: body
);
return response;
}
catch (e) {
log.warning(e);
return null;
}
}
dynamic jsonDecode(final String responseBody) => json.decode(responseBody);
Future<dynamic> rpc(final String method, {final String field}) async {
final response = await rpcHTTP(method);
if (response == null) return null;
if (response.statusCode != 200) {
return null;
} else {
final _body = await compute(jsonDecode, response.body);
final _result = _body['result'];
if (_result == null) return null;
final _field = field == null ? _result : _result[field];
return _field;
}
}
Future<String> rpcString(final String method, {final String field}) async {
final _field = await rpc(method, field: field);
return pretty(_field);
}
import '../../../helper.dart';
import '../../../logging.dart';
import '../../interface/rpc/rpc.dart';
Future<http.Response> syncInfo() => rpc('sync_info');
Future<String> syncInfoString() => rpcString('sync_info');

@ -25,45 +25,15 @@ import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
import '../../config.dart' as config;
import '../../helper.dart';
import '../../logging.dart';
import '../../../helper.dart';
import '../../../config.dart' as config;
import '../../../logging.dart';
import '../../interface/rpc/rpc2.dart' as rpc2;
Future<http.Response> rpc2(final String method) async {
final url = 'http://${config.host}:${config.c.port}/${method}';
Future<http.Response> getTransactionPool() async => rpc2.rpc2('get_transaction_pool');
try {
final response = await http.post
( url,
);
return response;
}
catch (e) {
log.warning(e);
return null;
}
}
dynamic jsonDecode(final String responseBody) => json.decode(responseBody);
Future<String> rpc2String(final String method, {final String field}) async {
final response = await rpc2(method);
if (response == null) return '';
if (response.statusCode != 200) {
return '';
} else {
final _body = await compute(jsonDecode, response.body);
final _field = field == null ? _body: _body[field];
return pretty(_field);
}
}
Future<http.Response> getTransactionPool() async => rpc2('get_transaction_pool');
Map<String, String> txInOutCache = {};
Future<List<Map<String, dynamic>>> getTransactionPoolSimple() async {
final response = await getTransactionPool();
@ -90,12 +60,31 @@ Future<List<Map<String, dynamic>>> getTransactionPoolSimple() async {
final _decodedPool = await Stream.fromIterable(_sortedPool).asyncMap
(
(x) async {
final String _tx_json = x['tx_json'];
final _tx_json_decoded = await compute(jsonDecode, _tx_json);
if (txInOutCache.length > config.maxPoolTxSize) {
txInOutCache = {};
}
final _txid = x['id_hash'];
if (txInOutCache[_txid] == null) {
final String _tx_json = x['tx_json'];
final _tx_json_decoded = await compute(jsonDecode, _tx_json);
final _inOut =
{
'vin': _tx_json_decoded['vin'].length,
'vout': _tx_json_decoded['vout'].length,
};
final _inOutString = _inOut['vin'].toString() + '/' + _inOut['vout'].toString();
txInOutCache[_txid] = _inOutString;
log.fine('cached tx_json in pool for: ${_txid}');
}
return {
...x,
...{'tx_decoded': _tx_json_decoded},
...{'i/o': txInOutCache[_txid]},
};
}
);

@ -21,8 +21,8 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:intl/intl.dart';
import '../../config.dart' as config;
import '../../helper.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
Map<String, dynamic> getConnectionView(Map<String, dynamic> x) {
const _remove =
@ -58,29 +58,30 @@ Map<String, dynamic> getConnectionView(Map<String, dynamic> x) {
final _formattedConn = _filteredConn.map
(
(k, v) {
if (k == 'connection_id') {
return MapEntry(k, trimHash(v));
}
const speedField =
[
'avg_download',
'avg_upload',
'current_download',
'current_upload',
];
if (speedField.contains(k)) {
return MapEntry(k, '${v} kB/s');
}
else if (k == 'live_time') {
final _duration = Duration(seconds: v);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry(k, format(_duration));
}
else {
return MapEntry(k, v);
switch (k) {
case 'connection_id': {
return MapEntry(k, trimHash(v));
}
case 'live_time': {
final _duration = Duration(seconds: v);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry(k, format(_duration));
}
default: {
const speedField =
[
'avg_download',
'avg_upload',
'current_download',
'current_upload',
];
if (speedField.contains(k)) {
return MapEntry(k, '${v} kB/s');
}
else {
return MapEntry(k, v);
}
}
}
}
);
@ -171,38 +172,39 @@ Map<String, dynamic> getInfoView(Map<String, dynamic> x) {
final _formattedInfo = _ammendedInfo.map
(
(k, v) {
if (k == 'top_block_hash') {
return MapEntry(k, trimHash(v));
}
const sizeField =
[
'block_size_limit',
'block_size_median',
'block_weight_limit',
'block_weight_median',
'difficulty',
'tx_count',
'cumulative_difficulty',
'free_space',
'database_size',
'hash_rate',
];
if (sizeField.contains(k)) {
final formatter = NumberFormat.compact();
return MapEntry(k, formatter.format(v));
}
else if (k == 'start_time') {
final _receive_time = DateTime.fromMillisecondsSinceEpoch(v * 1000);
final _diff = DateTime.now().difference(_receive_time);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry('uptime', format(_diff));
}
switch (k) {
case 'top_block_hash': {
return MapEntry(k, trimHash(v));
}
case 'start_time': {
final _receive_time = DateTime.fromMillisecondsSinceEpoch(v * 1000);
final _diff = DateTime.now().difference(_receive_time);
else {
return MapEntry(k, v);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry('uptime', format(_diff));
}
default: {
const sizeField =
[
'block_size_limit',
'block_size_median',
'block_weight_limit',
'block_weight_median',
'difficulty',
'tx_count',
'cumulative_difficulty',
'free_space',
'database_size',
'hash_rate',
];
if (sizeField.contains(k)) {
final formatter = NumberFormat.compact();
return MapEntry(k, formatter.format(v));
}
else {
return MapEntry(k, v);
}
}
}
}
);

@ -23,8 +23,8 @@ import 'dart:math';
import 'package:intl/intl.dart';
import '../../config.dart' as config;
import '../../helper.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
Map<String, dynamic> txView(Map<String, dynamic> x) {
const _remove =
@ -53,45 +53,33 @@ Map<String, dynamic> txView(Map<String, dynamic> x) {
final _formattedTx = _filteredTx.map
(
(k, v) {
if (k == 'id_hash') {
return MapEntry('id', trimHash(v));
switch (k) {
case 'id_hash':
return MapEntry('id', trimHash(v));
case 'blob_size':
return MapEntry('size', (v / 1024).toStringAsFixed(2) + ' kB');
case 'fee': {
final formatter = NumberFormat.currency
(
symbol: '',
decimalDigits: 2,
);
return MapEntry(k, formatter.format(v / pow(10, 11)) + '');
}
case 'receive_time': {
final _receive_time = DateTime.fromMillisecondsSinceEpoch(v * 1000);
final _diff = DateTime.now().difference(_receive_time);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry('age', format(_diff));
}
default:
return MapEntry(k, v);
}
}
else if (k == 'blob_size') {
return MapEntry('size', (v / 1024).toStringAsFixed(2) + ' kB');
}
else if (k == 'fee') {
final formatter = NumberFormat.currency
(
symbol: '',
decimalDigits: 2,
);
return MapEntry(k, formatter.format(v / pow(10, 11)) + '');
}
else if (k == 'receive_time') {
final _receive_time = DateTime.fromMillisecondsSinceEpoch(v * 1000);
final _diff = DateTime.now().difference(_receive_time);
format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
return MapEntry('age', format(_diff));
}
else if (k == 'tx_decoded') {
final _out =
{
'vin': v['vin'].length,
'vout': v['vout'].length,
};
final _outString = _out['vin'].toString() + '/' + _out['vout'].toString();
return MapEntry('i/o', _outString);
}
else {
return MapEntry(k, v);
}
}
);
final List<String> keys =

@ -28,7 +28,7 @@ import 'dart:io';
import 'dart:async';
import 'config.dart' as config;
import 'controller/process/run.dart' as process;
import 'logic/controller/process/run.dart' as process;
import 'logging.dart';
import 'state.dart' as state;
import 'widget.dart' as widget;

@ -21,7 +21,6 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:shared_preferences/shared_preferences.dart';
import '../controller/helper.dart';
import '../config.dart' as config;
import '../logging.dart';
import '../helper.dart';

@ -22,9 +22,9 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'dart:collection';
import '../controller/rpc/rpc.dart' as rpc;
import '../controller/daemon.dart' as daemon;
import '../controller/refresh.dart' as refresh;
import '../logic/controller/refresh.dart' as refresh;
import '../logic/sensor/rpc/rpc.dart' as rpc;
import '../logic/sensor/daemon.dart' as daemon;
import '../config.dart' as config;
import '../logging.dart';

@ -26,12 +26,12 @@ import 'dart:collection';
import 'package:flutter/material.dart';
import '../config.dart' as config;
import '../controller/daemon.dart' as daemon;
import '../controller/refresh.dart' as refresh;
import '../controller/rpc/rpc.dart' as rpc;
import '../controller/rpc/rpc2.dart' as rpc;
import '../controller/rpc/rpc2View.dart' as rpc2View;
import '../controller/rpc/rpcView.dart' as rpcView;
import '../logic/sensor/daemon.dart' as daemon;
import '../logic/controller/refresh.dart' as refresh;
import '../logic/sensor/rpc/rpc.dart' as rpc;
import '../logic/sensor/rpc/rpc2.dart' as rpc;
import '../logic/view/rpc/rpc2.dart' as rpc2View;
import '../logic/view/rpc/rpc.dart' as rpcView;
import '../helper.dart';
import '../logging.dart';
@ -66,7 +66,7 @@ class SyncedState extends AppState {
}
void appendInput(final String line) {
stdout.addLast(config.c.promptString + line + '\n');
stdout.addLast(config.c.promptString + line);
syncState();
processInput.add(line);

@ -22,9 +22,9 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'dart:collection';
import '../controller/rpc/rpc.dart' as rpc;
import '../controller/daemon.dart' as daemon;
import '../controller/refresh.dart' as refresh;
import '../logic/sensor/rpc/rpc.dart' as rpc;
import '../logic/sensor/daemon.dart' as daemon;
import '../logic/controller/refresh.dart' as refresh;
import '../config.dart' as config;
import '../logging.dart';
@ -34,7 +34,7 @@ import 'exiting.dart';
class SyncingState extends AppState {
final Queue<String> stdout = Queue.from(['']);
final Queue<String> stdout = Queue();
bool synced = false;

@ -37,6 +37,6 @@ Widget build(final BuildContext context, final AppState state) {
case SyncedState: return synced.build(context, state);
case ReSyncingState: return resyncing.build(context, state);
case ExitingState: return exiting.build(context, state);
default: Placeholder();
default: return Placeholder();
}
}

@ -25,49 +25,53 @@ import '../state.dart';
import '../config.dart' as config;
Widget build(BuildContext context, ReSyncingState state) {
final progressWidget =
[
Spacer
(
flex: 3,
),
LinearProgressIndicator(),
Spacer
(
flex: 2,
),
Expanded
(
flex: 5,
child: Text
(
state.stdout.last,
style: Theme.of(context).textTheme.body1,
)
),
];
return Scaffold
(
// appBar: AppBar
// (
// // title: Text(widget.title),
// title: Text('CyberWOW'),
// ),
body: Container
(
// padding: const EdgeInsets.all(10.0),
child: Align
padding: const EdgeInsets.all(10.0),
child: Column
(
alignment: Alignment.topLeft,
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
Spacer
(
flex: 1,
),
Expanded
(
flex: 1,
child: SingleChildScrollView
(
scrollDirection: Axis.vertical,
reverse: true,
child: Text
(
state.stdout.last,
style: Theme.of(context).textTheme.body1,
)
)
),
Spacer
(
flex: 1,
),
],
),
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>
[
Spacer
(
flex: 10,
),
] +
progressWidget +
[
Spacer
(
flex: 10,
),
]
),
),
)
);
}

@ -54,7 +54,7 @@ Widget summary(BuildContext context, SyncedState state) {
flex: 17,
),
Image.asset
('assets/wownero_symbol.png',
('assets/wow-sonic.png',
height: 220,
),
Spacer
@ -205,6 +205,8 @@ Widget terminalView(BuildContext context, String title, SyncedState state) {
textInputAction: TextInputAction.next,
autofocus: true,
autocorrect: false,
enableSuggestions: false,
keyboardType: TextInputType.visiblePassword,
decoration:
InputDecoration
(
@ -276,7 +278,7 @@ Widget terminalView(BuildContext context, String title, SyncedState state) {
Text
(
state.stdout.join(),
state.stdout.join('\n'),
style: Theme.of(context).textTheme.body2,
)
],

@ -52,7 +52,7 @@ Widget build(BuildContext context, SyncingState state) {
reverse: true,
child: Text
(
state.stdout.join(),
state.stdout.join('\n'),
style: Theme.of(context).textTheme.body1,
)
)

@ -7,42 +7,42 @@ packages:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
version: "2.0.13"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.2"
version: "1.6.0"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
version: "2.4.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
version: "2.0.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
version: "1.1.3"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
version: "1.14.12"
convert:
dependency: transitive
description:
@ -56,7 +56,7 @@ packages:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
version: "2.1.4"
flutter:
dependency: "direct main"
description: flutter
@ -78,35 +78,35 @@ packages:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0+2"
version: "0.12.1"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.3"
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
version: "2.1.12"
intl:
dependency: "direct main"
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.0"
version: "0.16.1"
logging:
dependency: "direct main"
description:
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "0.11.3+2"
version: "0.11.4"
matcher:
dependency: transitive
description:
@ -134,14 +134,28 @@ packages:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.6.8"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4+2"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0+1"
version: "1.9.0"
petitparser:
dependency: transitive
description:
@ -156,41 +170,48 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
version: "2.1.3"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.6+1"
version: "0.5.7+2"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+4"
version: "0.0.1+8"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
version: "1.0.4"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+3"
version: "0.1.2+5"
sky_engine:
dependency: transitive
description: flutter
@ -202,7 +223,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.5"
version: "1.7.0"
stack_trace:
dependency: transitive
description:
@ -237,7 +258,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.11"
version: "0.2.15"
typed_data:
dependency: transitive
description:
@ -258,7 +279,7 @@ packages:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.5.0"
version: "3.6.1"
sdks:
dart: ">=2.4.0 <3.0.0"
flutter: ">=1.12.13+hotfix.4 <2.0.0"
dart: ">=2.6.0 <3.0.0"
flutter: ">=1.12.13+hotfix.5 <2.0.0"

@ -1,7 +1,7 @@
name: cyberwow
description: A new Flutter project.
version: 0.7.0+23
version: 0.9.3+0
environment:
sdk: ">=2.1.0 <3.0.0"
@ -25,7 +25,7 @@ flutter:
uses-material-design: true
assets:
- assets/wownero_symbol.png
- assets/wow-sonic.png
fonts:
- family: RobotoMono

@ -22,6 +22,7 @@ let
qrcode
requests
ruamel_yaml
libvirt
]
; python-with-fdroid-packages = pkgs.python3.withPackages fdroid-python-packages

@ -1,3 +1,31 @@
# Copyright (c) 2019-2020, The Wownero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
let
nixpkgs = import <nixpkgs> {}
@ -33,12 +61,111 @@ let
xkeyboard_config
]
; ndk-r17c = (nixpkgs.androidenv.composeAndroidPackages
{
ndkVersion = "17.2.4988734"
; }).ndk-bundle
; ndk-r21b =
let
version = "r21b"
; in
nixpkgs.fetchzip
{
url = "https://dl.google.com/android/repository/android-ndk-${version}-linux-x86_64.zip"
; sha256 = "0shz45b6f2k4lnca8fgghh4cdh53vghfn26cj4mkirkk4cpv1qry"
; }
; openssl-source =
let
name = "openssl"
; version = "1.1.1g"
; in
nixpkgs.fetchurl
{
url = "https://www.openssl.org/source/${name}-${version}.tar.gz"
; sha256 = "0ikdcc038i7jk8h7asq5xcn8b1xc2rrbc88yfm4hqbz3y5s4gc6x"
; }
; iconv-source =
let
name = "libiconv"
; version = "1.16"
; in
nixpkgs.fetchurl
{
url = "http://ftp.gnu.org/pub/gnu/${name}/${name}-${version}.tar.gz"
; sha256 = "016c57srqr0bza5fxjxfrx6aqxkqy0s3gkhcg7p7fhk5i6sv38g6"
; }
; boost-source =
let
name = "boost"
; version = "1_71_0"
; dot_version = "1.71.0"
; in
nixpkgs.fetchurl
{
url =
"https://dl.bintray.com/boostorg/release/{dot_version}/source/${name}_${version}.tar.bz2"
; sha256 = "1vi40mcair6xgm9k8rsavyhcia3ia28q8k0blknwgy4b3sh8sfnp"
; }
; sodium-source =
let
name = "libsodium"
; version = "1.0.18"
; in
nixpkgs.fetchurl
{
url = "https://github.com/jedisct1/${name}/archive/${version}.tar.gz"
; sha256 = "1x6lll81z4ah732zwpw481qfbzg7yml0nwdgbnd5388jnz3274ym"
; }
; randomwow-source =
let
name = "RandomWOW"
; version = "1.1.6"
; in
nixpkgs.fetchurl
{
url = "https://github.com/wownero/${name}/archive/${version}.tar.gz"
; sha256 = "1c55y2dwrayh6k1avpchs89gq1mvy5c305h92jm2k48kzhw6a792"
; }
; wownero-source =
nixpkgs.fetchFromGitHub
{
owner = "wownero"
; repo = "wownero"
; rev = "dev-v0.8"
; sha256 = "13032pa9wx3h6x860f9iy28vdpkc94wzby153ig7hw4dixjqhs6w"
; }
; miniupnp-source =
nixpkgs.fetchFromGitHub
{
owner = "miniupnp"
; repo = "miniupnp"
; rev = "7800de9"
; sha256 = "1f7jgll8lxz2l5lifgqafgx8694x0svgwyz8w8w4cwavm9lmah63"
; }
; unbound-source =
nixpkgs.fetchFromGitHub
{
owner = "monero-project"
; repo = "unbound"
; rev = "9a77c29"
; sha256 = "0dmm5pz2yf1lfand9k1c8x0mbrwynkpphh877b8jbavjrwiwsw35"
; }
; in
with nixpkgs;
(buildFHSUserEnv {
name = "sora-tuner-env"
name = "cyberwow-env"
; targetPkgs = pkgs: (with pkgs;
[
bash
@ -53,12 +180,12 @@ with nixpkgs;
# openjdk
# jetbrains.jdk
# zulu
jdk
jdk13
# dart_dev
gnumake
gcc
entr
androidenv.androidPkgs_9_0.platform-tools
# androidenv.androidPkgs_9_0.platform-tools
zlib
@ -70,6 +197,7 @@ with nixpkgs;
gnum4
pkgconfig
cmake
ccache
]
++ android-studio-deps
)
@ -82,14 +210,25 @@ with nixpkgs;
; profile = ''
export ANDROID_HOME=~/SDK/Android/Sdk
PATH=~/local/sdk/flutter/bin:$PATH
PATH=~/local/sdk/flutter/stable/bin:$PATH
PATH=~/SDK/Android/android-studio/bin:$PATH
PATH=~/SDK/Android/Sdk/tools/bin:$PATH
export ANDROID_NDK_VERSION=r20
export ANDROID_NDK_ROOT=~/SDK/Android/ndk-archive/android-ndk-$ANDROID_NDK_VERSION
export ANDROID_NDK_VERSION=r21b
export ANDROID_NDK_ROOT=${ndk-r21b}
export NDK=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64
PATH=$NDK/bin:$PATH
export SRC_OPENSSL=${openssl-source}
export SRC_ICONV=${iconv-source}
export SRC_BOOST=${boost-source}
export SRC_SODIUM=${sodium-source}
export SRC_RANDOMWOW=${randomwow-source}
export SRC_MINIUPNP_DIR=${miniupnp-source}
export SRC_UNBOUND_DIR=${unbound-source}
export SRC_RAPIDJSON_DIR=${nixpkgs.rapidjson.src}
export SRC_WOWNERO_DIR=${wownero-source}
export PATH_NCURSES=${nixpkgs.ncurses5}
export PATH
@ -97,8 +236,9 @@ with nixpkgs;
export DART_VM_OPTIONS=--root-certs-file=/etc/ssl/certs/ca-certificates.crt
export ANDROID_NDK_VERSION_WOW=r17c
export ANDROID_NDK_ROOT_WOW=~/SDK/Android/ndk-archive/android-ndk-$ANDROID_NDK_VERSION_WOW
export ANDROID_NDK_ROOT_WOW=${ndk-r17c}/libexec/android-sdk/ndk-bundle
export ZSH_INIT=${nixpkgs.oh-my-zsh}/share/oh-my-zsh/oh-my-zsh.sh
exec zsh
''

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -66,33 +66,42 @@ for arch in ${archs[@]}; do
echo "building for ${arch}"
(
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH \
CC=clang \
CXX=clang++; \
./b2 \
cxxstd=14 \
toolset=clang \
threading=multi \
threadapi=pthread \
link=static \
runtime-link=static \
target-os=android \
--ignore-site-config \
--prefix=${PREFIX} \
--build-dir=android \
-sICONV_PATH=${ICONV_PATH} \
--build-type=minimal \
--with-chrono \
--with-date_time \
--with-filesystem \
--with-program_options \
--with-regex \
--with-serialization \
--with-system \
--with-thread \
--with-locale \
install \
-j${NPROC} \
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH
if [ -x "$(command -v ccache)" ]; then
echo "////////////////////////////////////////////"
echo "// CCACHE 1 //"
echo "////////////////////////////////////////////"
CC="ccache clang"
CXX="ccache clang++"
else
CC=clang
CXX=clang++
fi
./b2 \
cxxstd=14 \
toolset=clang \
threading=multi \
threadapi=pthread \
link=static \
runtime-link=static \
target-os=android \
--ignore-site-config \
--prefix=${PREFIX} \
--build-dir=android \
-sICONV_PATH=${ICONV_PATH} \
--build-type=minimal \
--with-chrono \
--with-date_time \
--with-filesystem \
--with-program_options \
--with-regex \
--with-serialization \
--with-system \
--with-thread \
--with-locale \
install \
-j${NPROC} \
)
done

@ -39,12 +39,18 @@ name=boost
version=1_71_0
dot_version=1.71.0
hash=d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee
url=https://dl.bintray.com/boostorg/release/${dot_version}/source/${name}_${version}.tar.bz2
out=${name}_${version}.tar.bz2
rm -rf ${name}_${version}
curl -# -L -O \
https://dl.bintray.com/boostorg/release/${dot_version}/source/${name}_${version}.tar.bz2
if [ ! -z $SRC_BOOST ]; then
echo "using pre-fetched $name"
cp $SRC_BOOST $out
else
curl -# -L -o $out -O $url
fi
echo "${hash} ${name}_${version}.tar.bz2" | sha256sum -c
echo "$hash $out" | sha256sum -c
tar xfv ${name}_${version}.tar.bz2
tar xfv $out

@ -35,7 +35,6 @@ source etc/scripts/build-external-libs/env.sh
build_root=$BUILD_PATH
chmod u+w -f -R $build_root || true
rm -rf $build_root
mkdir -p $build_root
rm -rf cyberwow/native/output

@ -1,45 +0,0 @@
#!/bin/bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
source etc/scripts/build-external-libs/env.sh
src_root=$BUILD_ROOT_SRC
target_root=`pwd`
mkdir -p $target_root/cyberwow/native/output/arm64
touch $target_root/cyberwow/native/output/arm64/wownerod
mkdir -p $target_root/cyberwow/native/output/x86_64
touch $target_root/cyberwow/native/output/x86_64/wownerod
exit 0

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -34,6 +34,7 @@ set -e
source etc/scripts/build-external-libs/env.sh
src_root=$BUILD_ROOT_SRC
build_root=$BUILD_ROOT
target_root=`pwd`
name=wownero
@ -62,7 +63,7 @@ for arch in ${archs[@]}; do
echo "collecting for ${arch}"
mkdir -p $target_root/cyberwow/android/app/src/main/jniLibs/$target_abi
cp build/release/bin/wownerod \
$target_root/cyberwow/android/app/src/main/jniLibs/$target_abi/libwownerod.so
$target_root/cyberwow/android/app/src/main/jniLibs/$target_abi/libwownerod.so
done

@ -1,3 +1,5 @@
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -61,15 +61,24 @@ for arch in ${archs[@]}; do
echo "building for ${arch}"
(
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH \
CC=clang \
CXX=clang++; \
./configure \
--prefix=${PREFIX} \
--build=x86_64-linux-gnu \
--host=${target_host} \
--disable-rpath \
&& make -j${NPROC} && make install && make clean \
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH
if [ -x "$(command -v ccache)" ]; then
echo "////////////////////////////////////////////"
echo "// CCACHE 1 //"
echo "////////////////////////////////////////////"
CC="ccache clang"
CXX="ccache clang++"
else
CC=clang
CXX=clang++
fi
./configure \
--prefix=${PREFIX} \
--build=x86_64-linux-gnu \
--host=${target_host} \
--disable-rpath \
&& make -j${NPROC} && make install && make clean \
)
done

@ -35,15 +35,21 @@ source etc/scripts/build-external-libs/env.sh
cd $BUILD_ROOT_SRC
name=libiconv
version=1.16
hash=e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04
name=libiconv
url=http://ftp.gnu.org/pub/gnu/${name}/${name}-${version}.tar.gz
out=${name}-${version}.tar.gz
rm -rf ${name}-${version}
curl -# -L -O \
http://ftp.gnu.org/pub/gnu/${name}/${name}-${version}.tar.gz
echo "${hash} ${name}-${version}.tar.gz" | sha256sum -c
if [ ! -z $SRC_ICONV ]; then
echo "using pre-fetched $name"
cp $SRC_ICONV $out
else
curl -# -L -o $out -O $url
fi
tar -xzf ${name}-${version}.tar.gz
echo "$hash $out" | sha256sum -c
tar -xzf $out

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -37,7 +37,7 @@ build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
name=openssl
version=1.1.1d
version=1.1.1k
cd $src_root/${name}-${version}
@ -64,19 +64,30 @@ for arch in ${archs[@]}; do
echo "building for ${arch}"
(
export CC=clang
export CXX=clang++
export ANDROID_API=23
export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
ANDROID_API=29
export ANDROID_NDK_HOME=$ANDROID_NDK_ROOT
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
if [ -x "$(command -v ccache)" ]; then
echo "////////////////////////////////////////////"
echo "// CCACHE 1 //"
echo "////////////////////////////////////////////"
CC="ccache clang"
CXX="ccache clang++"
else
CC=clang
CXX=clang++
fi
./Configure android-${arch} \
--prefix=${PREFIX} \
no-comp \
-D__ANDROID_API__=$ANDROID_API \
--with-zlib-include=${ZLIB_PATH}/include \
--with-zlib-lib=${ZLIB_PATH}/lib \
&& make -j${NPROC} && make install && make clean \
&& make -j${NPROC} SHLIB_VERSION_NUMBER= SHLIB_EXT=.so \
&& make install_sw SHLIB_VERSION_NUMBER= SHLIB_EXT=.so \
&& make clean \
)
done

@ -36,14 +36,20 @@ source etc/scripts/build-external-libs/env.sh
cd $BUILD_ROOT_SRC
name=openssl
version=1.1.1d
hash=1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
version=1.1.1k
hash=892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5
url=https://www.openssl.org/source/openssl-${version}.tar.gz
out=openssl-${version}.tar.gz
rm -rf ${name}-${version}
curl -# -L -O \
https://www.openssl.org/source/openssl-${version}.tar.gz
if [ ! -z $SRC_OPENSSL ]; then
echo "using pre-fetched $name"
cp $SRC_OPENSSL $out
else
curl -# -L -o $out -O $url
fi
echo "${hash} ${name}-${version}.tar.gz" | sha256sum -c
echo "${hash} $out" | sha256sum -c
tar xzf ${name}-${version}.tar.gz
tar xzf $out

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -63,16 +63,24 @@ for arch in ${archs[@]}; do
echo "building for ${arch}"
(
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH \
CC=clang \
CXX=clang++; \
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH
if [ -x "$(command -v ccache)" ]; then
echo "////////////////////////////////////////////"
echo "// CCACHE 1 //"
echo "////////////////////////////////////////////"
CC="ccache clang"
CXX="ccache clang++"
else
CC=clang
CXX=clang++
fi
./configure \
--prefix=${PREFIX} \
--host=${target_host} \
--enable-static \
--disable-shared \
&& make -j${NPROC} && make install && make clean \
./configure \
--prefix=${PREFIX} \
--host=${target_host} \
--enable-static \
--disable-shared \
&& make -j${NPROC} && make install && make clean \
)
done

@ -38,12 +38,18 @@ cd $BUILD_ROOT_SRC
name=libsodium
version=1.0.18
hash=d59323c6b712a1519a5daf710b68f5e7fde57040845ffec53850911f10a5d4f4
url=https://github.com/jedisct1/libsodium/archive/${version}.tar.gz
out=${name}-${version}.tar.gz
rm -rf ${name}-${version}
curl -# -L -o ${name}-${version}.tar.gz \
https://github.com/jedisct1/libsodium/archive/${version}.tar.gz
if [ ! -z $SRC_SODIUM ]; then
echo "using pre-fetched $name"
cp $SRC_SODIUM $out
else
curl -# -L -o $out -O $url
fi
echo "${hash} ${name}-${version}.tar.gz" | sha256sum -c
echo "${hash} $out" | sha256sum -c
tar xzf ${name}-${version}.tar.gz
tar xzf $out

@ -36,7 +36,7 @@ source etc/scripts/build-external-libs/env.sh
build_root=$BUILD_ROOT
PATH=$ANDROID_NDK_ROOT/build/tools/:$PATH
args="--api 23 --stl=libc++"
args="--api 29 --stl=libc++"
archs=(arm64)
for arch in ${archs[@]}; do

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
@ -72,13 +72,30 @@ for arch in ${archs[@]}; do
export TOOLCHAIN_DIR=`realpath $build_root_wow/tool/${arch}`
export PATH=$PATH:$build_root/host/bin
mkdir -p build/release
pushd .
cd build/release
(
CMAKE_INCLUDE_PATH="${PREFIX}/include" \
CMAKE_LIBRARY_PATH="${PREFIX}/lib" \
ANDROID_STANDALONE_TOOLCHAIN_PATH=${TOOLCHAIN_DIR} \
USE_SINGLE_BUILDDIR=1 \
make release-static-android-armv8 -j${NPROC} \
CC=aarch64-linux-android-clang \
CXX=aarch64-linux-android-clang++ \
cmake \
-D BUILD_TESTS=OFF \
-D ARCH="armv8-a" \
-D STATIC=ON \
-D BUILD_64=ON \
-D CMAKE_BUILD_TYPE=release \
-D ANDROID=true \
-D INSTALL_VENDORED_LIBUNBOUND=ON \
-D BUILD_TAG="android-armv8" \
-D CMAKE_SYSTEM_NAME="Android" \
-D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${TOOLCHAIN_DIR}" \
-D CMAKE_ANDROID_ARCH_ABI="arm64-v8a" \
-D MANUAL_SUBMODULES=ON \
../.. && make -j${NPROC} daemon
)
popd
done

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2019-2020, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
@ -36,14 +36,50 @@ source etc/scripts/build-external-libs/env.sh
cd $BUILD_ROOT_SRC
name=wownero
version=v0.7.0
githash=4c6c7ab87b2a56165f400f6e49f17b9577a2bcad
version=v0.9.3.3
githash=e2d2b9a447502e22467af9df20e0732b3dd4ac4c
out=wownero
rm -rf $name
chmod u+w -f -R $out || true
git clone --depth 1 https://github.com/wownero/wownero.git -b $version
rm -rf $out
cd $name
test `git rev-parse HEAD` = $githash || exit 1
if [ ! -z $SRC_WOWNERO_DIR ]; then
echo "using pre-fetched $name"
rsync -av --no-perms --no-owner --no-group --delete $SRC_WOWNERO_DIR/* $out
chmod u+w -R $out/external
cd $name
else
git clone --depth 1 https://git.wownero.com/wownero/wownero.git -b $version
cd $name
test `git rev-parse HEAD` = $githash || exit 1
fi
git submodule init && git submodule update
if [ ! -z $SRC_MINIUPNP_DIR ]; then
echo "using pre-fetched miniupnpc"
rsync -av --no-perms --no-owner --no-group --delete $SRC_MINIUPNP_DIR/* external/miniupnp
else
git submodule update --init external/miniupnp
fi
if [ ! -z $SRC_RAPIDJSON_DIR ]; then
echo "using pre-fetched rapidjson"
rsync -av --no-perms --no-owner --no-group --delete $SRC_RAPIDJSON_DIR/* external/rapidjson
else
git submodule update --init external/rapidjson
fi
if [ ! -z $SRC_RANDOMWOW ]; then
echo "using pre-fetched RandomWOW"
tar xzf $SRC_RANDOMWOW -C external/RandomWOW --strip-components=1
else
git submodule update --init external/RandomWOW
fi
if [ ! -z $SRC_UNBOUND_DIR ]; then
echo "using pre-fetched unbound"
rsync -av --no-perms --no-owner --no-group --delete $SRC_UNBOUND_DIR/* external/unbound
else
git submodule update --init external/unbound
fi

@ -1,76 +0,0 @@
#!/bin/bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
source etc/scripts/build-external-libs/env.sh
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
name=zlib
version=1.2.11
cd $src_root/${name}-${version}
archs=(arm64)
for arch in ${archs[@]}; do
extra_cmake_flags=""
case ${arch} in
"arm64")
target_host=aarch64-linux-android
;;
"x86_64")
target_host=x86_64-linux-android
;;
*)
exit 16
;;
esac
# PREFIX=$build_root/build/${name}/$arch
PREFIX=$build_root/build/$arch
echo "building for ${arch}"
export CC=clang
export CXX=clang++
(
PATH=$build_root/tool/$arch/$target_host/bin:$build_root/tool/$arch/bin:$PATH; \
./configure \
--prefix=${PREFIX} \
--static \
&& make -j${NPROC} && make install && make clean \
)
done
exit 0

@ -1,49 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
source etc/scripts/build-external-libs/env.sh
cd $BUILD_ROOT_SRC
name=zlib
version=1.2.11
hash=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
rm -rf ${name}-${version}
curl -# -L -O \
https://zlib.net/${name}-${version}.tar.gz
echo "${hash} ${name}-${version}.tar.gz" | sha256sum -c
tar xzf ${name}-${version}.tar.gz

@ -1,49 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2019, The Wownero Project
# Copyright (c) 2014-2019, The Monero Project
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are
# permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other
# materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be
# used to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
version="aba46a"
container="wownero-android-${version}"
echo "Building: ${container}"
echo
cd ../vendor/wownero
git fetch --all
git checkout $version
git submodule init && git submodule update
docker build -f utils/build_scripts/android64.Dockerfile -t $container .
docker create -it --name $container $container bash
docker cp ${container}:/src/build/release/bin .

@ -0,0 +1,2 @@
* Support custom start up args
* Upgrade to AndroidX

@ -0,0 +1,2 @@
* Use flutter beta
* Make connection checking more conservative by requiring at least one active peer

@ -0,0 +1,2 @@
* Fix openssl checksum
* Optimize UI for large tx pool

@ -0,0 +1 @@
* Base on Wownero v0.8 Hallucenogenic Hypnotoad

@ -0,0 +1 @@
* Base on Wownero v0.9 Illiterate Illuminati

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 29 KiB