diff --git a/Makefile b/Makefile index db18b0949..642d4fac6 100644 --- a/Makefile +++ b/Makefile @@ -1,70 +1,9 @@ # TODO(mrcyjanek): Cleanup, this is borrowed from unnamed_monero_wallet repo. -MONERO_C_TAG=v0.18.3.3-RC31 +MONERO_C_TAG=v0.18.3.3-RC35 LIBCPP_SHARED_SO_TAG=latest-RC1 LIBCPP_SHARED_SO_NDKVERSION=r17c -.PHONY: android -android: - ./build_changelog.sh - flutter build apk --split-per-abi --flavor calc --dart-define=libstealth_calculator=true - flutter build apk --split-per-abi --flavor clean --dart-define=libstealth_calculator=false - -.PHONY: linux -linux: - ./build_changelog.sh - flutter build linux - echo https://static.mrcyjanek.net/monero_c/${MONERO_C_TAG}/${TARGET_TRIPLET}_libwallet2_api_c.so.xz - wget https://static.mrcyjanek.net/monero_c/${MONERO_C_TAG}/${TARGET_TRIPLET}_libwallet2_api_c.so.xz \ - -O build/linux/${FLUTTER_ARCH}/release/bundle/lib/libwallet2_api_c.so.xz - -rm build/linux/${FLUTTER_ARCH}/release/bundle/lib/libwallet2_api_c.so - unxz build/linux/${FLUTTER_ARCH}/release/bundle/lib/libwallet2_api_c.so.xz - -rm build/linux/${FLUTTER_ARCH}/release/xmruw-linux-${DEBIAN_ARCH}.tar* - (cd build/linux/${FLUTTER_ARCH}/release && cp -a bundle xmruw && tar -cvf xmruw-linux-${DEBIAN_ARCH}.tar xmruw && xz -e xmruw-linux-${DEBIAN_ARCH}.tar) - - -.PHONY: linux_debug_lib -linux_debug_lib: - wget https://static.mrcyjanek.net/monero_c/${MONERO_C_TAG}/${shell gcc -dumpmachine}_libwallet2_api_c.so.xz \ - -O build/linux/${FLUTTER_ARCH}/debug/bundle/lib/libwallet2_api_c.so.xz - -rm build/linux/${FLUTTER_ARCH}/debug/bundle/lib/libwallet2_api_c.so - unxz build/linux/${FLUTTER_ARCH}/debug/bundle/lib/libwallet2_api_c.so.xz - -deb: - dart pub global activate --source git https://github.com/tomekit/flutter_to_debian.git - cat debian/debian.yaml.txt | sed 's/x64/${FLUTTER_ARCH}/g' | sed 's/amd64/${DEBIAN_ARCH}/g' > debian/debian.yaml - ${HOME}/.pub-cache/bin/flutter_to_debian - -.PHONY: dev -dev: libs - -dev: -lib/const/resource.g.dart: - dart pub global activate flutter_asset_generator - timeout 15 ${HOME}/.pub-cache/bin/fgen || true - mv lib/const/resource.dart lib/const/resource.g.dart -.PHONY: lib/const/resource.g.dart - -.PHONY: sailfishos -sailfishos: - ./build_changelog.sh - bash ./elinux/sailfish_build.sh - -.PHONY: version -version: - sed -i "s/^version: .*/version: 1.0.0+$(shell git rev-list --count HEAD)/" "pubspec.yaml" - sed -i "s/^ Version: .*/ Version: 1.0.0+$(shell git rev-list --count HEAD)/" "debian/debian.yaml.txt" - sed -i "s/^Version=.*/Version=1.0.0+$(shell git rev-list --count HEAD)/" "debian/gui/xmruw.desktop" - sed -i "s/^Version=.*/Version=1.0.0+$(shell git rev-list --count HEAD)/" "elinux/unnamed-monero-wallet.desktop" - sed -i "s/^Version: .*/Version: 1.0.0+$(shell git rev-list --count HEAD)/" "elinux/sailfishos.spec" - sed -i "s/^Release: .*/Release: $(shell git rev-list --count HEAD)/" "elinux/sailfishos.spec" - sed -i "s/^Version: .*/Version: 1.0.0+$(shell git rev-list --count HEAD)/" "elinux/sailfishos.spec" - sed -i "s/^const xmruwVersion = .*/const xmruwVersion = '$(shell git describe --tags)';/" "lib/helpers/licenses_extra.dart" - -.PHONY: lib/helpers/licenses.g.dart -lib/helpers/licenses.g.dart: - dart pub run flutter_oss_licenses:generate.dart -o lib/helpers/licenses.g.dart - libs: android/app/src/main/jniLibs/arm64-v8a/libmonero_libwallet2_api_c.so .PHONY: android/app/src/main/jniLibs/arm64-v8a/libmonero_libwallet2_api_c.so android/app/src/main/jniLibs/arm64-v8a/libmonero_libwallet2_api_c.so: diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index dfd0d315a..dc767a55d 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.monero.app"> + package="com.cakewallet.cake_wallet"> <!-- Flutter needs it to communicate with the running application to allow setting breakpoints, to provide hot reload, etc. --> diff --git a/cw_monero/example/pubspec.lock b/cw_monero/example/pubspec.lock index 188b1c52e..333c0299b 100644 --- a/cw_monero/example/pubspec.lock +++ b/cw_monero/example/pubspec.lock @@ -245,8 +245,8 @@ packages: dependency: transitive description: path: "." - ref: e2149153ecbaa6cc4d7d3970d8fa8ce1099b63af - resolved-ref: e2149153ecbaa6cc4d7d3970d8fa8ce1099b63af + ref: "57e075ee67d16aa0f3f75fba67d79529fbc73a6c" + resolved-ref: "57e075ee67d16aa0f3f75fba67d79529fbc73a6c" url: "https://git.mrcyjanek.net/mrcyjanek/monero.dart" source: git version: "0.0.0" diff --git a/cw_monero/lib/api/transaction_history.dart b/cw_monero/lib/api/transaction_history.dart index 8e69efca0..c349dd312 100644 --- a/cw_monero/lib/api/transaction_history.dart +++ b/cw_monero/lib/api/transaction_history.dart @@ -134,10 +134,9 @@ void commitTransactionFromPointerAddress({required int address}) => void commitTransaction({required monero.PendingTransaction transactionPointer}) { final txCommit = monero.PendingTransaction_commit(transactionPointer, filename: '', overwrite: false); - final status = monero.PendingTransaction_status(transactionPointer.cast()); final String? error = (() { - final status = monero.Wallet_status(wptr!); + final status = monero.PendingTransaction_status(transactionPointer.cast()); if (status == 0) { return null; } diff --git a/cw_monero/lib/api/wallet.dart b/cw_monero/lib/api/wallet.dart index a40b987ba..9e37268ad 100644 --- a/cw_monero/lib/api/wallet.dart +++ b/cw_monero/lib/api/wallet.dart @@ -23,14 +23,18 @@ bool isNewTransactionExist() { } String getFilename() => monero.Wallet_filename(wptr!); -// TODO(mrcyjanek): Cake polyseed support String getSeed() { - final legacy = monero.Wallet_seed(wptr!, seedOffset: ''); - final polyseed = monero.Wallet_getPolyseed(wptr!, passphrase: ''); - if (polyseed == "") { - return legacy; + // monero.Wallet_setCacheAttribute(wptr!, key: "cakewallet.seed", value: seed); + final cakepolyseed = monero.Wallet_getCacheAttribute(wptr!, key: "cakewallet.seed"); + if (cakepolyseed != "") { + return cakepolyseed; } - return polyseed; + final polyseed = monero.Wallet_getPolyseed(wptr!, passphrase: ''); + if (polyseed != "") { + return polyseed; + } + final legacy = monero.Wallet_seed(wptr!, seedOffset: ''); + return legacy; } String getAddress({int accountIndex = 0, int addressIndex = 1}) => monero.Wallet_address(wptr!, accountIndex: accountIndex, addressIndex: addressIndex); diff --git a/cw_monero/lib/api/wallet_manager.dart b/cw_monero/lib/api/wallet_manager.dart index 6e7042793..e441d7406 100644 --- a/cw_monero/lib/api/wallet_manager.dart +++ b/cw_monero/lib/api/wallet_manager.dart @@ -114,15 +114,14 @@ void restoreWalletFromSpendKeySync( // nettype: 0, // ); - wptr = monero.WalletManager_createWalletFromPolyseed( + wptr = monero.WalletManager_createDeterministicWalletFromSpendKey( wmPtr, path: path, password: password, - mnemonic: seed, - seedOffset: '', - newWallet: false, + language: language, + spendKeyString: spendKey, + newWallet: true, // TODO(mrcyjanek): safe to remove restoreHeight: restoreHeight, - kdfRounds: 1, ); final status = monero.Wallet_status(wptr!); @@ -133,6 +132,8 @@ void restoreWalletFromSpendKeySync( throw WalletRestoreFromKeysException(message: err); } + monero.Wallet_setCacheAttribute(wptr!, key: "cakewallet.seed", value: seed); + storeSync(); } diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock index 86b1ef5bb..7503cd96d 100644 --- a/cw_monero/pubspec.lock +++ b/cw_monero/pubspec.lock @@ -414,8 +414,8 @@ packages: dependency: "direct main" description: path: "." - ref: e2149153ecbaa6cc4d7d3970d8fa8ce1099b63af - resolved-ref: e2149153ecbaa6cc4d7d3970d8fa8ce1099b63af + ref: "57e075ee67d16aa0f3f75fba67d79529fbc73a6c" + resolved-ref: "57e075ee67d16aa0f3f75fba67d79529fbc73a6c" url: "https://git.mrcyjanek.net/mrcyjanek/monero.dart" source: git version: "0.0.0" diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml index 26ae7cc50..7d3b46495 100644 --- a/cw_monero/pubspec.yaml +++ b/cw_monero/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: monero: git: url: https://git.mrcyjanek.net/mrcyjanek/monero.dart - ref: e2149153ecbaa6cc4d7d3970d8fa8ce1099b63af + ref: 57e075ee67d16aa0f3f75fba67d79529fbc73a6c dev_dependencies: flutter_test: diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 0f395007d..3ec3e7978 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -111,10 +111,7 @@ dependencies: git: url: https://github.com/cake-tech/bitcoin_base.git ref: cake-update-v2 - monero: - git: - url: https://git.mrcyjanek.net/mrcyjanek/monero.dart - ref: master + dev_dependencies: flutter_test: sdk: flutter diff --git a/run-android.sh b/run-android.sh index dd694267a..880d86b6f 100755 --- a/run-android.sh +++ b/run-android.sh @@ -4,7 +4,7 @@ get_current_branch() { if git rev-parse --git-dir > /dev/null 2>&1; then branch=$(git rev-parse --abbrev-ref HEAD) - echo "$branch" + echo "$branch" | tr '-' '_' else echo "Error: Not a git repository." return 1 @@ -27,4 +27,4 @@ if [[ $? -eq 0 ]]; then fi # run the app -flutter run \ No newline at end of file +flutter run diff --git a/scripts/docker/.gitignore b/scripts/docker/.gitignore index ea1472ec1..c39e9d9f7 100644 --- a/scripts/docker/.gitignore +++ b/scripts/docker/.gitignore @@ -1 +1,2 @@ output/ +cache/ \ No newline at end of file diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile index 1bcb0464e..a352cdc71 100755 --- a/scripts/docker/Dockerfile +++ b/scripts/docker/Dockerfile @@ -4,7 +4,7 @@ LABEL authors="konsti" ENV MONERO_BRANCH=release-v0.18.2.2-android RUN apt-get update && \ echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \ - apt-get install -y dialog apt-utils curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang bison + apt-get install -y dialog apt-utils curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang bison ccache RUN mkdir /opt/android/ @@ -56,5 +56,7 @@ RUN ./build_zmq.sh COPY entrypoint.sh /opt/android/cakewallet/ COPY build_monero.sh /opt/android/cakewallet/ COPY copy_monero_deps.sh /opt/android/cakewallet/ +COPY build_haven.sh /opt/android/cakewallet/ +COPY copy_haven_deps.sh /opt/android/cakewallet/ ENTRYPOINT ["./entrypoint.sh"] diff --git a/scripts/docker/build_haven.sh b/scripts/docker/build_haven.sh index 1dc4a6cfd..1cfb16265 100755 --- a/scripts/docker/build_haven.sh +++ b/scripts/docker/build_haven.sh @@ -1,71 +1,71 @@ -#!/bin/sh -set -x -e - -. ./config.sh -HAVEN_VERSION=tags/v3.0.7 -HAVEN_SRC_DIR=${WORKDIR}/haven - -git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR} -git checkout ${HAVEN_VERSION} -cd $HAVEN_SRC_DIR -git submodule init -git submodule update - -for arch in "aarch" "aarch64" "i686" "x86_64" -do -FLAGS="" -PREFIX=${WORKDIR}/prefix_${arch} -DEST_LIB_DIR=${PREFIX}/lib/haven -DEST_INCLUDE_DIR=${PREFIX}/include/haven -export CMAKE_INCLUDE_PATH="${PREFIX}/include" -export CMAKE_LIBRARY_PATH="${PREFIX}/lib" -ANDROID_STANDALONE_TOOLCHAIN_PATH="${TOOLCHAIN_BASE_DIR}_${arch}" -PATH="${ANDROID_STANDALONE_TOOLCHAIN_PATH}/bin:${ORIGINAL_PATH}" - -mkdir -p $DEST_LIB_DIR -mkdir -p $DEST_INCLUDE_DIR - -case $arch in - "aarch" ) - CLANG=arm-linux-androideabi-clang - CXXLANG=arm-linux-androideabi-clang++ - BUILD_64=OFF - TAG="android-armv7" - ARCH="armv7-a" - ARCH_ABI="armeabi-v7a" - FLAGS="-D CMAKE_ANDROID_ARM_MODE=ON -D NO_AES=true";; - "aarch64" ) - CLANG=aarch64-linux-androideabi-clang - CXXLANG=aarch64-linux-androideabi-clang++ - BUILD_64=ON - TAG="android-armv8" - ARCH="armv8-a" - ARCH_ABI="arm64-v8a";; - "i686" ) - CLANG=i686-linux-androideabi-clang - CXXLANG=i686-linux-androideabi-clang++ - BUILD_64=OFF - TAG="android-x86" - ARCH="i686" - ARCH_ABI="x86";; - "x86_64" ) - CLANG=x86_64-linux-androideabi-clang - CXXLANG=x86_64-linux-androideabi-clang++ - BUILD_64=ON - TAG="android-x86_64" - ARCH="x86-64" - ARCH_ABI="x86_64";; -esac - -cd $HAVEN_SRC_DIR -rm -rf ./build/release -mkdir -p ./build/release -cd ./build/release -CC=${CLANG} CXX=${CXXLANG} cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH=${ARCH} -D STATIC=ON -D BUILD_64=${BUILD_64} -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG=${TAG} -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI=${ARCH_ABI} $FLAGS ../.. - -make wallet_api -j$THREADS -find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \; - -cp -r ./lib/* $DEST_LIB_DIR -cp ../../src/wallet/api/wallet2_api.h $DEST_INCLUDE_DIR -done +#!/bin/sh +set -x -e + +. ./config.sh +HAVEN_VERSION=tags/v3.0.7 +HAVEN_SRC_DIR=${WORKDIR}/haven + +git clone https://github.com/haven-protocol-org/haven-main.git ${HAVEN_SRC_DIR} +cd $HAVEN_SRC_DIR +git checkout ${HAVEN_VERSION} +git submodule init +git submodule update + +for arch in "aarch" "aarch64" "i686" "x86_64" +do +FLAGS="" +PREFIX=${WORKDIR}/prefix_${arch} +DEST_LIB_DIR=${PREFIX}/lib/haven +DEST_INCLUDE_DIR=${PREFIX}/include/haven +export CMAKE_INCLUDE_PATH="${PREFIX}/include" +export CMAKE_LIBRARY_PATH="${PREFIX}/lib" +ANDROID_STANDALONE_TOOLCHAIN_PATH="${TOOLCHAIN_BASE_DIR}_${arch}" +PATH="${ANDROID_STANDALONE_TOOLCHAIN_PATH}/bin:${ORIGINAL_PATH}" + +mkdir -p $DEST_LIB_DIR +mkdir -p $DEST_INCLUDE_DIR + +case $arch in + "aarch" ) + CLANG=arm-linux-androideabi-clang + CXXLANG=arm-linux-androideabi-clang++ + BUILD_64=OFF + TAG="android-armv7" + ARCH="armv7-a" + ARCH_ABI="armeabi-v7a" + FLAGS="-D CMAKE_ANDROID_ARM_MODE=ON -D NO_AES=true";; + "aarch64" ) + CLANG=aarch64-linux-androideabi-clang + CXXLANG=aarch64-linux-androideabi-clang++ + BUILD_64=ON + TAG="android-armv8" + ARCH="armv8-a" + ARCH_ABI="arm64-v8a";; + "i686" ) + CLANG=i686-linux-androideabi-clang + CXXLANG=i686-linux-androideabi-clang++ + BUILD_64=OFF + TAG="android-x86" + ARCH="i686" + ARCH_ABI="x86";; + "x86_64" ) + CLANG=x86_64-linux-androideabi-clang + CXXLANG=x86_64-linux-androideabi-clang++ + BUILD_64=ON + TAG="android-x86_64" + ARCH="x86-64" + ARCH_ABI="x86_64";; +esac + +cd $HAVEN_SRC_DIR +rm -rf ./build/release +mkdir -p ./build/release +cd ./build/release +CC=${CLANG} CXX=${CXXLANG} cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH=${ARCH} -D STATIC=ON -D BUILD_64=${BUILD_64} -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG=${TAG} -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI=${ARCH_ABI} $FLAGS ../.. + +make wallet_api -j$THREADS +find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \; + +cp -r ./lib/* $DEST_LIB_DIR +cp ../../src/wallet/api/wallet2_api.h $DEST_INCLUDE_DIR +done diff --git a/scripts/docker/copy_haven_deps.sh b/scripts/docker/copy_haven_deps.sh index 5be7a1bb6..cef644701 100755 --- a/scripts/docker/copy_haven_deps.sh +++ b/scripts/docker/copy_haven_deps.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x -e +set -x WORKDIR=/opt/android CW_DIR=${WORKDIR}/cake_wallet diff --git a/scripts/docker/copy_monero_deps.sh b/scripts/docker/copy_monero_deps.sh index 611fedd01..1c2394c0d 100755 --- a/scripts/docker/copy_monero_deps.sh +++ b/scripts/docker/copy_monero_deps.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x -e +set -x WORKDIR=/opt/android CW_EXRTERNAL_DIR=${WORKDIR}/output/android diff --git a/scripts/docker/docker-compose.yml b/scripts/docker/docker-compose.yml index eaeea0f5b..00f24ce2e 100755 --- a/scripts/docker/docker-compose.yml +++ b/scripts/docker/docker-compose.yml @@ -7,3 +7,5 @@ services: MONERO_BRANCH: release-v0.18.2.2-android volumes: - ./output:/opt/android/output + - ./cache/dotcache:/root/.cache + - ./cache/dotccache:/root/.ccache diff --git a/scripts/docker/entrypoint.sh b/scripts/docker/entrypoint.sh index 84f106145..14f02a1f8 100755 --- a/scripts/docker/entrypoint.sh +++ b/scripts/docker/entrypoint.sh @@ -1,5 +1,11 @@ #!/bin/bash set -x -e +ls /opt/android + +rm -rf monero haven + ./build_monero.sh +./build_haven.sh ./copy_monero_deps.sh +./copy_haven_deps.sh