Compare commits

...

343 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
jw 2029295743
Merge pull request #5 from fuwa0529/dev
4 years ago
fuwa be397fc05c replace address with host in peers view
4 years ago
fuwa 98a64ec56f enable ipv6
4 years ago
fuwa f94eedadb4 add clean task
4 years ago
fuwa a4519326c0 simplify banner split code
4 years ago
fuwa 3b552e32c4 use Future.delayed helper
4 years ago
fuwa d5c139defc reword the loading page
4 years ago
fuwa e13c58568a add the usage of custom args to readme
4 years ago
fuwa 887323dde8 update native build for f-droid
4 years ago
fuwa e9cbeae179 upgrade to sdk 29
4 years ago
fuwa 994fa048be update minsdk version to android 8
4 years ago
fuwa 2876d88397 add support of custom start up args
4 years ago
fuwa 465ada7c11 disable log file, since no one will read it
4 years ago
fuwa fc6878c744 disable upnp, since there's likely no such support for mobile
4 years ago
fuwa e0abf7307d add more start up flags
4 years ago
fuwa 1d0ce51804 add run-release task
4 years ago
fuwa dd89976e58 up version
4 years ago
fuwa 3aff8faf49 clean up pub
4 years ago
fuwa 37da056475 use single instance
4 years ago
fuwa 40af0efa59 update to kotlin
4 years ago
fuwa 1ec61636f5 remove ios
4 years ago
fuwa 45b83773fd add build-debug task
4 years ago
fuwa 31522e1122 use correct crt green
4 years ago
jw 7a0098bc69
Merge pull request #4 from fuwa0529/dev
4 years ago
fuwa a1f2d56781 clean up unused status
4 years ago
fuwa b2d84072c1 use _state directly in main
4 years ago
fuwa 39ba7dd5c9 wait for state.next
4 years ago
fuwa a32027ef55 qualifiy the import of state in main
4 years ago
fuwa 12a09a64db split state
4 years ago
fuwa c2bf063f81 use runtimeType to determine state type
4 years ago
fuwa 6b1353a324 add AppHook type
4 years ago
fuwa b159990d39 use more final in main
4 years ago
fuwa 3062cb2d48 add copyright to logging
4 years ago
fuwa d44e87ff81 fix a null access on rpcView
4 years ago
fuwa d5814dddde fix rpc list type error
4 years ago
fuwa 516f0af04f migrate to AndroidX
4 years ago
fuwa e2845e8dd4 use debug in run task
4 years ago
fuwa 49a1215ca6 move hash block length to config
4 years ago
fuwa 5d458d11be use enum for arch
4 years ago
fuwa 9fba251031 update flutter to 1.12
4 years ago
fuwa 62abdb31c4 update nix
4 years ago
fuwa 511b247fdc clean up some scripts
4 years ago
fuwa 4ac82fdfbd
Merge pull request #3 from fuwa0529/dev
4 years ago
fuwa 6fb11ba97a add fdroid badge and link
4 years ago
fuwa 3066b6ad38 preserve null in rpc, since {} is not null
4 years ago
fuwa 0d49f91fd1 display hash in tokens
4 years ago
fuwa 694bd75d61 store rpc results rather then views in state
4 years ago
fuwa 1e5ae7a5ec update dep version
4 years ago
fuwa e0ab32516e remove arm support
4 years ago
fuwa 19af966079 remove zmq build scripts
4 years ago
fuwa 91ac74b8a1 use boost 1.71
4 years ago
fuwa 623d8deba6 remove screenshots
4 years ago
fuwa e864c55d5a
Merge pull request #2 from fuwa0529/fastlane
4 years ago
fuwa 26696672e5 add task to remove exif
4 years ago
fuwa 265a3a178b add fastlane metadata
4 years ago
fuwa 4fc333ff29 up version
4 years ago
fuwa 96df97dfd1 lift restricted mode to fix release build
4 years ago
fuwa 28c3648abc add install task
4 years ago
fuwa 09a9bc4ee8 fix handling of rpc null
4 years ago
fuwa c5e54eade5 kill donation address
4 years ago
fuwa 51da881423 up version
4 years ago
fuwa b161b54147 do not show count for single tx
4 years ago
fuwa 853b1c232e revert tx notice to body2 for consistency
4 years ago
fuwa 2f2e4d2bb1 make HUD tx bigger
4 years ago
fuwa 426f8d4793 add on fire notice to summary page
4 years ago
fuwa d7129104d1 add hash rate to info page
4 years ago
fuwa a60d9cefa4 use uptime
4 years ago
fuwa 308030e0a8 up version
4 years ago
fuwa ee90f3765f move the usage of rpvView to state
4 years ago
fuwa 1c83af1127 use view cache to increase render performance
4 years ago
fuwa bb80fc8056 up version
4 years ago
fuwa c028e7f485 tweak info rpc view, make rpc views larger and padded
4 years ago
fuwa 1b10bf21d3 fix pretty indent
4 years ago
fuwa 17809f544d up version
4 years ago
fuwa 7626fa33f4 trim top block hash
4 years ago
fuwa 280d988e94 more regexp foo XD
4 years ago
fuwa f27c433d96 use incorrect json format as display format
4 years ago
fuwa c81f47759c handle the displaying of zero height peers
4 years ago
fuwa 557d60a7c6 simplify height in peers
4 years ago
fuwa c6e8a98610 fix clean up peers
4 years ago
fuwa 42ad22f5d3 fix null cast
4 years ago
fuwa fad3586d30 hide pruning_seed when there is none
4 years ago
fuwa ffef77fee8 use age for tx
4 years ago
fuwa 7f81b822e2 refactor to rpcView
4 years ago
fuwa ce0c6754cf remove useless type cast
4 years ago
fuwa a81545ed5d up version
4 years ago
fuwa 5cc7d152c1 sort rpcs by time
4 years ago
fuwa a855c44c8e only show active connections
4 years ago
fuwa 96e284fb83 remove logging fix
4 years ago
fuwa ff0260a938 fix conn speed unit
4 years ago
fuwa 499c65f719 show speed in peers
4 years ago
fuwa d7b513acc3 only show count above some threshold
4 years ago
fuwa ea8978a84b add back in/out
4 years ago
fuwa cc139a4064 use duration in peers
4 years ago
fuwa 165158b0a4 add count to pool and peers
4 years ago
fuwa 3a087dc2f7 clean up connections view
4 years ago
fuwa 0f1ce0e00a async decode tx_json
4 years ago
fuwa 905ea67b51 sort tx
4 years ago
fuwa 9c4fb36e04 include in/out in pool
4 years ago
fuwa 5ce00e281d make tx pool view more user friendly
4 years ago
fuwa 45cb813656 v0.7.0.0-c release
5 years ago
fuwa ecf0b42ba0 clean up config
5 years ago
fuwa a3a21d76b0 do not check command names for auto dash
5 years ago
fuwa c323017c7b fix a type cast error
5 years ago
fuwa 0031ce7053 use the default operator
5 years ago
fuwa 6535ec1d7c generalize run type
5 years ago
fuwa 10f37cf6fd handle dead process
5 years ago
fuwa 141237f4dc undo full screen
5 years ago
fuwa ab958d95e1 fix navigation color on start up
5 years ago
fuwa 1b0f7d3f51 use black screen on startup
5 years ago
fuwa 4db0006756 make sure stdout queue is not empty
5 years ago
fuwa ffebcaf29c v0.7.0.0-b release
5 years ago
fuwa 646f45f54b less noise in resync state
5 years ago
fuwa 0afe7c508c support android dark theme
5 years ago
fuwa 01eef9778c v0.7.0.0-a release
5 years ago
fuwa 704e5dbcac Revert "add --sync-pruned-blocks flag"
5 years ago
fuwa d27bc8ef68 ignore flutter export env
5 years ago
fuwa 0b745dcc83 update android version
5 years ago
fuwa ad594c4f47 use v0.7.0 tag
5 years ago
fuwa f5c6dcf431 add --sync-pruned-blocks flag
5 years ago
fuwa e8b3c7dcaf use wow-0.7
5 years ago
fuwa 867d19cf2c use alternative methods to avoid confusion
5 years ago
fuwa 4c538a6a6b wow task
5 years ago
fuwa df9fd9b775 add more build doc
5 years ago
fuwa 5946ae5e2c use theme for everything for easy porting
5 years ago
fuwa 0343c6c04b use vt323 in logging
5 years ago
fuwa fc2771ccf3 use overloaded title style for loading
5 years ago
fuwa cfb232e9c9 use font vt323 on loading
5 years ago
fuwa 3784678462 upgrade to flutter 1.9
5 years ago
fuwa fee66729f4 add a prompt string
5 years ago
fuwa 0ff83713de use static version code
5 years ago
fuwa c84acbc45d gcc is requried by boost
5 years ago
fuwa bfd16b7a96 speed up wownero fetch
5 years ago
fuwa 324dbd34af 0.6.1.2-e release for fdroid
5 years ago
fuwa 8cd8d44497 add build scripts for fdroid
5 years ago
fuwa 33a6db2319 0.6.1.2-d release
5 years ago
fuwa 1d7e8d2374 detect exit from terminal
5 years ago
fuwa 630c6ecc22 sync state after input
5 years ago
fuwa cbc6ca701c add more final
5 years ago
fuwa 9c4b3e59f4 sync state when terminal receive stdout
5 years ago
fuwa a120963ac8 auto replace - with _
5 years ago
fuwa a994493199 keep focus even if input is empty
5 years ago
fuwa 311978d863 0.6.1.2-c release
5 years ago
fuwa 0799ecca98 remove the new keyword
5 years ago
fuwa 4f7fe77837 hide keyboard outside of terminal
5 years ago
fuwa 115c31b717 persist page view index
5 years ago
fuwa 480cafd99f use `compute` for background json parsing
5 years ago
fuwa d9c21ec96a filter ansi color code
5 years ago
fuwa 7c4db7847b 0.6.1.2-b release
5 years ago
fuwa ec358ceee2 add terminal page
5 years ago
fuwa a635f8e72b use flutter theme
5 years ago
fuwa 9dedc81012 use exit(0) for a clean exit
5 years ago
fuwa 465ffc5c90 fix async exiting
5 years ago
fuwa 628cfa07b6 integrate exiting state into state machine
5 years ago
fuwa 1331c36ac6 make state machine aware of exiting
5 years ago
fuwa 6536d135e3 detect exiting in proper loop
5 years ago
fuwa 65b4f0ce9b qualify widget
5 years ago
fuwa 1ba9f89d44 add exiting state
5 years ago
fuwa 038af999f9 add exiting func
5 years ago
fuwa 5c89911995 exit the daemon gracefully with stdin
5 years ago
fuwa 4ab4c2bf24 refactor to process controller
5 years ago
fuwa f1c3bd3a40 enable stdin
5 years ago
fuwa 35710f9757 add daemon input sink
5 years ago
fuwa 37f2492518 limit stdout buffer size to 100 lines
5 years ago
fuwa 08fe7edbfb add type cast helpers
5 years ago
fuwa 0afba79021 make rpc typed
5 years ago
fuwa ae4f2f83f4 clean up rpc
5 years ago
fuwa cd460f6053 apply hashLengh to info
5 years ago
fuwa 2891890ff5 use final when possible
5 years ago
fuwa a6e7271117 exit on invalid state
5 years ago
fuwa 084052fd4e qualified import of config
5 years ago
fuwa 1363bf59a4 make rpc functional
5 years ago
fuwa 8ab975361d simplify rpc
5 years ago
fuwa a9936fce7c split the two types of rpc
5 years ago
fuwa 3874195934 4 spaces indent
5 years ago
fuwa 64b9cf4d02 0.6.1.2-a release
5 years ago
fuwa 0999afae6e use "tx pool" as label
5 years ago
fuwa 7068b90b1c more clean up on pool
5 years ago
fuwa 4298f701eb fix empty transaction list
5 years ago
fuwa 1ce8cd5884 add pool page
5 years ago
fuwa 3d44b3a734 add pretty helper
5 years ago
fuwa a68d49d80c fix transaction pool rpc
5 years ago
fuwa 6c67ea9e9e add host to config
5 years ago
fuwa e7f8ee17f9 fix transaction rpc
5 years ago
fuwa 0b23a15642 add transaction pool rpc
5 years ago
fuwa 94de787125 add some debug log
5 years ago
fuwa 0719737967 clean up connections page
5 years ago
fuwa db0d81a1e5 add padding to rpc page
5 years ago
fuwa e6e04b412e add rpc test
5 years ago
fuwa feff053f09 tune rpc
5 years ago
fuwa 867c403029 make rpc page title scrollable
5 years ago
fuwa ee3750ce09 use "info" as title
5 years ago
fuwa 1b7d7b614b add connections page
5 years ago
fuwa af44fc8774 use getInfo page
5 years ago
fuwa 35a31eec35 refresh faster while in foreground
5 years ago
fuwa 76bb010305 add daemon info
5 years ago
fuwa a910bd9b2b use moveState
5 years ago
fuwa c237f02430 use syncState
5 years ago
fuwa f0ef2210d8 prepare pageview with dummy
5 years ago
fuwa aa0a46c31d default to fine logging in debug
5 years ago
fuwa 3cee0e35a7 add pager
5 years ago
fuwa 3ffa4c25cb fix logic for PC emu debuging
5 years ago
fuwa 7ed76efd02 use proper logging
5 years ago
fuwa 79c163e88f exit main app if daemon gets killed
5 years ago
fuwa a98912a03c some clean up before exiting
5 years ago
fuwa b64a2d27fe smaller dependencies in nix
5 years ago
fuwa 68d56d1f32 fix fast-block-sync arg, and reindent
5 years ago
fuwa 753472bc52 add dart vm ssl fix
5 years ago
fuwa f984bc079b use wownero v0.6.1.2
5 years ago
fuwa 03c64eaa44 add a wownero-android build script
5 years ago
fuwa 6aca571406
Merge pull request #1 from wowario/master
5 years ago
wowario eed2ae51a3
speed up sync
5 years ago
fuwa d6a194ebe2 use a single setState in synced loop
5 years ago
fuwa 7e79d33a16 tighter setter for height
5 years ago
fuwa bc164de7b6 use minimumHeight in sync checking
5 years ago
fuwa cfa6b4fc24 add port to config
5 years ago
fuwa 67ed39c4c3 animate height change
5 years ago
fuwa c702c46d93 tweak padding
5 years ago
fuwa 62c5e324b6 clean from debug
5 years ago
fuwa cbe1027120 new is not required in widgets
5 years ago
fuwa c8f9287804 more tweak on synced style
5 years ago
fuwa 57d95e7594 tweak indicator layout
5 years ago
fuwa 855e7207e5 add refresh indicator
5 years ago
fuwa 33c4b68688 fix target height in synced state
5 years ago
fuwa 2f4600896d fix target height conditional
5 years ago
fuwa adcf25386d fix sync condition check
5 years ago
fuwa f27f5914e1 copy re-sync logic to sync
5 years ago
fuwa 8a3f479bde use positive out peers as a conditional for syncing break
5 years ago
fuwa a9ffc1b052 clean rpc exception log
5 years ago
fuwa ad312faec8 fix init state log
5 years ago
fuwa bf31ea81ec tweak synced page
5 years ago
fuwa ff7f0c266e update minimumHeight
5 years ago
fuwa c91f1e79fc clean logging
5 years ago
fuwa 31ce838193 fix widget update
5 years ago
fuwa 99dc55cb7e break early
5 years ago
fuwa 33f8ba5cf6 use refresh controller
5 years ago
fuwa 31eb3dac8e add refresh controller
5 years ago
fuwa e95e4ee9bf remove unused rpc
5 years ago
fuwa 86dfc86289 refresh only in foreground
5 years ago
fuwa 11aca7599c monitor app lifecycle state
5 years ago
fuwa 25efd122ec style synced page
5 years ago
fuwa 806c67b324 add wownero_symbol
5 years ago
fuwa 82c532dfb7 break loop with invalid states
5 years ago
fuwa e099dbc72e fix an edge case of incorrect target_height in early syncing
5 years ago
fuwa 0dcf63493c tweak hello.c
5 years ago
fuwa 4d4b06c14a handle rpc exceptions
5 years ago
fuwa c90ac5cc38 add synced label
5 years ago
fuwa ce5fe1893d add rpc helper, display height in synced page
5 years ago
fuwa 143e2c3c88 hook resync state
5 years ago
fuwa 905aecb6f2 use Syncing state
5 years ago
fuwa 351cb1f945 add synced state
5 years ago
fuwa 6f79a8b010 add targetHeight helper
5 years ago
fuwa ac7168dee2 update c
5 years ago
fuwa 7f153045da add http package
5 years ago
fuwa 5796c86ed0 add build-c task
5 years ago
fuwa a4deb38455 update dummy c
5 years ago
fuwa 57cc908e6e use const config
5 years ago
fuwa c89f9fd6d7 fix app title
5 years ago
fuwa cf10f6c027 use a pruned chain
5 years ago
fuwa 484018beda use unreleased v0.6.1.2
5 years ago
fuwa 07d8a55924 clean debug args
5 years ago
fuwa 991f3dc186 add more config
5 years ago
fuwa 8b3587f44d add color to config
5 years ago
fuwa 026262ed32 add splash to config
5 years ago
fuwa 68a4dc5052 add crypto config
5 years ago
fuwa f7ab0117fd remake res
5 years ago
fuwa f0533dcd4e move appPath to config
5 years ago
fuwa cd039de7e6 fix layout
5 years ago
fuwa 100cc43f4c add a donation address, since all the cool kids have one
5 years ago
fuwa 5a77c137a2 add collect task
5 years ago
fuwa b102c118d8 add play store badge
5 years ago
fuwa 7b9fa6105a use wownero v0.6.1.1
5 years ago
fuwa 28c7e27d2a make output dirs since git ignored them
5 years ago
fuwa 7f9fbb4d91 fix build instructions
5 years ago
fuwa b6643ac1d3 fix build path in readme
5 years ago
fuwa 1d673bdffb add build instructions
5 years ago

5
.gitignore vendored

@ -5,3 +5,8 @@ result
cyberwow/native/output/*
screenshots/
git/
flutter_export_environment.sh
.flutter-plugins-dependencies
*.so

@ -1,24 +1,112 @@
# Copyright (c) 2019, 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.
.PHONY: toolchain clean
clean:
-rm -f ./cyberwow/android/app/src/main/jniLibs/arm64-v8a/*.so
cd cyberwow && \
flutter clean
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 --pid-file /tmp/flutter.pid
flutter run --debug --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/hello
run-release:
cd cyberwow && \
flutter run --release --pid-file /tmp/flutter.pid
push:
adb push cyberwow/native/output/hello /data/local/tmp
build:
cd cyberwow && \
flutter build apk --target-platform android-arm64
test-android:
adb shell /data/local/tmp/hello
build-bundle:
cd cyberwow && \
flutter build appbundle --target-platform android-arm64
test-c: c push test-android
build-debug:
cd cyberwow && \
flutter build appbundle --debug --target-platform android-arm64
build:
install: build
cd cyberwow && \
flutter build apk --target-platform android-arm64
flutter install
# build wownero android binary
script := etc/scripts/build-external-libs
wow: clean-external-libs collect-wownero build
clean-external-libs:
$(script)/clean.sh
toolchain:
$(script)/toolchain/import.sh
iconv: toolchain
$(script)/iconv/fetch.sh
$(script)/iconv/build.sh
boost: iconv
$(script)/boost/fetch.sh
$(script)/boost/build.sh
openssl: toolchain
$(script)/openssl/fetch.sh
$(script)/openssl/build.sh
sodium: toolchain
$(script)/sodium/fetch.sh
$(script)/sodium/build.sh
toolchain-wow:
$(script)/toolchain-wow/import.sh
$(script)/toolchain-wow/patch.sh
wownero: openssl boost sodium toolchain-wow
$(script)/wownero/fetch.sh
$(script)/wownero/build.sh
collect-wownero: wownero
$(script)/collect.sh
# etc
remove-exif:
exiftool -all= `find fastlane/ -name '*.jp*g' -o -name '*.png'`

@ -1,3 +1,3 @@
# CyberWOW
# CyberWOW Mobile Node
A dumb android full node for Wownero.
archived

@ -0,0 +1,7 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

@ -22,10 +22,15 @@ if (flutterVersionName == null) {
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 28
compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
@ -34,11 +39,10 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "org.wownero.cyberwow"
minSdkVersion 23
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
minSdkVersion 26
targetSdkVersion 29
versionCode 28
versionName "0.9.3.3"
}
if(project.hasProperty("RELEASE_STORE_FILE")) {
@ -64,6 +68,12 @@ android {
}
}
}
applicationVariants.all {
variant -> variant.outputs.all {
output -> outputFileName = "app-${output.baseName}.apk"
}
}
}
flutter {
@ -71,7 +81,5 @@ flutter {
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

@ -1,34 +1,32 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.wownero.cyberwow">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="CyberWOW"
android:icon="@drawable/icon">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:launchMode="singleInstance"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<!-- <meta-data -->
<!-- android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" -->
<!-- android:value="true" /> -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<uses-permission android:name="android.permission.INTERNET"/>

@ -1,13 +0,0 @@
package org.wownero.cyberwow;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}

@ -0,0 +1,66 @@
package org.wownero.cyberwow
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugin.common.ActivityLifecycleListener
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import android.content.Intent
import android.os.Bundle
import android.util.Log
class MainActivity: FlutterActivity() {
private val CHANNEL = "send-intent"
private var initialIntentText:String = ""
private var initialIntentSet = false
private var _channel: MethodChannel? = null;
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL);
_channel = channel;
channel.setMethodCallHandler{
call, result ->
if (call.method == "getInitialIntent") {
result.success(initialIntentText)
} else if (call.method == "getBinaryDir") {
result.success(getApplicationInfo().nativeLibraryDir)
} else {
result.notImplemented()
}
}
val intent = getIntent()
checkIntent(intent)
initialIntentSet = true
}
internal fun handleSendText(intent:Intent) {
val text:String? = intent.getStringExtra(Intent.EXTRA_TEXT)
if (initialIntentSet == false) {
initialIntentText = text ?: "";
}
}
internal fun checkIntent(intent: Intent) {
val _action = intent.getAction()
// Log.i("Main", "action: " + action)
if (Intent.ACTION_SEND.equals(_action)) {
val _type = intent.getType()
// Log.i("Main", "type: " + type)
if (_type == "text/plain") {
handleSendText(intent) // Handle text being sent
}
}
}
}

@ -3,6 +3,7 @@
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:navigationBarColor">@android:color/black</item>
</style>
</resources>

@ -1,11 +1,13 @@
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@ -26,4 +28,4 @@ subprojects {
task clean(type: Delete) {
delete rootProject.buildDir
}
}

@ -1 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
#Tue Dec 24 05:26:22 UTC 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.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

@ -0,0 +1,93 @@
Copyright 2011, The VT323 Project Authors (peter.hull@oikoi.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>

@ -1 +0,0 @@
#include "Generated.xcconfig"

@ -1 +0,0 @@
#include "Generated.xcconfig"

@ -1,506 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B80C3931E831B6300D905FE /* App.framework */,
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEBA1CF902C7004384FC /* Flutter.framework */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
CF3B75C9A7D2FA2A4C99F110 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
97C146F21CF9000F007C117D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0910;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
97C146F31CF9000F007C117D /* main.m in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = S8QB4VV633;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.cyberwow;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.cyberwow;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.cyberwow;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0910"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

@ -1,6 +0,0 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end

@ -1,13 +0,0 @@
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end

@ -1,122 +0,0 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

@ -1,5 +0,0 @@
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>cyberwow</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

@ -1,9 +0,0 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

@ -19,7 +19,24 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
const outputBin = 'wownerod';
import 'config/prototype.dart';
import 'config/cyberwow.dart' as cryptoConfig;
const arch = 'arm64';
final c = cryptoConfig.config;
enum Arch { arm64, x86_64 }
const arch = Arch.arm64;
// const arch = 'x86_64';
const minimumHeight = 118361;
const isEmu = identical(arch, Arch.x86_64);
const emuHost = '192.168.10.100';
const host = isEmu ? emuHost : '127.0.0.1';
const stdoutLineBufferSize = 200;
const bannerShownKey = 'banner-shown';
const int maxPoolTxSize = 5000;

@ -0,0 +1,105 @@
/*
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 'package:flutter/material.dart';
import 'prototype.dart';
const crtGreen = Color.fromRGBO(0, 255, 102, 1);
final _theme = ThemeData
(
brightness: Brightness.dark,
primaryColor: crtGreen,
hintColor: Colors.yellow,
accentColor: crtGreen,
cursorColor: crtGreen,
backgroundColor: Colors.black,
scaffoldBackgroundColor: Colors.black,
textTheme: TextTheme
(
display1: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 35,
fontWeight: FontWeight.bold,
),
display2: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 22,
),
title: TextStyle
(
fontFamily: 'VT323',
fontSize: 22,
),
subhead: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 17,
fontWeight: FontWeight.bold,
),
body1: TextStyle
(
fontFamily: 'VT323',
fontSize: 17,
height: 1,
),
body2: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 12.5,
),
).apply
(
bodyColor: crtGreen,
displayColor: crtGreen,
),
);
final config = CryptoConfig
(
'libwownerod.so',
'wownerod',
'You ever danced with the devil in the pale moonlight?',
70,
_theme,
34568,
[
'--prune-blockchain',
'--max-concurrency=1',
'--fast-block-sync=1',
'--block-sync-size=5',
'--no-igd',
'--check-updates=disabled',
'--disable-dns-checkpoints',
'--log-file=/dev/null',
'--max-log-file-size=0',
'--p2p-use-ipv6',
],
'[1337@cyberwow]: ',
6,
);

@ -0,0 +1,46 @@
/*
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 'package:flutter/material.dart';
class CryptoConfig {
final String outputBin;
final String appPath;
final String splash;
final int splashDelay;
final ThemeData theme;
final int port;
final List<String> extraArgs;
final String promptString;
final int hashViewBlockLength;
const CryptoConfig
(
this.outputBin,
this.appPath,
this.splash,
this.splashDelay,
this.theme,
this.port,
this.extraArgs,
this.promptString,
this.hashViewBlockLength,
);
}

@ -1,67 +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 'package:path_provider/path_provider.dart';
import 'package:flutter/foundation.dart';
import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'helper.dart';
Stream<String> runBinary (String name) async* {
final newPath = await getBinaryPath(name);
final appDocDir = await getApplicationDocumentsDirectory();
final appDocPath = appDocDir.path;
const appPath = 'wownerod';
final binDir = new Directory(appDocDir.path + "/" + appPath);
await binDir.create();
// print('binDir: ' + binDir.path);
const debugArgs =
[
"--add-exclusive-node",
"192.168.10.100",
];
const releaseArgs =
[
"--restricted-rpc"
];
const extraArgs = kReleaseMode ? releaseArgs : debugArgs;
final args =
[
"--data-dir",
binDir.path,
"--non-interactive",
] + extraArgs;
print('args: ' + args.toString());
final outputProcess = await Process.start(newPath, args);
await for (var line in outputProcess.stdout.transform(utf8.decoder)) {
yield line;
}
}

@ -0,0 +1,73 @@
/*
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:convert';
import 'dart:math';
import 'config.dart' as config;
String pretty(dynamic x) {
final JsonEncoder encoder = JsonEncoder.withIndent('');
return encoder.convert(x)
.replaceAll(RegExp(r'^{'), '\n')
.replaceAll(RegExp(r'(["\[\],{}]|: )'), '')
;
}
String trimHash(String x) {
final l = config.c.hashViewBlockLength;
return x.substring(0, l) + '-' + x.substring(l, l * 2) + ' ...';
}
Map<String, dynamic> cleanKey(Map<String, dynamic> x) {
final _cleaned = x.map
(
(k, v) => MapEntry
(
k
.replaceAll('cumulative', 'Σ')
.replaceAll('current_', '')
.replaceAll('_', ' ')
,
v
)
);
final int _maxLength = _cleaned.keys.map((x) => x.length).reduce(max);
final _padded = _cleaned.map
(
(k, v) => MapEntry(k.padRight(_maxLength + 2, ' '), v)
);
return _padded;
}
int asInt(dynamic x) => x?.toInt() ?? 0;
bool asBool(dynamic x) => x ?? false;
List<dynamic> asList(dynamic x) => x ?? [];
List<Map<String, dynamic>> asJsonArray(dynamic x) => x?.cast<Map<String, dynamic>>() ?? [];
Map<String, dynamic> asMap(dynamic x) => x ?? {};
Future<void> tick() async => await Future.delayed(const Duration(seconds: 1));

@ -0,0 +1,24 @@
/*
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 'package:logging/logging.dart';
final Logger log = Logger('Default');

@ -0,0 +1,101 @@
/*
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 'package:path_provider/path_provider.dart';
import 'package:flutter/foundation.dart';
import 'dart:io';
import 'dart:async';
import 'dart:convert';
import '../../../config.dart' as config;
import '../../../logging.dart';
import '../../sensor/helper.dart' as helper;
typedef ShouldExit = bool Function();
Stream<String> runBinary
(
final String name,
{ final Stream<String> input,
final ShouldExit shouldExit,
final List<String> userArgs = const [],
}
) async* {
final binPath = await helper.getBinaryPath(name);
final appDocDir = await getApplicationDocumentsDirectory();
final appDocPath = appDocDir.path;
final binDir = Directory(appDocDir.path + "/" + config.c.appPath);
await binDir.create();
// print('binDir: ' + binDir.path);
const List<String> debugArgs =
[
];
const List<String> releaseArgs =
[
];
const extraArgs = kReleaseMode ? releaseArgs : debugArgs;
final args =
[
"--data-dir",
binDir.path,
] + extraArgs + config.c.extraArgs + userArgs;
log.info('args: ' + args.toString());
final outputProcess = await Process.start(binPath, args);
Future<void> printInput() async {
await for (final line in input) {
log.finest('process input: ' + line);
outputProcess.stdin.writeln(line);
outputProcess.stdin.flush();
}
}
if (input != null) {
printInput();
}
final _stdout = outputProcess.stdout
.transform(utf8.decoder).transform(const LineSplitter());
await for (final line in _stdout) {
log.finest('process output: ' + line);
yield line;
}
if (config.isEmu) return;
if (shouldExit != null) {
if (!shouldExit()) {
log.warning('process is ded');
exit(1);
}
}
log.info('Daemon exited gracefully.');
}

@ -19,26 +19,28 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'helper.dart';
Stream<String> deployBinary (AssetBundle bundle, String path, String name) async* {
final binData = await bundle.load(path);
final newPath = await getBinaryPath(name);
import 'package:logging/logging.dart';
yield 'output binary path: $newPath\n';
final inputBytes = binData.buffer.asUint8List();
final outputFile = await new File(newPath).writeAsBytes(inputBytes);
final chmodResult = await Process.run('chmod', ['u+x', newPath]);
yield chmodResult.stderr + '\n';
import 'dart:ui';
import 'dart:async';
final outputStat = await outputFile.stat();
yield outputStat.toString() + '\n';
import '../../config.dart';
import '../../logging.dart';
import '../../helper.dart';
typedef GetNotificationFunc = AppLifecycleState Function();
Stream<Null> pull(GetNotificationFunc getNotification, final String puller) async* {
while (true) {
final _appState = getNotification();
log.finer('refresh pull by ${puller}: app state: ${_appState}');
if (_appState == AppLifecycleState.resumed) {
yield null;
await tick();
} else {
await tick();
await tick();
}
}
}

@ -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);
}
}

@ -0,0 +1,45 @@
/*
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 'rpc/rpc.dart' as rpc;
import '../../config.dart' as config;
import '../../logging.dart';
Future<bool> isConnected() async {
final _connections = await rpc.getConnectionsSimple();
log.finer('cyberwow: _connections: ${_connections}');
return !_connections.isEmpty;
}
Future<bool> isSynced() async {
final _targetHeight = await rpc.targetHeight();
final _height = await rpc.height();
return _targetHeight >= 0 && _targetHeight <= _height && _height > config.minimumHeight;
}
Future<bool> isNotSynced() async {
final _targetHeight = await rpc.targetHeight();
final _height = await rpc.height();
return _targetHeight > _height;
}

@ -0,0 +1,45 @@
/*
Copyright 2020 fuwa
This file is part of CyberWOW.
Wowllet 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.
Wowllet 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 Wowllet. 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';
import 'package:flutter/services.dart';
import '../../logging.dart';
const _methodChannel = const MethodChannel('send-intent');
Future<String> getBinaryDir() async {
final _dir = await _methodChannel.invokeMethod('getBinaryDir');
final _binDir = Directory(_dir);
final _bins = _binDir.listSync(recursive: true);
return _dir;
}
Future<String> getBinaryPath(final String name) async {
final _binaryDir = await getBinaryDir();
return _binaryDir + '/' + name;
}

@ -0,0 +1,72 @@
/*
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 '../../../helper.dart';
import '../../../logging.dart';
import '../../interface/rpc/rpc.dart';
Future<http.Response> syncInfo() => rpc('sync_info');
Future<String> syncInfoString() => rpcString('sync_info');
Future<int> targetHeight() => rpc('sync_info', field: 'target_height').then(asInt);
Future<int> height() => rpc('sync_info', field: 'height').then(asInt);
Future<http.Response> getInfo() => rpc('get_info');
Future<Map<String, dynamic>> getInfoSimple() async {
final _getInfo = await rpc('get_info').then(asMap);
return _getInfo;
}
Future<String> getInfoString() => rpcString('get_info');
Future<bool> offline() => rpc('get_info', field: 'offline').then(asBool);
Future<int> outgoingConnectionsCount() =>
rpc('get_info', field: 'outgoing_connections_count').then(asInt);
Future<int> incomingConnectionsCount() =>
rpc('get_info', field: 'incoming_connections_count').then(asInt);
Future<List<Map<String, dynamic>>> getConnectionsSimple() async {
final _connections = await rpc('get_connections', field: 'connections').then(asJsonArray);
const minActiveTime = 8;
final _activeConnections = _connections.where((x) => x['live_time'] > minActiveTime);
final _sortedConn = _activeConnections.toList()..sort
(
(x, y) {
final int a = x['live_time'];
final int b = y['live_time'];
return a.compareTo(b);
}
);
return _sortedConn.toList();
}

@ -0,0 +1,94 @@
/*
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 '../../../helper.dart';
import '../../../config.dart' as config;
import '../../../logging.dart';
import '../../interface/rpc/rpc2.dart' as rpc2;
Future<http.Response> getTransactionPool() async => rpc2.rpc2('get_transaction_pool');
Map<String, String> txInOutCache = {};
Future<List<Map<String, dynamic>>> getTransactionPoolSimple() async {
final response = await getTransactionPool();
if (response == null) return [];
log.finest('getTransactionPoolSimple response: ${response.body}');
log.finest('Response status: ${response.statusCode}');
if (response.statusCode != 200) {
return [];
} else {
final responseBody = json.decode(response.body);
final result = asJsonArray(responseBody['transactions']);
final _sortedPool = result..sort
(
(x, y) {
final int a = x['receive_time'];
final int b = y['receive_time'];
return b.compareTo(a);
}
);
final _decodedPool = await Stream.fromIterable(_sortedPool).asyncMap
(
(x) async {
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,
...{'i/o': txInOutCache[_txid]},
};
}
);
return _decodedPool.toList();
}
}

@ -0,0 +1,230 @@
/*
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 'package:intl/intl.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
Map<String, dynamic> getConnectionView(Map<String, dynamic> x) {
const _remove =
[
'address_type',
'connection_id',
'ip',
'local_ip',
'localhost',
'peer_id',
'port',
'recv_count',
'rpc_port',
'send_count',
'support_flags',
// 'avg_download',
// 'avg_upload',
// 'current_download',
// 'current_upload',
'rpc_credits_per_hash',
'state',
'recv_idle_time',
'send_idle_time',
'incoming',
];
final _filteredConn = x..removeWhere
(
(k,v) => _remove.contains(k)
);
final _formattedConn = _filteredConn.map
(
(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);
}
}
}
}
);
final List<String> keys =
[
'host',
'height',
'live_time',
'current_download',
'current_upload',
'avg_download',
'avg_upload',
'pruning_seed',
]
.where((k) => _formattedConn.keys.contains(k))
.toList();
final _sortedConn = {
for (final k in keys) k: _formattedConn[k]
};
final _cleanedUpConn = _sortedConn..removeWhere
(
(k,v) => k == 'pruning_seed' && x[k] == 0
);
return _cleanedUpConn;
}
Map<String, dynamic> simpleHeight(int height, Map<String, dynamic> x) {
return x.map
(
(k, v) {
if (k == 'height') {
if (v == 0) {
return MapEntry(k, '');
}
else if (v < height) {
return MapEntry(k, '-${height - v}');
}
else if (v == height) {
return MapEntry(k, '');
}
else {
return MapEntry(k, '+${v - height}');
}
}
else {
return MapEntry(k, v);
}
}
);
}
Map<String, dynamic> getInfoView(Map<String, dynamic> x) {
const _remove =
[
'difficulty_top64',
'stagenet',
'testnet',
'top_hash',
'update_available',
'was_bootstrap_ever_used',
'bootstrap_daemon_address',
'height_without_bootstrap',
'wide_cumulative_difficulty',
'wide_difficulty',
'cumulative_difficulty_top64',
'credits',
];
final _filteredInfo = x..removeWhere
(
(k,v) => _remove.contains(k)
);
final int _difficulty = _filteredInfo['difficulty'] ?? 0;
final Map<String, double> _hashRate = {'hash_rate': _difficulty / 300};
final Map<String, dynamic> _ammendedInfo = {
..._filteredInfo,
..._hashRate,
};
final _formattedInfo = _ammendedInfo.map
(
(k, v) {
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);
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);
}
}
}
}
);
final _cleanedUpInfo = _formattedInfo.map
(
(k, v) {
if (k.contains('_count') && k != 'tx_count') {
return MapEntry(k.replaceAll('_count', ''), v);
}
else {
return MapEntry(k, v);
}
}
);
final _sortedInfo = {
for (final k in _cleanedUpInfo.keys.toList()..sort()) k: _cleanedUpInfo[k]
};
return _sortedInfo;
}

@ -0,0 +1,101 @@
/*
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:math';
import 'package:intl/intl.dart';
import '../../../config.dart' as config;
import '../../../helper.dart';
Map<String, dynamic> txView(Map<String, dynamic> x) {
const _remove =
[
'tx_blob',
// 'tx_json',
'last_failed_id_hash',
'max_used_block_id_hash',
// fields not useful for noobs
'last_relayed_time',
'kept_by_block',
'double_spend_seen',
'relayed',
'do_not_relay',
'last_failed_height',
'max_used_block_height',
'weight',
// 'blob_size',
];
final _filteredTx = x..removeWhere
(
(k,v) => _remove.contains(k)
);
final _formattedTx = _filteredTx.map
(
(k, 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);
}
}
);
final List<String> keys =
[
'id',
'age',
'fee',
'i/o',
'size',
]
.where((k) => _formattedTx.keys.contains(k))
.toList();
final _sortedTx = {
for (final k in keys) k: _formattedTx[k]
};
return _sortedTx;
}

@ -21,105 +21,197 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'dart:io';
import 'dart:async';
import 'state.dart';
import 'config.dart';
import 'controller/loading.dart';
import 'controller/running.dart';
import 'widget/loading.dart';
import 'widget/blank.dart';
import 'widget/running.dart';
void main() => runApp(MyApp());
import 'config.dart' as config;
import 'logic/controller/process/run.dart' as process;
import 'logging.dart';
import 'state.dart' as state;
import 'widget.dart' as widget;
void main() {
Logger.root.level = kReleaseMode ? Level.INFO : Level.FINE;
Logger.root.onRecord.listen((LogRecord rec) {
print('${rec.level.name}: ${rec.time}: ${rec.message}');
});
runApp(CyberWOW_App());
}
class MyApp extends StatelessWidget {
class CyberWOW_App extends StatelessWidget {
@override
Widget build(BuildContext context) {
Widget build(final BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
return MaterialApp
(
title: 'Flutter Demo',
theme: ThemeData
(
primarySwatch: Colors.purple,
),
home: MyHomePage(title: 'CyberWOW'),
title: 'CyberWOW',
theme: config.c.theme,
darkTheme: config.c.theme,
home: CyberWOW_Page(title: 'CyberWOW'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
class CyberWOW_Page extends StatefulWidget {
CyberWOW_Page({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
_CyberWOW_PageState createState() => _CyberWOW_PageState();
}
class _MyHomePageState extends State<MyHomePage>
class _CyberWOW_PageState extends State<CyberWOW_Page> with WidgetsBindingObserver
{
int _counter = 0;
// AppState _state = LoadingState("init...");
static const _channel = const MethodChannel('send-intent');
state.AppState _state;
AppLifecycleState _notification = AppLifecycleState.resumed;
bool _exiting = false;
AppState _state;
final StreamController<String> inputStreamController = StreamController();
void _setState(AppState newState) {
Future<String> getInitialIntent() async {
final text = await _channel.invokeMethod('getInitialIntent');
log.fine('getInitialIntent: ${text}');
return text;
}
@override
void didChangeAppLifecycleState(final AppLifecycleState state) {
log.fine('app cycle: ${state}');
setState(() { _notification = state; });
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
void _setState(final state.AppState newState) {
setState
(
() => _state = newState
);
}
void _updateLoading(LoadingState state, String msg) {
print('updateLoading: ' + msg);
AppLifecycleState _getNotification() {
return _notification;
}
bool _isExiting() {
return _exiting;
}
state.AppState _getState() {
return _state;
}
Future<void> buildStateMachine(BlankState _blankState) async {
const loadingText = "Follow the white rabbit.";
LoadingState _loadingState = await _blankState.next(loadingText);
Future<void> buildStateMachine(final state.BlankState _blankState) async {
final loadingText = config.c.splash;
state.LoadingState _loadingState = await _blankState.next(loadingText);
state.SyncingState _syncingState = await _loadingState.next();
const binName = outputBin;
const resourcePath = 'native/output/' + arch + '/' + binName;
final bundle = DefaultAssetBundle.of(context);
final loading = deployBinary(bundle, resourcePath, binName);
final _initialIntent = await getInitialIntent();
final _userArgs = _initialIntent
.trim()
.split(RegExp(r"\s+"))
.where((x) => !x.isEmpty)
.toList();
RunningState _runningState = await _loadingState.next(loading, '');
if (!_userArgs.isEmpty) {
log.info('user args: ${_userArgs}');
}
final running = runBinary(binName);
await _runningState.next(running);
final syncing = process
.runBinary
(
config.c.outputBin,
input: inputStreamController.stream,
shouldExit: _isExiting,
userArgs: _userArgs,
)
.asBroadcastStream();
await _syncingState.next(inputStreamController.sink, syncing);
bool exited = false;
bool validState = true;
while (validState && !exited) {
switch (_state.runtimeType) {
case state.ExitingState: {
await (_state as state.ExitingState).wait();
log.finer('exit state wait done');
exited = true;
}
break;
case state.SyncedState:
await (_state as state.SyncedState).next();
break;
case state.ReSyncingState:
await (_state as state.ReSyncingState).next();
break;
default: validState = false;
}
}
log.finer('state machine finished');
if (exited) {
log.finer('popping navigator');
// SystemNavigator.pop();
exit(0);
} else {
log.severe('Reached invalid state!');
exit(1);
}
}
@override
void initState() {
super.initState();
print("MyHomePageState initState");
log.fine("CyberWOW_PageState initState");
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
WidgetsBinding.instance.addObserver(this);
BlankState _blankState = BlankState(_setState);
final state.AppHook _appHook = state.AppHook(_setState, _getNotification, _isExiting);
final state.BlankState _blankState = state.BlankState(_appHook);
_state = _blankState;
buildStateMachine(_blankState);
}
Future<bool> _exitApp(BuildContext context) async {
print("MyHomePageState _exitApp");
exit(0);
Future<bool> _exitApp(final BuildContext context) async {
log.info("CyberWOW_PageState _exitApp");
WidgetsBinding.instance.removeObserver(this);
_exiting = true;
inputStreamController.sink.add('exit');
await Future.delayed(const Duration(seconds: 5));
// the process controller should call exit(0) for us
log.warning('Daemon took too long to shut down!');
exit(1);
}
@override
Widget build(BuildContext context) {
return new WillPopScope
Widget build(final BuildContext context) {
return WillPopScope
(
onWillPop: () => _exitApp(context),
child: _state.use
(
(s) => buildBlank(context, s),
(s) => buildLoading(context, s),
(s) => buildRunning(context, s),
),
child: widget.build(context, _state),
);
}
}

@ -19,123 +19,13 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
*/
import 'package:flutter/material.dart';
import 'dart:io';
import 'dart:developer';
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
export 'state/prototype.dart';
export 'state/blank.dart';
export 'state/loading.dart';
export 'state/syncing.dart';
export 'state/synced.dart';
export 'state/resyncing.dart';
export 'state/exiting.dart';
import 'controller/helper.dart';
import 'config.dart';
abstract class AppState {
T use<T>
(
T Function(BlankState) useBlankState,
T Function(LoadingState) useLoadingState,
T Function(RunningState) useRunningState,
)
{
if (this is BlankState) {
return useBlankState(this);
}
if (this is LoadingState) {
return useLoadingState(this);
}
if (this is RunningState) {
return useRunningState(this);
}
throw Exception('Invalid state');
}
}
typedef SetStateFunc = void Function(AppState);
class HookedState extends AppState {
final SetStateFunc setState;
HookedState(this.setState);
}
class BlankState extends HookedState {
BlankState(f) : super (f);
Future<LoadingState> next(String status) async {
LoadingState _next = LoadingState(setState, status);
setState(_next);
return _next;
}
}
class LoadingState extends HookedState {
String banner;
String status = '';
LoadingState(f, this.banner) : super (f);
void append(String msg) {
this.status += msg;
setState(this);
}
Future<RunningState> next(Stream<String> loadingProgress, String status) async {
Future<void> showBanner() async {
var chars = [];
banner.runes.forEach((int rune) {
final c = new String.fromCharCode(rune);
chars.add(c);
});
for (String char in chars) {
append(char);
await Future.delayed(const Duration(milliseconds: 70), () => "1");
}
await Future.delayed(const Duration(seconds: 2), () => "1");
}
Future<void> load() async {
print("LoadingState.next");
await for (var line in loadingProgress) {
// append(line);
print(line);
}
}
final outputBinExists = await binaryExists(outputBin);
if (outputBinExists) {
await load();
}
else {
await Future.wait([load(), showBanner()]);
}
RunningState _next = RunningState(setState, status);
setState(_next);
return _next;
}
}
class RunningState extends HookedState {
String status;
RunningState(f, this.status) : super (f);
void append(String msg) {
this.status += msg;
setState(this);
}
Future<void> next(Stream<String> runningOutput) async {
print("RunningState.next");
await for (var line in runningOutput) {
append(line);
print(line);
}
}
}

@ -20,16 +20,15 @@ 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 'prototype.dart';
import 'loading.dart';
Future<String> getBinaryPath(String name) async {
final tmpDir = await getTemporaryDirectory();
return tmpDir.path + '/' + name;
}
class BlankState extends AppState {
BlankState(appHook) : super (appHook);
Future<bool> binaryExists(String name) async {
final binPath = await getBinaryPath(name);
return new File(binPath).exists();
Future<LoadingState> next(String status) async {
LoadingState _next = LoadingState(appHook, status);
return moveState(_next);
}
}

@ -0,0 +1,59 @@
/*
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:collection';
import '../config.dart' as config;
import '../logging.dart';
import 'prototype.dart';
class ExitingState extends AppState {
final Queue<String> stdout;
final Stream<String> processOutput;
ExitingState(appHook, this.stdout, this.processOutput) : super (appHook);
void append(final String msg) {
stdout.addLast(msg);
while (stdout.length > config.stdoutLineBufferSize) {
stdout.removeFirst();
}
syncState();
}
Future<void> wait() async {
log.finer("Exiting wait");
Future<void> printStdout() async {
await for (final line in processOutput) {
log.finer('exiting: print stdout loop');
append(line);
log.info(line);
}
}
await printStdout();
log.finer('exiting state done');
}
}

@ -0,0 +1,66 @@
/*
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 'package:shared_preferences/shared_preferences.dart';
import '../config.dart' as config;
import '../logging.dart';
import '../helper.dart';
import 'prototype.dart';
import 'syncing.dart';
class LoadingState extends AppState {
final String banner;
String status = '';
LoadingState(appHook, this.banner) : super (appHook);
void append(final String msg) {
this.status += msg;
syncState();
}
Future<SyncingState> next() async {
Future<void> showBanner() async {
final Iterable<String> chars = banner.runes.map((x) => String.fromCharCode(x));
for (final String char in chars) {
append(char);
await Future.delayed(Duration(milliseconds: config.c.splashDelay));
}
await tick();
await tick();
}
SharedPreferences _prefs = await SharedPreferences.getInstance();
final _bannerShown = await _prefs.getBool(config.bannerShownKey);
if (_bannerShown == null) {
await showBanner();
await _prefs.setBool(config.bannerShownKey, true);
}
SyncingState _next = SyncingState(appHook);
return moveState(_next);
}
}

@ -0,0 +1,47 @@
/*
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 'package:flutter/material.dart';
typedef SetStateFunc = void Function(AppState);
typedef GetNotificationFunc = AppLifecycleState Function();
typedef IsExitingFunc = bool Function();
class AppHook {
final SetStateFunc setState;
final GetNotificationFunc getNotification;
final IsExitingFunc isExiting;
AppHook(this.setState, this.getNotification, this.isExiting);
}
class AppState {
final AppHook appHook;
AppState(this.appHook);
syncState() {
appHook.setState(this);
}
AppState moveState(AppState _next) {
appHook.setState(_next);
return _next;
}
}

@ -0,0 +1,101 @@
/*
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:collection';
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';
import 'prototype.dart';
import 'synced.dart';
import 'exiting.dart';
class ReSyncingState extends AppState {
final Queue<String> stdout;
final StreamSink<String> processInput;
final Stream<String> processOutput;
final int pageIndex;
bool synced = false;
ReSyncingState(appHook, this.stdout, this.processInput, this.processOutput, this.pageIndex)
: super (appHook);
void append(final String msg) {
stdout.addLast(msg);
while (stdout.length > config.stdoutLineBufferSize) {
stdout.removeFirst();
}
syncState();
}
Future<AppState> next() async {
log.fine("ReSyncing next");
Future<void> printStdout() async {
await for (final line in processOutput) {
if (synced) break;
// print('re-syncing: print stdout loop');
append(line);
log.info(line);
}
}
Future<void> checkSync() async {
await for (final _null in refresh.pull(appHook.getNotification, 'ReSyncingState')) {
if (appHook.isExiting()) {
log.fine('ReSyncing state detected exiting');
break;
}
if (await daemon.isSynced()) {
synced = true;
break;
}
// print('re-syncing: checkSync loop');
}
}
printStdout();
await checkSync();
if (appHook.isExiting()) {
ExitingState _next = ExitingState
(
appHook, stdout, processOutput
);
return moveState(_next);
}
log.fine('resync: await exit');
SyncedState _next = SyncedState
(
appHook, stdout, processInput, processOutput, pageIndex
);
_next.height = await rpc.height();
return moveState(_next);
}
}

@ -0,0 +1,161 @@
/*
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:collection';
import 'package:flutter/material.dart';
import '../config.dart' as config;
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';
import 'prototype.dart';
import 'resyncing.dart';
import 'exiting.dart';
class SyncedState extends AppState {
final Queue<String> stdout;
final StreamSink<String> processInput;
final Stream<String> processOutput;
final TextEditingController textController = TextEditingController();
int height;
bool synced = true;
bool userExit = false;
bool connected = true;
Map<String, dynamic> getInfo = {};
List<Map<String, dynamic>> getConnections = [];
List<Map<String, dynamic>> getTransactionPool = [];
int pageIndex;
String syncInfo = 'syncInfo';
PageController pageController;
String getInfoCache = '';
String getConnectionsCache = '';
String getTransactionPoolCache = '';
SyncedState(appHook, this.stdout, this.processInput, this.processOutput, this.pageIndex)
: super (appHook) {
pageController = PageController( initialPage: pageIndex );
}
void appendInput(final String line) {
stdout.addLast(config.c.promptString + line);
syncState();
processInput.add(line);
if (line == 'exit') {
userExit = true;
}
}
void append(final String msg) {
stdout.addLast(msg);
while (stdout.length > config.stdoutLineBufferSize) {
stdout.removeFirst();
}
syncState();
}
void onPageChanged(int value) {
this.pageIndex = value;
}
Future<AppState> next() async {
log.fine("Synced next");
Future<void> logStdout() async {
await for (final line in processOutput) {
if (!synced) break;
// print('synced: print stdout loop');
append(line);
log.info(line);
}
}
logStdout();
Future<void> checkSync() async {
await for (final _null in refresh.pull(appHook.getNotification, 'syncedState')) {
if (appHook.isExiting() || userExit) {
log.fine('Synced state detected exiting');
break;
}
if (await daemon.isNotSynced()) {
synced = false;
break;
}
// log.finer('SyncedState: checkSync loop');
height = await rpc.height();
connected = await daemon.isConnected();
getInfo = await rpc.getInfoSimple();
final _getInfoView = cleanKey(rpcView.getInfoView(getInfo));
getInfoCache = pretty(_getInfoView);
getConnections = await rpc.getConnectionsSimple();
final List<Map<String, dynamic>> _getConnectionsView =
getConnections
.map(rpcView.getConnectionView)
.map((x) => rpcView.simpleHeight(height, x))
.map(cleanKey)
.toList();
getConnectionsCache = pretty(_getConnectionsView);
getTransactionPool = await rpc.getTransactionPoolSimple();
final List<Map<String, dynamic>> _getTransactionPoolView =
getTransactionPool.map(rpc2View.txView).map(cleanKey).toList();
getTransactionPoolCache = pretty(_getTransactionPoolView);
syncState();
}
}
await checkSync();
if (appHook.isExiting() || userExit) {
ExitingState _next = ExitingState
(
appHook, stdout, processOutput
);
return moveState(_next);
}
log.fine('synced: loop exit');
ReSyncingState _next = ReSyncingState
(
appHook, stdout, processInput, processOutput, pageIndex
);
return moveState(_next);
}
}

@ -0,0 +1,111 @@
/*
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:collection';
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';
import 'prototype.dart';
import 'synced.dart';
import 'exiting.dart';
class SyncingState extends AppState {
final Queue<String> stdout = Queue();
bool synced = false;
SyncingState(appHook) : super (appHook);
void append(final String msg) {
stdout.addLast(msg);
while (stdout.length > config.stdoutLineBufferSize) {
stdout.removeFirst();
}
syncState();
}
Future<AppState> next
(
StreamSink<String> processInput, Stream<String> processOutput
) async {
log.fine("Syncing next");
Future<void> printStdout() async {
await for (final line in processOutput) {
if (synced) break;
log.finest('syncing: print stdout loop');
append(line);
log.info(line);
}
}
Future<void> checkSync() async {
await for (final _null in refresh.pull(appHook.getNotification, 'syncingState')) {
log.finer('SyncingState: checkSync loop');
if (appHook.isExiting()) {
log.fine('Syncing state detected exiting');
break;
}
// here doc is wrong, targetHeight could match height when synced
// potential bug, targetHeight could be smaller then height
final _isConnected = await daemon.isConnected();
final _isSynced = await daemon.isSynced();
if (_isConnected && _isSynced) {
synced = true;
break;
}
}
}
printStdout();
await checkSync();
if (appHook.isExiting()) {
ExitingState _next = ExitingState
(
appHook, stdout, processOutput
);
return moveState(_next);
}
log.fine('syncing: loop exit');
// processInput.add('exit');
final _height = await rpc.height();
SyncedState _next = SyncedState
(
appHook, stdout, processInput, processOutput, 1,
);
_next.height = _height;
return moveState(_next);
}
}

@ -0,0 +1,42 @@
/*
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 'package:flutter/material.dart';
import 'state.dart';
import 'widget/blank.dart' as blank;
import 'widget/loading.dart' as loading;
import 'widget/syncing.dart' as syncing;
import 'widget/synced.dart' as synced;
import 'widget/resyncing.dart' as resyncing;
import 'widget/exiting.dart' as exiting;
Widget build(final BuildContext context, final AppState state) {
switch (state.runtimeType) {
case BlankState: return blank.build(context, state);
case LoadingState: return loading.build(context, state);
case SyncingState: return syncing.build(context, state);
case SyncedState: return synced.build(context, state);
case ReSyncingState: return resyncing.build(context, state);
case ExitingState: return exiting.build(context, state);
default: return Placeholder();
}
}

@ -22,12 +22,12 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import '../state.dart';
import '../config.dart' as config;
Widget buildBlank(BuildContext context, BlankState state) {
Widget build(BuildContext context, BlankState state) {
return Scaffold(
body: new Container
body: Container
(
color: Colors.black,
),
);
}

@ -22,8 +22,9 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import '../state.dart';
import '../config.dart' as config;
Widget buildRunning(BuildContext context, RunningState state) {
Widget build(BuildContext context, ExitingState state) {
return Scaffold
(
// appBar: AppBar
@ -31,10 +32,9 @@ Widget buildRunning(BuildContext context, RunningState state) {
// // title: Text(widget.title),
// title: Text('CyberWOW'),
// ),
body: new Container
body: Container
(
// padding: const EdgeInsets.all(10.0),
color: Colors.black,
child: Align
(
alignment: Alignment.topLeft,
@ -43,22 +43,17 @@ Widget buildRunning(BuildContext context, RunningState state) {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
new Expanded
Expanded
(
flex: 1,
child: new SingleChildScrollView
child: SingleChildScrollView
(
scrollDirection: Axis.vertical,
reverse: true,
child: Text
(
state.status,
style: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 11,
color: Colors.green.withOpacity(1.0),
),
state.stdout.join(),
style: Theme.of(context).textTheme.body1,
)
)
)

@ -22,17 +22,17 @@ along with CyberWOW. If not, see <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import '../state.dart';
import '../config.dart' as config;
Widget buildLoading(BuildContext context, LoadingState state) {
Widget build(BuildContext context, LoadingState state) {
return Scaffold(
// appBar: AppBar(
// // title: Text(widget.title),
// title: Text('WOW'),
// ),
body: new Container
body: Container
(
padding: const EdgeInsets.all(10.0),
color: Colors.black,
padding: const EdgeInsets.all(40.0),
child: Align
(
alignment: Alignment.topLeft,
@ -41,24 +41,19 @@ Widget buildLoading(BuildContext context, LoadingState state) {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
new Expanded
Spacer
(
flex: 1,
child: new SingleChildScrollView
(
child: Text
(
state.status,
style: TextStyle
(
fontFamily: 'RobotoMono',
fontSize: 17,
fontWeight: FontWeight.bold,
color: Colors.green.withOpacity(1.0),
),
)
)
)
),
Text
(
state.status,
style: Theme.of(context).textTheme.title,
),
Spacer
(
flex: 1,
),
],
),
),

@ -0,0 +1,77 @@
/*
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 'package:flutter/material.dart';
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
(
body: Container
(
padding: const EdgeInsets.all(10.0),
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>
[
Spacer
(
flex: 10,
),
] +
progressWidget +
[
Spacer
(
flex: 10,
),
]
),
)
);
}

@ -0,0 +1,330 @@
/*
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 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:collection';
import '../state.dart';
import '../config.dart' as config;
import '../helper.dart';
import '../logging.dart';
Widget summary(BuildContext context, SyncedState state) {
final height = state.height.toString();
final onFire = state.getTransactionPool.length >= 10;
final onFireNotice = onFire ? ' 🔥' : '';
final poolLength = state.getTransactionPool.length;
final poolLengthNotice = poolLength > 1 ? '[${poolLength}] ' : '';
final txNotice = state.getTransactionPool.isEmpty ?
'' : poolLengthNotice + state.getTransactionPool.first['id_hash'].substring(0, 6) + ' ...';
return Container
(
padding: EdgeInsets.only(bottom: 10.0),
child: Align
(
alignment: Alignment.center,
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
Spacer
(
flex: 17,
),
Image.asset
('assets/wow-sonic.png',
height: 220,
),
Spacer
(
flex: 7,
),
Expanded
(
flex: 15,
child: Row
(
children: <Widget>
[
Spacer(),
AnimatedSwitcher
(
duration: Duration(milliseconds: 500),
child: Text
(
height,
style: Theme.of(context).textTheme.display1,
key: ValueKey<int>(state.height),
),
),
AnimatedSwitcher
(
duration: Duration(milliseconds: 500),
child: Text
(
onFireNotice,
style: TextStyle
(
fontSize: 25,
),
key: ValueKey<int>(onFire ? 0 : 1),
),
),
Spacer(),
]
)
),
AnimatedSwitcher
(
duration: Duration(milliseconds: 500),
child: Text
(
txNotice,
style: Theme.of(context).textTheme.body2,
key: ValueKey<int>(poolLength),
),
),
Spacer
(
flex: 1,
),
SizedBox
(
height: 20.0,
width: 20.0,
child: (state.connected) ?
Container() :
CircularProgressIndicator
(
strokeWidth: 2,
),
),
],
),
),
);
}
Widget rpcView(BuildContext context, String title, String body) {
return Container
(
padding: const EdgeInsets.all(10.0),
child: Align
(
alignment: Alignment.topLeft,
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
Expanded
(
flex: 1,
child: SingleChildScrollView
(
scrollDirection: Axis.vertical,
child: Column
(
children: <Widget>
[
Container(
height: 0,
margin: const EdgeInsets.only(bottom: 15),
),
Text
(
title,
style: Theme.of(context).textTheme.display1,
),
Container(
height: 1,
color: Theme.of(context).primaryColor,
margin: const EdgeInsets.only(bottom: 20, top: 20),
),
Text
(
body,
style: Theme.of(context).textTheme.body2,
)
],
)
)
)
],
),
),
);
}
Widget getInfo(BuildContext context, SyncedState state) => rpcView(context, 'info', state.getInfoCache);
Widget syncInfo(BuildContext context, SyncedState state) => rpcView(context, 'sync info', pretty(state.syncInfo));
Widget getTransactionPool(BuildContext context, SyncedState state) {
final pool = state.getTransactionPool;
const minimalLength = 6;
final subTitle = pool.length < minimalLength ? '' : ' ${pool.length}';
return rpcView(context, 'tx pool' + subTitle, state.getTransactionPoolCache);
}
Widget getConnections(BuildContext context, SyncedState state) {
final peers = state.getConnections;
const minimalLength = 6;
final subTitle = peers.length < minimalLength ? '' : ' ${peers.length}';
return rpcView(context, 'peers' + subTitle, state.getConnectionsCache);
}
Widget terminalView(BuildContext context, String title, SyncedState state) {
final input = TextFormField
(
controller: state.textController,
textInputAction: TextInputAction.next,
autofocus: true,
autocorrect: false,
enableSuggestions: false,
keyboardType: TextInputType.visiblePassword,
decoration:
InputDecoration
(
// border: UnderlineInputBorder // OutlineInputBorder
// (
// ),
// hintText: 'WOW',
enabledBorder: UnderlineInputBorder
(
borderSide: BorderSide
(
color: Theme.of(context).primaryColor,
),
),
border: InputBorder.none,
),
onFieldSubmitted: (v) {
String autoReplace(final String x) {
final words = x.split(' ');
if (words.length == 0) {
return x;
}
final head = words.first;
final tail = words.sublist(1);
final guessHead = head.replaceAll('-', '_');
return [ guessHead, ...tail ].join(' ');
}
final _text = state.textController.text.trim();
final line = autoReplace(_text);
if (line.isNotEmpty) {
log.finer('terminal input: ${line}');
state.appendInput(line);
state.textController.clear();
}
else {
state.textController.clear();
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
},
);
return Container
(
// padding: const EdgeInsets.all(10.0),
child: Align
(
alignment: Alignment.topLeft,
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
Expanded
(
flex: 1,
child: SingleChildScrollView
(
scrollDirection: Axis.vertical,
reverse: true,
child: Column
(
children: <Widget>
[
Text
(
state.stdout.join('\n'),
style: Theme.of(context).textTheme.body2,
)
],
)
)
),
Container
(
margin: const EdgeInsets.all(10.0),
child: input,
),
],
),
),
);
}
Widget terminal(BuildContext context, SyncedState state) => terminalView(context, 'terminal', state);
Widget pageView (BuildContext context, SyncedState state) {
void _onPageChanged(int pageIndex) {
if (pageIndex != 0) {
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
state.onPageChanged(pageIndex);
}
return PageView (
controller: state.pageController,
onPageChanged: _onPageChanged,
children:
[
terminal(context, state),
summary(context, state),
getTransactionPool(context, state),
getConnections(context, state),
getInfo(context, state),
// syncInfo(state),
],
);
}
Widget build(BuildContext context, SyncedState state) {
return Scaffold
(
body: pageView(context, state)
);
}

@ -0,0 +1,65 @@
/*
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 'package:flutter/material.dart';
import '../state.dart';
import '../config.dart' as config;
Widget build(BuildContext context, SyncingState state) {
return Scaffold
(
// appBar: AppBar
// (
// // title: Text(widget.title),
// title: Text('CyberWOW'),
// ),
body: Container
(
// padding: const EdgeInsets.all(10.0),
child: Align
(
alignment: Alignment.topLeft,
child: Column
(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>
[
Expanded
(
flex: 1,
child: SingleChildScrollView
(
scrollDirection: Axis.vertical,
reverse: true,
child: Text
(
state.stdout.join('\n'),
style: Theme.of(context).textTheme.body1,
)
)
),
],
),
),
),
);
}

@ -1,41 +1,62 @@
# Generated by pub
# See https://www.dartlang.org/tools/pub/glossary#lockfile
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.0"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.4.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
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"
cupertino_icons:
dependency: "direct main"
version: "1.14.12"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: cupertino_icons
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
version: "2.1.4"
flutter:
dependency: "direct main"
description: flutter
@ -46,48 +67,151 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http:
dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.1"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.12"
intl:
dependency: "direct main"
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.1"
logging:
dependency: "direct main"
description:
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "0.11.4"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.5"
version: "0.12.6"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
version: "1.1.8"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.2"
version: "1.6.4"
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.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.5.0"
version: "1.9.0"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
platform:
dependency: transitive
description:
name: platform
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.2"
version: "2.1.3"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
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+8"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
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+5"
sky_engine:
dependency: transitive
description: flutter
@ -99,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:
@ -120,7 +244,7 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "1.0.5"
term_glyph:
dependency: transitive
description:
@ -134,7 +258,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.4"
version: "0.2.15"
typed_data:
dependency: transitive
description:
@ -149,6 +273,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.1"
sdks:
dart: ">=2.2.0 <3.0.0"
flutter: ">=0.1.4 <2.0.0"
dart: ">=2.6.0 <3.0.0"
flutter: ">=1.12.13+hotfix.5 <2.0.0"

@ -1,17 +1,7 @@
name: cyberwow
description: A new Flutter project.
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 0.6.1+3
version: 0.9.3+0
environment:
sdk: ">=2.1.0 <3.0.0"
@ -20,49 +10,29 @@ dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
path_provider: ^1.1.0
http: ^0.12.0
logging: ^0.11.3
intl: ^0.16.0
shared_preferences: ^0.5.6
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- native/output/x86_64/wownerod
- native/output/arm64/wownerod
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
- assets/wow-sonic.png
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
fonts:
- family: RobotoMono
fonts:
- asset: fonts/RobotoMono-Regular.ttf
- asset: fonts/RobotoMono-Bold.ttf
weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
- family: VT323
fonts:
- asset: fonts/VT323/VT323-Regular.ttf

@ -0,0 +1,38 @@
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
# fdroid vm might require a manual enabling of "I/O APIC"
let
fdroid-python-packages = python-packages: with python-packages; [
androguard
clint
defusedxml
GitPython
libcloud
mwclient
paramiko
pillow
pyasn1
pyasn1-modules
python-vagrant
pyyaml
qrcode
requests
ruamel_yaml
libvirt
]
; python-with-fdroid-packages = pkgs.python3.withPackages fdroid-python-packages
; in
mkShell
{
buildInputs =
[
python-with-fdroid-packages
]
; }

@ -1,7 +1,32 @@
let
# moz_overlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz)
# # ; nixpkgs = import <nixpkgs> { overlays = [ moz_overlay ]; }
# 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> {}
; android-studio-deps = with nixpkgs;
@ -34,15 +59,113 @@ let
unzip
which
xkeyboard_config
zlib
]
; 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
@ -57,11 +180,24 @@ with nixpkgs;
# openjdk
# jetbrains.jdk
# zulu
jdk
dart_dev
jdk13
# dart_dev
gnumake
gcc
entr
androidenv.androidPkgs_9_0.platform-tools
# androidenv.androidPkgs_9_0.platform-tools
zlib
ncurses
# gcc
libtool
autoconf
automake
gnum4
pkgconfig
cmake
ccache
]
++ android-studio-deps
)
@ -70,20 +206,39 @@ with nixpkgs;
[
])
; profile = ''
export ANDROID_HOME=~/SDK/Android/Sdk
PATH=~/scm/flutter/vendor/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_ROOT=~/SDK/Android/ndk-archive/android-ndk-r20
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
export _JAVA_AWT_WM_NONREPARENTING=1
export DART_VM_OPTIONS=--root-certs-file=/etc/ssl/certs/ca-certificates.crt
export ANDROID_NDK_VERSION_WOW=r17c
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
''

@ -0,0 +1,109 @@
#!/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
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
name=boost
version=1_71_0
cd $src_root/${name}_${version}
./bootstrap.sh
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
# ICONV_PATH=$build_root/build/libiconv/$arch
ICONV_PATH=$build_root/build/$arch
# PREFIX=$build_root/build/${name}/$arch
PREFIX=$build_root/build/$arch
echo "building for ${arch}"
(
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
exit 0

@ -0,0 +1,56 @@
#!/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=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}
if [ ! -z $SRC_BOOST ]; then
echo "using pre-fetched $name"
cp $SRC_BOOST $out
else
curl -# -L -o $out -O $url
fi
echo "$hash $out" | sha256sum -c
tar xfv $out

@ -0,0 +1,40 @@
#!/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
build_root=$BUILD_PATH
chmod u+w -f -R $build_root || true
rm -rf $build_root
mkdir -p $build_root

@ -0,0 +1,70 @@
#!/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
src_root=$BUILD_ROOT_SRC
build_root=$BUILD_ROOT
target_root=`pwd`
name=wownero
cd $src_root/${name}
archs=(arm64)
for arch in ${archs[@]}; do
extra_cmake_flags=""
case ${arch} in
"arm")
target_host=arm-linux-androideabi
;;
"arm64")
target_host=aarch64-linux-android
target_abi=arm64-v8a
;;
"x86_64")
target_host=x86_64-linux-android
;;
*)
exit 16
;;
esac
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
done
exit 0

@ -0,0 +1,67 @@
#!/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.
DEFAULT_ANDROID_NDK_ROOT=~/SDK/Android/ndk-archive/android-ndk-r20
ANDROID_NDK_ROOT="${ANDROID_NDK_ROOT:-${DEFAULT_ANDROID_NDK_ROOT}}"
export ANDROID_NDK_ROOT=`realpath $ANDROID_NDK_ROOT`
DEFAULT_ANDROID_NDK_VERSION=r20
ANDROID_NDK_VERSION="${ANDROID_NDK_VERSION:-${DEFAULT_ANDROID_NDK_VERSION}}"
BUILD_PATH=../cyberwow-build
DEFAULT_BUILD_ROOT=${BUILD_PATH}/$ANDROID_NDK_VERSION
BUILD_ROOT="${BUILD_ROOT:-${DEFAULT_BUILD_ROOT}}"
export BUILD_ROOT=`realpath $BUILD_ROOT`
BUILD_ROOT_SRC=${BUILD_ROOT}/src
DEFAULT_NPROC=$(nproc)
NPROC="${NPROC:-${DEFAULT_NPROC}}"
export NPROC
# wownero can only be built with ndk-r17c
DEFAULT_ANDROID_NDK_VERSION_WOW=r17c
ANDROID_NDK_VERSION_WOW="${ANDROID_NDK_VERSION_WOW:-${DEFAULT_ANDROID_NDK_VERSION_WOW}}"
DEFAULT_ANDROID_NDK_ROOT_WOW=$ANDROID_NDK_ROOT/../$ANDROID_NDK_VERSION_WOW
ANDROID_NDK_ROOT_WOW="${ANDROID_NDK_ROOT_WOW:-${DEFAULT_ANDROID_NDK_ROOT_WOW}}"
export ANDROID_NDK_ROOT_WOW=`realpath $ANDROID_NDK_ROOT_WOW`
DEFAULT_BUILD_ROOT_WOW=${BUILD_PATH}/$ANDROID_NDK_VERSION_WOW
BUILD_ROOT_WOW="${BUILD_ROOT_WOW:-${DEFAULT_BUILD_ROOT_WOW}}"
export BUILD_ROOT_WOW=`realpath $BUILD_ROOT_WOW`

@ -0,0 +1,86 @@
#!/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
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
version=1.16
name=libiconv
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}"
(
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
exit 0

@ -0,0 +1,55 @@
#!/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=libiconv
version=1.16
hash=e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04
url=http://ftp.gnu.org/pub/gnu/${name}/${name}-${version}.tar.gz
out=${name}-${version}.tar.gz
rm -rf ${name}-${version}
if [ ! -z $SRC_ICONV ]; then
echo "using pre-fetched $name"
cp $SRC_ICONV $out
else
curl -# -L -o $out -O $url
fi
echo "$hash $out" | sha256sum -c
tar -xzf $out

@ -0,0 +1,95 @@
#!/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
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
name=openssl
version=1.1.1k
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
# ZLIB_PATH=$build_root/build/zlib/$arch
ZLIB_PATH=$build_root/build/$arch
# PREFIX=$build_root/build/${name}/$arch
PREFIX=$build_root/build/$arch
echo "building for ${arch}"
(
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 \
&& make -j${NPROC} SHLIB_VERSION_NUMBER= SHLIB_EXT=.so \
&& make install_sw SHLIB_VERSION_NUMBER= SHLIB_EXT=.so \
&& make clean \
)
done
exit 0

@ -0,0 +1,55 @@
#!/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=openssl
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}
if [ ! -z $SRC_OPENSSL ]; then
echo "using pre-fetched $name"
cp $SRC_OPENSSL $out
else
curl -# -L -o $out -O $url
fi
echo "${hash} $out" | sha256sum -c
tar xzf $out

@ -0,0 +1,88 @@
#!/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
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
name=libsodium
version=1.0.18
cd $src_root/${name}-${version}
./autogen.sh
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}"
(
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 \
)
done
exit 0

@ -0,0 +1,55 @@
#!/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=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}
if [ ! -z $SRC_SODIUM ]; then
echo "using pre-fetched $name"
cp $SRC_SODIUM $out
else
curl -# -L -o $out -O $url
fi
echo "${hash} $out" | sha256sum -c
tar xzf $out

@ -0,0 +1,49 @@
#!/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
build_root=$BUILD_ROOT_WOW
PATH=$ANDROID_NDK_ROOT_WOW/build/tools/:$PATH
args="--api 23 --stl=libc++"
archs=(arm64)
for arch in ${archs[@]}; do
if [ ! -d "$build_root/tool/$arch" ]; then
echo "installing $arch"
make_standalone_toolchain.py $args --arch $arch --install-dir $build_root/tool/$arch
fi
done

@ -0,0 +1,45 @@
#!/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
build_root=$BUILD_ROOT_WOW
PATH=$ANDROID_NDK_ROOT_WOW/build/tools/:$PATH
archs=(arm64)
for arch in ${archs[@]}; do
cd $build_root/tool/$arch/sysroot && \
mkdir -p var/empty/include/android && \
cp usr/include/android/api-level.h var/empty/include/android/
done

@ -0,0 +1,51 @@
#!/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
build_root=$BUILD_ROOT
PATH=$ANDROID_NDK_ROOT/build/tools/:$PATH
args="--api 29 --stl=libc++"
archs=(arm64)
for arch in ${archs[@]}; do
if [ ! -d "$build_root/tool/$arch" ]; then
echo "installing $arch"
make_standalone_toolchain.py $args --arch $arch --install-dir $build_root/tool/$arch
fi
done
mkdir -p $BUILD_ROOT_SRC

@ -0,0 +1,102 @@
#!/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
build_root=$BUILD_ROOT
src_root=$BUILD_ROOT_SRC
build_root_wow=$BUILD_ROOT_WOW
name=wownero
cd $src_root/${name}
archs=(arm64)
for arch in ${archs[@]}; do
extra_cmake_flags=""
case ${arch} in
"arm")
target_host=arm-linux-androideabi
;;
"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}"
mkdir -p $PREFIX/dlib/
rm -f $PREFIX/dlib/libtinfo.so.5
ln -s $PATH_NCURSES/lib/libncursesw.so.5 $PREFIX/dlib/libtinfo.so.5
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PREFIX/dlib
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" \
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
exit 0

Some files were not shown because too many files have changed in this diff Show More