Compare commits

..

31 Commits

Author SHA1 Message Date
9ec4749244 Changed build workflow to run in container 2024-07-25 22:20:02 -04:00
7afe4a3136 Added node.js setup to build workflow 2024-07-25 22:10:47 -04:00
e3b20fa518 Updated checkout workflow version 2024-07-25 22:07:23 -04:00
96e8503960 Set github build file 2024-07-25 21:58:22 -04:00
c911d0166e Revert to previous build workflow 2024-07-25 21:52:38 -04:00
4f5d81c88b Updated build workflow 2024-07-25 21:43:39 -04:00
d2a96ccce9 Added environment setup to build workflow 2024-07-25 14:41:11 -04:00
426d9c32de Test build and push workflow action 2024-07-25 14:36:17 -04:00
60ad417b9e Added workflow troubleshooting 2024-07-25 14:25:15 -04:00
4ea34bb60d Added github.workspace to build workflow command 2024-07-24 20:44:46 -04:00
92bdbe8192 Test alternative build method 2024-07-23 21:01:07 -04:00
93b9b26d1d Added bind propogation 2024-07-22 14:42:27 -04:00
8b7ee2d8f0 Additional build workflow troubleshooting 2024-07-22 14:34:04 -04:00
099fc8e394 Additional build workflow troubleshooting 2024-07-22 14:32:17 -04:00
8c7c1dc9d7 Additional build workflow troubleshooting 2024-07-22 14:16:00 -04:00
6cfbb8559b Added additional build workflow troubleshooting 2024-07-22 14:11:03 -04:00
8953c8c5f2 Removed interactive shell and added workflow troubleshooting 2024-07-22 14:03:49 -04:00
4df7f89c84 Added interactive session for debugging 2024-07-22 13:57:28 -04:00
e9c0de9e26 Changed build workflow mount point 2024-07-22 13:46:03 -04:00
0371a26a56 Added additional workflow troubleshooting code 2024-07-22 13:37:49 -04:00
bc6e61c66c Added additional workflow troubleshooting 2024-07-22 13:19:27 -04:00
6c4c702722 Added troubleshooting code to build workflow 2024-07-22 07:38:08 -04:00
f77f96f5a9 Corrected working directory 2024-07-22 07:36:39 -04:00
53e4bde4c0 Adjusted troubleshooting workflow code 2024-07-22 07:23:15 -04:00
651a1a3169 Added troubleshooting code to build workflow 2024-07-22 07:07:39 -04:00
91abd03fd3 Added https to build workflow 2024-07-21 21:56:08 -04:00
ab46af6cf9 Removed build workflow dependency installation 2024-07-21 21:52:50 -04:00
d08422420b Corrected setup-buildx-action version 2024-07-21 21:44:03 -04:00
0d801f5159 Updated action versions 2024-07-21 21:41:12 -04:00
f102dad609 Add comment 2024-07-21 21:33:47 -04:00
c6246962d8 Updated build workflow 2024-07-21 21:23:59 -04:00
49 changed files with 315 additions and 1032 deletions

View File

@@ -0,0 +1,36 @@
name: Build
run-name: Build Docker Image
on: [push, pull_request]
jobs:
# Build image and push to container registry
docker-build:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.11
if: "!startsWith(github.ref, 'refs/tags/v')"
continue-on-error: true
with:
key: docker-linux-static-{hash}
restore-keys: |
docker-linux-static-
- name: install dependencies
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
- name: prepare build environment
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
- name: sha256sum
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
- name: test qml
run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
- uses: actions/upload-artifact@v2
with:
name: ${{ github.job }}
path: |
/home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
/home/runner/work/monero-gui/monero-gui/build/release/bin/monerod

View File

@@ -1,107 +0,0 @@
import requests
import subprocess
from urllib.request import urlretrieve
import difflib
sech_key = "https://p2pool.io/SChernykh.asc"
sech_key_backup = "https://raw.githubusercontent.com/monero-project/gitian.sigs/master/gitian-pubkeys/SChernykh.asc"
sech_key_fp = "1FCA AB4D 3DC3 310D 16CB D508 C47F 82B5 4DA8 7ADF"
p2pool_files = [{
"os": "WIN",
"filename": "windows-x64.zip",
},
{
"os": "LINUX",
"filename": "linux-x64.tar.gz"
},
{
"os": "MACOS_AARCH64",
"filename": "macos-aarch64.tar.gz",
},
{
"os": "MACOS",
"filename": "macos-x64.tar.gz",
}]
def get_hash(fname):
fhash = subprocess.check_output(["sha256sum", fname]).decode("utf-8")
print(fhash.strip())
return fhash.split()[0]
def main():
global p2pool_files, sech_key, sech_key_backup, sech_key_fp
p2pool_tag_api = "https://api.github.com/repos/SChernykh/p2pool/releases/latest"
data = requests.get(p2pool_tag_api).json()
tag = data["tag_name"]
head = f"p2pool-{tag}-"
url = f"https://github.com/SChernykh/p2pool/releases/download/{tag}/"
try:
urlretrieve(sech_key,"SChernykh.asc")
except:
urlretrieve(sech_key_backup,"SChernykh.asc")
urlretrieve(f"{url}sha256sums.txt.asc","sha256sums.txt.asc")
subprocess.check_call(["gpg", "--import", "SChernykh.asc"])
subprocess.check_call(["gpg", "--verify", "sha256sums.txt.asc"])
fingerprint = subprocess.check_output(["gpg","--fingerprint", "SChernykh"]).decode("utf-8").splitlines()[1].strip()
assert fingerprint == sech_key_fp
with open("sha256sums.txt.asc","r") as f:
lines = f.readlines()
signed_hashes = {}
for line in lines:
if "Name:" in line:
signed_fname = line.split()[1]
if "SHA256:" in line:
signed_hashes[signed_fname] = line.split()[1].lower()
expected = ""
for i in range(len(p2pool_files)):
fname = p2pool_files[i]["filename"]
str_os =p2pool_files[i]["os"]
dl = f"{url}{head}{fname}"
urlretrieve(dl,f"{head}{fname}")
fhash = get_hash(f"{head}{fname}")
assert signed_hashes[f"{head}{fname}"] == fhash
if i == 0:
expected += f" #ifdef Q_OS_{str_os}\n"
else:
expected += f" #elif defined(Q_OS_{str_os})\n"
expected += f" url = \"https://github.com/SChernykh/p2pool/releases/download/{tag}/{head}{fname}\";\n"
expected += f" fileName = m_p2poolPath + \"/{head}{fname}\";\n"
expected += f" validHash = \"{fhash}\";\n"
expected += " #endif\n"
print(f"Expected:\n{expected}")
with open("src/p2pool/P2PoolManager.cpp","r") as f:
p2pool_lines = f.readlines()
unexpected = ""
ignore = 1
for line in p2pool_lines:
if ignore == 0:
unexpected += line
if "QString validHash;" in line:
ignore = 0
if "#endif" in line and ignore == 0:
break
d = difflib.Differ()
diff = d.compare(str(unexpected).splitlines(True),str(expected).splitlines(True))
print("Unexpected:")
for i in diff:
if i.startswith("?"):
continue
print(i.replace("\n",""))
assert unexpected == expected
if __name__ == "__main__":
main()

View File

@@ -1,196 +0,0 @@
name: ci/gh-actions/gui
on: [push, pull_request]
env:
FREE_DISKSPACE: |
sudo rm -rf /usr/local/.ghcup /usr/share/dotnet /usr/share/swift /usr/share/miniconda
QT_TAG: v5.15.17-lts-lgpl
QT_PREFIX: ${{ github.workspace }}/qt-install
jobs:
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: install dependencies
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm libsodium miniupnpc expat libunwind-headers protobuf qt5 pkg-config
- name: build
run: DEV_MODE=ON make release -j3
- name: test qml
run: build/release/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
build-ubuntu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: remove bundled boost
run: sudo rm -rf /usr/local/share/boost
- name: set apt conf
run: |
echo "Acquire::Retries \"3\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
echo "Acquire::http::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
echo "Acquire::ftp::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
- name: update apt
run: sudo apt update
- name: install monero dependencies
run: sudo apt -y install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev libprotobuf-dev protobuf-compiler
- name: install monero gui dependencies
run: sudo apt -y install qtbase5-dev qtdeclarative5-dev qml-module-qtqml-models2 qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-platform qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev libgcrypt20-dev xvfb
- name: build
run: DEV_MODE=ON make release -j3
- name: test qml
run: xvfb-run -a build/release/bin/monero-wallet-gui --test-qml
build-windows:
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: eine/setup-msys2@v2
with:
update: true
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-pcre mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-angleproject
- name: add qmake.exe and windeployqt.exe
run: |
cp -f "$MSYSTEM_PREFIX/bin/qmake-qt5.exe" "$MSYSTEM_PREFIX/bin/qmake.exe"
cp -f "$MSYSTEM_PREFIX/bin/windeployqt-qt5.exe" "$MSYSTEM_PREFIX/bin/windeployqt.exe"
- name: build
run: DEV_MODE=ON make release-win64 -j2
- name: deploy
run: make deploy
working-directory: build/release
- name: test qml
run: build/release/bin/monero-wallet-gui --test-qml
macos-bundle:
runs-on: macos-15
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: install dependencies
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config
- name: clone qt repo
run: git clone -b "${QT_TAG}" --recursive --depth 1 --shallow-submodules https://github.com/qt/qt5
- name: build qt from source
run: |
cd qt5
mkdir build && cd build
../configure -prefix "${QT_PREFIX}" -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine
make -j"$(sysctl -n hw.ncpu)"
make install
cd ../qttools/src/linguist/lrelease
../../../../build/qtbase/bin/qmake
make -j"$(sysctl -n hw.ncpu)"
make install
cd ../../../../qttools/src/macdeployqt/macdeployqt/
../../../../build/qtbase/bin/qmake
make -j"$(sysctl -n hw.ncpu)"
make install
- name: build monero-gui
run: |
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH="${QT_PREFIX}" ..
make -j"$(sysctl -n hw.ncpu)"
- name: deploy
run: make deploy
working-directory: build
- name: test qml
run: build/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
- name: create .tar
run: tar -cf monero-wallet-gui.tar monero-wallet-gui.app
working-directory: build/bin
- uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}
path: build/bin/monero-wallet-gui.tar
docker-linux-static:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: install dependencies
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
- name: free up diskspace
run: ${{env.FREE_DISKSPACE}}
- name: prepare build environment
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
- name: sha256sum
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
- name: test qml
run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
- uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}
path: |
/home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
/home/runner/work/monero-gui/monero-gui/build/release/bin/monerod
docker-windows-static:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: free up diskspace
run: ${{env.FREE_DISKSPACE}}
- name: prepare build environment
run: docker build --tag monero:build-env-windows --build-arg THREADS=3 --file Dockerfile.windows .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3'
- name: sha256sum
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
- uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}
path: |
/home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
/home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monerod.exe
docker-android:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: free up diskspace
run: ${{env.FREE_DISKSPACE}}
- name: prepare build environment
run: docker build --tag monero:build-env-android --build-arg THREADS=3 --file Dockerfile.android .
- name: build
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -e THREADS=3 monero:build-env-android
- uses: actions/upload-artifact@v4
with:
name: ${{ github.job }}
path: /home/runner/work/monero-gui/monero-gui/build/Android/release/android-build/monero-gui.apk
source-archive:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: archive
run: |
pip install git-archive-all
export VERSION="monero-gui-$(git describe)"
export OUTPUT="$VERSION.tar"
echo "OUTPUT=$OUTPUT" >> $GITHUB_ENV
/home/runner/.local/bin/git-archive-all --prefix "$VERSION/" --force-submodules "$OUTPUT"
- uses: actions/upload-artifact@v4
with:
name: ${{ env.OUTPUT }}
path: /home/runner/work/monero-gui/monero-gui/${{ env.OUTPUT }}

View File

@@ -1,174 +0,0 @@
name: Flatpak
on:
release:
types: released
jobs:
part1:
name: Part 1/3
if: github.repository == 'monero-project/monero-gui'
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Install deps
run: dnf -y install docker
- name: Setup QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- name: Build flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
env:
FLATPAK_BUILDER_N_JOBS: 3
with:
manifest-path: share/org.getmonero.Monero.yaml
arch: ${{ matrix.arch }}
cache: false
stop-at-module: boost
- name: Tar flatpak-builder
run: tar -cvf flatpak-builder.tar .flatpak-builder
- name: Save flatpak-builder
uses: actions/upload-artifact@v3
with:
name: flatpak-builder-${{ matrix.arch }}
path: flatpak-builder.tar
part2:
name: Part 2/3
if: github.repository == 'monero-project/monero-gui'
needs: part1
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install deps
run: dnf -y install docker
- name: Setup QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- name: Restore flatpak-builder
uses: actions/download-artifact@v4.1.7
with:
name: flatpak-builder-${{ matrix.arch }}
- name: Untar flatpak-builder
run: tar -xvf flatpak-builder.tar
- name: Build flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
env:
FLATPAK_BUILDER_N_JOBS: 3
with:
manifest-path: share/org.getmonero.Monero.yaml
arch: ${{ matrix.arch }}
cache: false
stop-at-module: monero-gui
- name: Tar flatpak-builder
run: tar -cvf flatpak-builder.tar .flatpak-builder
- name: Save flatpak-builder
uses: actions/upload-artifact@v3
with:
name: flatpak-builder-${{ matrix.arch }}
path: flatpak-builder.tar
part3:
name: Part 3/3
if: github.repository == 'monero-project/monero-gui'
needs: [part1, part2]
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Add version and date
run: |
sed -i 's/<version>/${{ github.event.release.tag_name }}/g' $GITHUB_WORKSPACE/share/org.getmonero.Monero.metainfo.xml
sed -i 's/<date>/'"$(date '+%F')"'/g' $GITHUB_WORKSPACE/share/org.getmonero.Monero.metainfo.xml
- name: Install deps
run: dnf -y install docker
- name: Setup QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: arm64
- name: Restore flatpak-builder
uses: actions/download-artifact@v4.1.7
with:
name: flatpak-builder-${{ matrix.arch }}
- name: Untar flatpak-builder
run: tar -xvf flatpak-builder.tar
- name: Build flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
env:
FLATPAK_BUILDER_N_JOBS: 3
with:
manifest-path: share/org.getmonero.Monero.yaml
arch: ${{ matrix.arch }}
cache: false
- name: Validate AppData
working-directory: flatpak_app/files/share/appdata
run: appstream-util validate org.getmonero.Monero.appdata.xml
- name: Delete flatpak-builder
uses: geekyeggo/delete-artifact@v2
with:
name: flatpak-builder-${{ matrix.arch }}
- name: Print hashes
working-directory: flatpak_app/files/bin
run: |
echo "Hashes of the ${{ matrix.arch }} binaries:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
for bin in monero-blockchain-ancestry monero-blockchain-depth monero-blockchain-export monero-blockchain-import monero-blockchain-mark-spent-outputs monero-blockchain-prune monero-blockchain-prune-known-spent-data monero-blockchain-stats monero-blockchain-usage monerod monero-gen-ssl-cert monero-gen-trusted-multisig monero-wallet-cli monero-wallet-gui monero-wallet-rpc p2pool; do sha256sum $bin; done >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "An example command to check hashes:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "$ flatpak run --command=sha256sum org.getmonero.Monero /app/bin/monero-wallet-gui" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
- name: Publish to Flathub Beta
uses: flatpak/flatpak-github-actions/flat-manager@v6
with:
flat-manager-url: https://hub.flathub.org
repository: beta
token: ${{ secrets.FLATHUB_ }}

View File

@@ -1,16 +0,0 @@
name: ci/gh-actions/verify
on:
push:
paths:
- 'src/p2pool/P2PoolManager.cpp'
pull_request:
paths:
- 'src/p2pool/P2PoolManager.cpp'
jobs:
p2pool-hashes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Verify Hashes
run: |
python3 .github/verify_p2pool.py

View File

@@ -4,8 +4,8 @@ project(monero-gui)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(VERSION_MAJOR "18")
set(VERSION_MINOR "4")
set(VERSION_REVISION "6")
set(VERSION_MINOR "3")
set(VERSION_REVISION "3")
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
option(STATIC "Link libraries statically, requires static Qt")
@@ -16,14 +16,6 @@ option(WITH_DESKTOP_ENTRY "Ask to install desktop entry on first startup" ON)
option(WITH_UPDATER "Regularly check for new updates" ON)
option(DEV_MODE "Checkout latest monero master on build" OFF)
if(DEV_MODE)
# DEV_MODE checks out the monero submodule to master, which requires C++17.
set(CMAKE_CXX_STANDARD 17)
else()
set(CMAKE_CXX_STANDARD 14)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
@@ -68,7 +60,6 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH)
get_directory_property(Boost_VERSION_STRING DIRECTORY "monero" DEFINITION Boost_VERSION_STRING)
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DQT_NO_DEBUG)
@@ -150,8 +141,6 @@ if(UNIX)
endif()
endif()
set(QT_MIN_VERSION "5.12")
find_package(PkgConfig REQUIRED)
# TODO: drop this once we switch to Qt 5.14+
@@ -160,13 +149,14 @@ if(Qt5QmlModels_PKG_CONFIG_FOUND)
list(APPEND QT5_LIBRARIES Qt5QmlModels)
endif()
# TODO: drop this once we switch to Qt 5.12+
find_package(Qt5XmlPatterns QUIET)
if(Qt5XmlPatterns_FOUND)
list(APPEND QT5_LIBRARIES Qt5XmlPatterns)
endif()
foreach(QT5_MODULE ${QT5_LIBRARIES})
find_package(${QT5_MODULE} ${QT_MIN_VERSION} REQUIRED)
find_package(${QT5_MODULE} REQUIRED)
include_directories(${${QT5_MODULE}_INCLUDE_DIRS})
endforeach()
@@ -366,7 +356,7 @@ if(APPLE)
endif()
if (APPLE AND NOT IOS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -std=c++11")
endif()
if(APPLE)
@@ -452,7 +442,7 @@ message(STATUS "Using C++ security hardening flags: ${CXX_SECURITY_FLAGS}")
message(STATUS "Using linker security hardening flags: ${LD_SECURITY_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${C_SECURITY_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_SECURITY_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${CXX_SECURITY_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LD_SECURITY_FLAGS} ${STATIC_FLAGS}")
add_subdirectory(translations)

View File

@@ -2,7 +2,7 @@
Use macOS 10.12 - 10.13 for better backwards compability.
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf@21 libgcrypt hidapi libusb cmake pkg-config && brew link protobuf@21`
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf libgcrypt hidapi`
2. Get the latest LTS from here: https://www.qt.io/offline-installers and install
@@ -12,7 +12,7 @@ Use macOS 10.12 - 10.13 for better backwards compability.
```bash
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=/path/to/Qt5.12.8/5.12.8/clang_64 ..
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 ..
make
make deploy
```
@@ -40,9 +40,9 @@ You can check if this step worked by using `codesign -dvvv monero-wallet-gui.app
3. `hdiutil create -fs HFS+ -srcfolder monero-gui-v0.X.Y.Z -volname monero-wallet-gui monero-gui-mac-x64-v0.X.Y.Z.dmg`
4. `xcrun notarytool submit monero-gui-mac-x64-v0.X.Y.Z.dmg --apple-id email@address.org --team-id XXXXXXXXXX`
4. `xcrun altool -t osx --file monero-gui-mac-x64-v0.X.Y.Z.dmg --primary-bundle-id org.monero-project.monero-wallet-gui.dmg --notarize-app --username email@address.org`
5. `xcrun notarytool info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee --apple-id email@address.org --team-id XXXXXXXXXX`
5. `xcrun altool --notarization-info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee -u email@address.org`
6. `xcrun stapler staple -v monero-gui-mac-x64-v0.X.Y.Z.dmg`

View File

@@ -1,16 +1,16 @@
FROM ubuntu:20.04
FROM debian:buster
ARG THREADS=1
ARG ANDROID_NDK_REVISION=23c
ARG ANDROID_NDK_HASH=e5053c126a47e84726d9f7173a04686a71f9a67a
ARG ANDROID_NDK_REVISION=21e
ARG ANDROID_NDK_HASH=c3ebc83c96a4d7f539bd72c241b2be9dcd29bda9
ARG ANDROID_SDK_REVISION=7302050_latest
ARG ANDROID_SDK_HASH=7a00faadc0864f78edd8f4908a629a46d622375cbe2e5814e82934aebecdb622
ARG QT_VERSION=v5.15.18-lts-lgpl
ARG QT_VERSION=v5.15.7-lts-lgpl
WORKDIR /opt/android
ENV WORKDIR=/opt/android
ENV ANDROID_NATIVE_API_LEVEL=31
ENV ANDROID_NATIVE_API_LEVEL=30
ENV ANDROID_API=android-${ANDROID_NATIVE_API_LEVEL}
ENV ANDROID_CLANG=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang
ENV ANDROID_CLANGPP=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++
@@ -20,7 +20,6 @@ ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=${JAVA_HOME}/bin:${PATH}
ENV PREFIX=${WORKDIR}/prefix
ENV TOOLCHAIN_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y ant automake build-essential ca-certificates-java file gettext git libc6 libncurses5 \
@@ -33,7 +32,7 @@ RUN PACKAGE_NAME=commandlinetools-linux-${ANDROID_SDK_REVISION}.zip \
&& unzip -q ${PACKAGE_NAME} \
&& rm -f ${PACKAGE_NAME}
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux.zip \
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \
&& wget -q https://dl.google.com/android/repository/${PACKAGE_NAME} \
&& echo "${ANDROID_NDK_HASH} ${PACKAGE_NAME}" | sha1sum -c \
&& unzip -q ${PACKAGE_NAME} \
@@ -99,25 +98,27 @@ RUN wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz
&& make -j${THREADS} \
&& make -j${THREADS} install
ARG BOOST_VERSION=1_85_0
ARG BOOST_VERSION_DOT=1.85.0
ARG BOOST_HASH=7009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617
RUN wget -q https://archives.boost.io/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
ARG BOOST_VERSION=1_74_0
ARG BOOST_VERSION_DOT=1.74.0
ARG BOOST_HASH=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1
RUN wget -q https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \
&& tar -xf boost_${BOOST_VERSION}.tar.bz2 \
&& rm -f boost_${BOOST_VERSION}.tar.bz2 \
&& cd boost_${BOOST_VERSION} \
&& PATH=${HOST_PATH} ./bootstrap.sh --prefix=${PREFIX} \
&& printf "using clang : arm : ${ANDROID_CLANGPP} :\n<cxxflags>\"-fPIC\"\n<cflags>\"-fPIC\" ;" > user.jam \
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} ./b2 --build-type=minimal link=static runtime-link=static \
--with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization \
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang-arm threading=multi \
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} --user-config=user.jam architecture=arm address-model=64 \
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang threading=multi \
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} \
cflags='--target=aarch64-linux-android' \
cxxflags='--target=aarch64-linux-android' \
linkflags='--target=aarch64-linux-android --sysroot=${ANDROID_NDK_ROOT}/platforms/${ANDROID_API}/arch-arm64 ${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so -nostdlib++' \
install -j${THREADS} \
&& rm -rf $(pwd)
ARG OPENSSL_VERSION=1.1.1w
ARG OPENSSL_HASH=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8
ARG OPENSSL_VERSION=1.1.1u
ARG OPENSSL_HASH=e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
@@ -132,9 +133,9 @@ RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
ARG EXPAT_VERSION=2.6.4
ARG EXPAT_HASH=8dc480b796163d4436e6f1352e71800a774f73dbae213f1860b60607d2a83ada
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-${EXPAT_VERSION}.tar.bz2 && \
ARG EXPAT_VERSION=2.4.1
ARG EXPAT_HASH=2f9b6a580b94577b150a7d5617ad4643a4301a6616ff459307df3e225bcfbf40
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${EXPAT_VERSION}.tar.bz2 && \
echo "${EXPAT_HASH} expat-${EXPAT_VERSION}.tar.bz2" | sha256sum -c && \
tar -xf expat-${EXPAT_VERSION}.tar.bz2 && \
rm expat-${EXPAT_VERSION}.tar.bz2 && \
@@ -144,8 +145,8 @@ RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-${
make -j$THREADS install && \
rm -rf $(pwd)
ARG UNBOUND_VERSION=1.22.0
ARG UNBOUND_HASH=c5dd1bdef5d5685b2cedb749158dd152c52d44f65529a34ac15cd88d4b1b3d43
ARG UNBOUND_VERSION=1.16.2
ARG UNBOUND_HASH=2e32f283820c24c51ca1dd8afecfdb747c7385a137abe865c99db4b257403581
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.tar.gz && \
echo "${UNBOUND_HASH} unbound-${UNBOUND_VERSION}.tar.gz" | sha256sum -c && \
tar -xzf unbound-${UNBOUND_VERSION}.tar.gz && \
@@ -156,8 +157,8 @@ RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.t
make -j$THREADS install && \
rm -rf $(pwd)
ARG ZMQ_VERSION=v4.3.5
ARG ZMQ_HASH=622fc6dde99ee172ebaa9c8628d85a7a1995a21d
ARG ZMQ_VERSION=v4.3.4
ARG ZMQ_HASH=4097855ddaaa65ed7b5e8cb86d143842a594eebd
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
&& cd libzmq \
&& git checkout ${ZMQ_HASH} \
@@ -168,8 +169,8 @@ RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
ARG SODIUM_VERSION=1.0.20-RELEASE
ARG SODIUM_HASH=9511c982fb1d046470a8b42aa36556cdb7da15de
ARG SODIUM_VERSION=1.0.18
ARG SODIUM_HASH=4f5e89fa84ce1d178a6765b8b46f2b6f91216677
RUN set -ex \
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} --depth 1 \
&& cd libsodium \
@@ -197,20 +198,23 @@ RUN git clone -b libgcrypt-1.10.1 --depth 1 git://git.gnupg.org/libgcrypt.git \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
RUN git clone -b v3.31.4 --depth 1 https://github.com/Kitware/CMake \
RUN git clone -b v3.24.2 --depth 1 https://github.com/Kitware/CMake \
&& cd CMake \
&& git reset --hard 569b821a138a4d3f7f4cc42c0cf5ae5e68d56f96 \
&& git reset --hard 31f835410efeea50acd43512eb9e5646a26ea177 \
&& PATH=${HOST_PATH} ./bootstrap \
&& PATH=${HOST_PATH} make -j${THREADS} \
&& PATH=${HOST_PATH} make -j${THREADS} install \
&& rm -rf $(pwd)
# Workaround
ENV NEW_SDK_ROOT=${WORKDIR}/sdk
RUN mkdir ${NEW_SDK_ROOT} \
&& cp -r ${ANDROID_SDK_ROOT}/licenses ${NEW_SDK_ROOT} \
&& cp -r ${ANDROID_SDK_ROOT}/platforms ${NEW_SDK_ROOT} \
&& cp -r ${ANDROID_SDK_ROOT}/build-tools ${NEW_SDK_ROOT}
RUN GRADLE_VERSION=5.6.4 \
&& GRADLE_HASH=1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d \
&& wget -q https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
&& echo "${GRADLE_HASH} gradle-${GRADLE_VERSION}-bin.zip" | sha256sum -c \
&& GRADLE_LOCAL_PATH=gradle/wrapper/dists/gradle-${GRADLE_VERSION}-bin/bxirm19lnfz6nurbatndyydux \
&& mkdir -p ${GRADLE_LOCAL_PATH} \
&& mv gradle-${GRADLE_VERSION}-bin.zip ${GRADLE_LOCAL_PATH}
ENV GRADLE_USER_HOME=${WORKDIR}/gradle
CMD set -ex \
&& cd /monero-gui \
@@ -228,12 +232,10 @@ CMD set -ex \
-DBoost_USE_STATIC_RUNTIME=ON \
-DLRELEASE_PATH="${PREFIX}/bin" \
-DQT_ANDROID_APPLICATION_BINARY="monero-wallet-gui" \
-DANDROID_SDK="${NEW_SDK_ROOT}" \
-DANDROID_SDK="${ANDROID_SDK_ROOT}" \
-DWITH_SCANNER=ON \
-DWITH_DESKTOP_ENTRY=OFF \
../../.. \
&& PATH=${HOST_PATH} make generate_translations_header \
&& sed -i -e "s#../monero/external/randomx/librandomx.a##" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
&& sed -i -e "s#-lm#-lm ../monero/external/randomx/librandomx.a#" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
&& make -j${THREADS} -C src \
&& make -j${THREADS} apk

View File

@@ -1,7 +1,7 @@
FROM ubuntu:18.04
FROM ubuntu:16.04
ARG THREADS=1
ARG QT_VERSION=v5.15.18-lts-lgpl
ARG QT_VERSION=v5.15.13-lts-lgpl
ENV CFLAGS="-fPIC"
ENV CPPFLAGS="-fPIC"
@@ -10,7 +10,7 @@ ENV SOURCE_DATE_EPOCH=1397818193
RUN apt update && \
apt install -y automake autopoint bison gettext git gperf libgl1-mesa-dev libglib2.0-dev \
libpng-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
libpng12-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
pkg-config python wget xutils-dev
RUN git clone -b xorgproto-2020.1 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xorgproto && \
@@ -121,8 +121,8 @@ RUN git clone -b v1.3 --depth 1 https://github.com/madler/zlib && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b VER-2-10-2 --depth 1 https://gitlab.freedesktop.org/freetype/freetype.git && \
cd freetype && \
RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
cd freetype2 && \
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
./autogen.sh && \
./configure --disable-shared --enable-static --with-zlib=no && \
@@ -156,7 +156,7 @@ RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN wget https://archives.boost.io/release/1.80.0/source/boost_1_80_0.tar.gz && \
RUN wget https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz && \
echo "4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 boost_1_80_0.tar.gz" | sha256sum -c && \
tar -xzf boost_1_80_0.tar.gz && \
rm boost_1_80_0.tar.gz && \
@@ -233,9 +233,9 @@ RUN git clone -b v1.0.26 --depth 1 https://github.com/libusb/libusb && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b hidapi-0.15.0 --depth 1 https://github.com/libusb/hidapi && \
RUN git clone -b hidapi-0.13.1 --depth 1 https://github.com/libusb/hidapi && \
cd hidapi && \
git reset --hard d6b2a974608dec3b76fb1e36c189f22b9cf3650c && \
git reset --hard 4ebce6b5059b086d05ca7e091ce04a5fd08ac3ac && \
./bootstrap && \
./configure --disable-shared --enable-static && \
make -j$THREADS && \

View File

@@ -1,7 +1,7 @@
FROM ubuntu:20.04
ARG THREADS=1
ARG QT_VERSION=v5.15.18-lts-lgpl
ARG QT_VERSION=v5.15.13-lts-lgpl
ENV SOURCE_DATE_EPOCH=1397818193
RUN apt update && \
@@ -12,9 +12,9 @@ RUN apt update && \
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
update-alternatives --set x86_64-w64-mingw32-gcc $(which x86_64-w64-mingw32-gcc-posix)
RUN git clone -b v0.18.4.6 --depth 1 https://github.com/monero-project/monero && \
RUN git clone -b v0.18.2.0 --depth 1 https://github.com/monero-project/monero && \
cd monero && \
git reset --hard dbcc7d212c094bd1a45f7291dbb99a4b4627a96d && \
git reset --hard 99be9a044f3854f339548e2d99c539c18d7b1b01 && \
cp -a contrib/depends / && \
cd .. && \
rm -rf monero

View File

@@ -60,7 +60,9 @@ The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
GUI development funding and/or some supporting services are also graciously provided by [sponsors](https://www.getmonero.org/community/sponsorships/):
[<img width="150" src="https://www.getmonero.org/img/sponsors/tarilabs.png"/>](https://tarilabs.com/)
[<img width="150" src="https://www.getmonero.org/img/sponsors/globee.png"/>](https://globee.com/)
[<img width="150" src="https://www.getmonero.org/img/sponsors/symas.png"/>](https://symas.com/)
[<img width="150" src="https://www.getmonero.org/img/sponsors/forked_logo.png"/>](http://www.forked.net/)
[<img width="150" src="https://www.getmonero.org/img/sponsors/macstadium.png"/>](https://www.macstadium.com/)
There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0).
@@ -94,9 +96,9 @@ Packaging for your favorite distribution would be a welcome contribution!
## Compiling the Monero GUI from source
*Note*: Qt 5.12 is the minimum version required to build the GUI.
*Note*: Qt 5.9.7 is the minimum version required to build the GUI.
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/release-v0.18/contrib/gitian/README.md).
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/master/contrib/gitian/README.md).
### Building Reproducible Windows static binaries with Docker (any OS)
@@ -105,7 +107,7 @@ Packaging for your favorite distribution would be a welcome contribution!
```
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
```
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
\* `master` - replace with the desired version tag (e.g. `v0.18.3.3`) to build the release binaries.
3. Prepare build environment
```
cd monero-gui
@@ -128,7 +130,7 @@ Packaging for your favorite distribution would be a welcome contribution!
```
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
```
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
\* `master` - replace with the desired version tag (e.g. `v0.18.3.3`) to build the release binaries.
3. Prepare build environment
```
cd monero-gui
@@ -142,9 +144,8 @@ Packaging for your favorite distribution would be a welcome contribution!
```
\* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory
\* `4` - number of CPU threads to use
5. Monero GUI Linux static binary will be placed in `monero-gui/build/release/bin` directory
6. (*Note*) This process is only for building `monero-wallet-gui`, `monerod` has to be built separately according to the instructions in the `monero` repository.
7. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
5. Monero GUI Linux static binaries will be placed in `monero-gui/build/release/bin` directory
6. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
```
docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'shasum -a 256 /monero-gui/build/release/bin/monero-wallet-gui'
```
@@ -309,7 +310,7 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names
```
pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre mingw-w64-x86_64-angleproject
pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre
```
You find more details about those dependencies in the [Monero documentation](https://github.com/monero-project/monero). Note that that there is no more need to compile Boost from source; like everything else, you can install it now with a MSYS2 package.

View File

@@ -26,19 +26,16 @@ if(APPLE OR (WIN32 AND NOT STATIC))
)
endif()
# Copy Boost dylibs that macdeployqt doesn't pick up
find_package(Boost QUIET COMPONENTS atomic container date_time)
set(_boost_extras Boost::atomic Boost::container Boost::date_time)
foreach(_tgt IN LISTS _boost_extras)
if(TARGET ${_tgt})
add_custom_command(TARGET deploy POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${_tgt}>"
"$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
COMMENT "Copying $<TARGET_FILE_NAME:${_tgt}>"
)
endif()
endforeach()
# libbost_filesyste-mt.dylib has a dependency on libboost_atomic-mt.dylib, maydeployqt does not copy it by itself
find_package(Boost COMPONENTS atomic)
get_target_property(BOOST_ATOMIC_LIB_PATH Boost::atomic LOCATION)
if(EXISTS ${BOOST_ATOMIC_LIB_PATH})
add_custom_command(TARGET deploy
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${BOOST_ATOMIC_LIB_PATH}" "$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
COMMENT "Copying libboost_atomic-mt.dylib"
)
endif()
# Apple Silicon requires all binaries to be codesigned
find_program(CODESIGN_EXECUTABLE NAMES codesign)
@@ -51,12 +48,8 @@ if(APPLE OR (WIN32 AND NOT STATIC))
endif()
elseif(WIN32)
find_program(QMAKE_EXECUTABLE qmake HINTS "${_qt_bin_dir}")
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
if(NOT QMAKE_EXECUTABLE OR NOT WINDEPLOYQT_EXECUTABLE)
message(WARNING "Deploy requires qmake.exe and windeployqt.exe (no -qt5 suffix) in ${_qt_bin_dir}")
endif()
add_custom_command(TARGET deploy POST_BUILD
add_custom_command(TARGET monero-wallet-gui POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE:monero-wallet-gui>" -no-translations -qmldir="${CMAKE_SOURCE_DIR}"
COMMENT "Running windeployqt..."
)
@@ -65,6 +58,7 @@ if(APPLE OR (WIN32 AND NOT STATIC))
libboost_filesystem-mt.dll
libboost_locale-mt.dll
libboost_program_options-mt.dll
libboost_regex-mt.dll
libboost_serialization-mt.dll
libboost_thread-mt.dll
libprotobuf.dll
@@ -103,18 +97,12 @@ if(APPLE OR (WIN32 AND NOT STATIC))
libssl-3-x64.dll
libcrypto-3-x64.dll
#icu
libicudt78.dll
libicuin78.dll
libicuio78.dll
libicutu78.dll
libicuuc78.dll
libicudt74.dll
libicuin74.dll
libicuio74.dll
libicutu74.dll
libicuuc74.dll
)
# Boost Regex is header-only since 1.77
if (Boost_VERSION_STRING VERSION_LESS 1.77.0)
list(APPEND WIN_DEPLOY_DLLS libboost_regex-mt.dll)
endif()
list(TRANSFORM WIN_DEPLOY_DLLS PREPEND "$ENV{MSYSTEM_PREFIX}/bin/")
add_custom_command(TARGET deploy
POST_BUILD

View File

@@ -38,7 +38,7 @@ import "." as MoneroComponents
import "effects/" as MoneroEffects
import "../js/Utils.js" as Utils
FocusScope {
Item {
id: root
visible: false
@@ -50,7 +50,6 @@ FocusScope {
property bool passwordDialogMode
property bool passphraseDialogMode
property bool newPasswordDialogMode
property bool backgroundSyncing
// same signals as Dialog has
signal accepted()
@@ -65,6 +64,8 @@ FocusScope {
capsLockTextLabel.visible = oshelper.isCapsLock();
passwordInput1.reset();
passwordInput2.reset();
if(!appWindow.currentWallet || appWindow.active)
passwordInput1.input.forceActiveFocus();
root.walletName = walletName ? walletName : ""
errorTextLabel.text = errorText ? errorText : "";
leftPanel.enabled = false
@@ -74,14 +75,12 @@ FocusScope {
root.visible = true;
appWindow.hideBalanceForced = true;
appWindow.updateBalance();
Qt.callLater(() => passwordInput1.input.forceActiveFocus())
}
function open(walletName, errorText, okButtonText, okButtonIcon, backgroundSyncOn) {
function open(walletName, errorText, okButtonText, okButtonIcon) {
passwordDialogMode = true;
passphraseDialogMode = false;
newPasswordDialogMode = false;
backgroundSyncing = backgroundSyncOn || false;
root.okButtonText = okButtonText;
root.okButtonIcon = okButtonIcon ? okButtonIcon : "";
_openInit(walletName, errorText);
@@ -91,7 +90,6 @@ FocusScope {
passwordDialogMode = false;
passphraseDialogMode = true;
newPasswordDialogMode = false;
backgroundSyncing = false;
_openInit("", "");
}
@@ -99,7 +97,6 @@ FocusScope {
passwordDialogMode = false;
passphraseDialogMode = false;
newPasswordDialogMode = true;
backgroundSyncing = false;
_openInit("", "");
}
@@ -207,13 +204,12 @@ FocusScope {
font.family: MoneroComponents.Style.fontLight.name
Layout.fillWidth: true
wrapMode: Text.Wrap
text: qsTr("CAPS LOCK IS ON.") + translationManager.emptyString;
text: qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString;
}
MoneroComponents.LineEdit {
id: passwordInput1
password: true
input.focus: root.visible && (appWindow.active || Qt.application.state === Qt.ApplicationActive)
Layout.topMargin: 6
Layout.fillWidth: true
KeyNavigation.tab: {
@@ -304,18 +300,6 @@ FocusScope {
onClicked: onOk()
}
}
Label {
visible: backgroundSyncing
text: qsTr("Syncing in the background...") + translationManager.emptyString;
Layout.fillWidth: true
font.pixelSize: 14
font.family: MoneroComponents.Style.fontLight.name
font.italic: true
color: MoneroComponents.Style.defaultFontColor
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 KiB

View File

@@ -23,7 +23,7 @@ You would think timestamp preservation is no problem when unpacking the zip arch
In any case, after unpacking, check the file dates in the `bin` directory where the installer script looks for them with the dates of the files in the zip file: They must be identical.
Note that the following line in `Monero.iss` is also important regarding file timestamps:
Note that the the following line in `Monero.iss` is also important regarding file timestamps:
TimeStampsInUTC=yes

View File

@@ -21,6 +21,7 @@ function addressTruncatePretty(address, blocks){
if(typeof(address) === "undefined") return "";
if(typeof(blocks) === "undefined") blocks = 2;
blocks = blocks <= 1 ? 1 : blocks >= 23 ? 23 : blocks;
var ret = "";
return address.substring(0, 4 * blocks).match(/.{1,4}/g).join(' ') + " .. " + address.substring(address.length - 4 * blocks).match(/.{1,4}/g).join(' ');
}
@@ -69,7 +70,7 @@ function checkSignature(signature) {
}
function isValidOpenAliasAddress(address) {
var regex = /^[A-Za-z0-9-@]+(\.[A-Za-z0-9-]+)+$/; // Basic domain structure, allow email-like address
var regex = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+$/; // Basic domain structure
if (!regex.test(address)) {
return false;

View File

@@ -53,7 +53,7 @@ function ago(epoch) {
// Returns '<delta> [seconds|minutes|hours|days] ago' string given an epoch
var now = new Date().getTime() / 1000;
var delta = Math.max(now - epoch, 0);
var delta = now - epoch;
if(delta < 60)
return qsTr("%n second(s) ago", "0", Math.floor(delta))

View File

@@ -166,7 +166,7 @@ function getApproximateBlockchainHeight(_date, _nettype){
if(_nettype == "Testnet" || _nettype == "Stagenet"){
// testnet got some huge rollbacks, so the estimation is way off
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : _nettype == "Stagenet" ? 60000 : 30000;
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : 30000;
if(approxBlockchainHeight > approximateTestnetRolledBackBlocks)
approxBlockchainHeight -= approximateTestnetRolledBackBlocks
}

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -22,7 +22,7 @@ Lojban
<!-- <language display_name="English (ZA)" locale="en_SA" wallet_language="English" flag="/lang/flags/za.png" qs="none"/> -->
<!-- <language display_name="العربية (PS)" locale="ar_PS" wallet_language="English" flag="/lang/flags/ps.png" qs="none"/> -->
<language display_name="Deutsch" locale="de_DE" wallet_language="Deutsch" flag="/lang/flags/de.png" qs="none"/>
<language display_name="Esperanto" locale="eo_EO" wallet_language="Esperanto" flag="/lang/flags/eo.png" qs="none"/>
<language display_name="Esperanto" locale="eo" wallet_language="Esperanto" flag="/lang/flags/esperanto.png" qs="none"/>
<language display_name="Español" locale="es_ES" wallet_language="Español" flag="/lang/flags/es.png" qs="none"/>
<language display_name="Français" locale="fr_FR" wallet_language="Français" flag="/lang/flags/fr.png" qs="none"/>
<language display_name="Svenska" locale="sv_SE" wallet_language="English" flag="/lang/flags/se.png" qs="none"/>

122
main.qml
View File

@@ -94,13 +94,11 @@ ApplicationWindow {
readonly property string localDaemonAddress : "localhost:" + getDefaultDaemonRpcPort(persistentSettings.nettype)
property string currentDaemonAddress;
property int disconnectedEpoch: 0
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 110 : 270 // GB
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 55 : 150 // GB
property alias viewState: rootItem.state
property string prevSplashText;
property bool splashDisplayedBeforeButtonRequest;
property bool themeTransition: false
property int backgroundSyncType: Wallet.BackgroundSync_Off;
property bool isQuitting: false
// fiat price conversion
property real fiatPrice: 0
@@ -135,12 +133,6 @@ ApplicationWindow {
}
function lock() {
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
appWindow.showProcessingSplash(qsTr("Locking..."));
currentWallet.startBackgroundSync()
return;
}
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
passwordDialog.onAcceptedCallback = function() {
if(walletPassword === passwordDialog.password)
@@ -283,15 +275,6 @@ ApplicationWindow {
persistentSettings.kdfRounds);
}
function gracefulQuit() {
if (isQuitting)
return;
isQuitting = true;
closeWallet(function() {
Qt.quit();
})
}
function closeWallet(callback) {
// Disconnect all listeners
@@ -305,9 +288,6 @@ ApplicationWindow {
currentWallet.heightRefreshed.disconnect(onHeightRefreshed);
currentWallet.refreshed.disconnect(onWalletRefresh)
currentWallet.updated.disconnect(onWalletUpdate)
currentWallet.backgroundSyncSetup.disconnect(onBackgroundSyncSetup)
currentWallet.backgroundSyncStarted.disconnect(onBackgroundSyncStarted)
currentWallet.backgroundSyncStopped.disconnect(onBackgroundSyncStopped)
currentWallet.newBlock.disconnect(onWalletNewBlock)
currentWallet.moneySpent.disconnect(onWalletMoneySent)
currentWallet.moneyReceived.disconnect(onWalletMoneyReceived)
@@ -344,7 +324,6 @@ ApplicationWindow {
walletName = usefulName(wallet.path)
viewOnly = currentWallet.viewOnly;
backgroundSyncType = currentWallet.getBackgroundSyncType();
// New wallets saves the testnet flag in keys file.
if(persistentSettings.nettype != currentWallet.nettype) {
@@ -356,9 +335,6 @@ ApplicationWindow {
currentWallet.heightRefreshed.connect(onHeightRefreshed);
currentWallet.refreshed.connect(onWalletRefresh)
currentWallet.updated.connect(onWalletUpdate)
currentWallet.backgroundSyncSetup.connect(onBackgroundSyncSetup)
currentWallet.backgroundSyncStarted.connect(onBackgroundSyncStarted)
currentWallet.backgroundSyncStopped.connect(onBackgroundSyncStopped)
currentWallet.newBlock.connect(onWalletNewBlock)
currentWallet.moneySpent.connect(onWalletMoneySent)
currentWallet.moneyReceived.connect(onWalletMoneyReceived)
@@ -568,15 +544,6 @@ ApplicationWindow {
}
}
// Don't allow opening background wallets in the GUI
if (wallet.isBackgroundWallet()) {
passwordDialog.onCancel();
appWindow.showStatusMessage(qsTr("Can't open background wallets in the GUI"),6);
console.log("closing background wallet");
closeWallet();
return;
}
// wallet opened successfully, subscribing for wallet updates
connectWallet(wallet)
@@ -618,17 +585,16 @@ ApplicationWindow {
devicePassphraseDialog.open(on_device)
}
function onWalletUpdate(stoppedBackgroundSync) {
function onWalletUpdate() {
if (!currentWallet)
return;
console.log(">>> wallet updated")
updateBalance();
// Update history if new block found since last update or background sync was just stopped
if(foundNewBlock || stoppedBackgroundSync) {
if (foundNewBlock)
console.log("New block found - updating history")
// Update history if new block found since last update
if(foundNewBlock) {
foundNewBlock = false;
console.log("New block found - updating history")
currentWallet.history.refresh(currentWallet.currentSubaddressAccount)
if(middlePanel.state == "History")
@@ -636,61 +602,6 @@ ApplicationWindow {
}
}
function onBackgroundSyncSetup() {
console.log(">>> background sync setup");
hideProcessingSplash();
if (currentWallet.status !== Wallet.Status_Ok) {
console.error("Error setting up background sync: ", currentWallet.errorString);
appWindow.showStatusMessage(currentWallet.errorString, 5);
return;
}
appWindow.backgroundSyncType = currentWallet.getBackgroundSyncType();
}
function onBackgroundSyncStarted() {
console.log(">>> background sync started");
hideProcessingSplash();
var started = currentWallet.status === Wallet.Status_Ok;
if (!started) {
console.error("Error starting background sync: ", currentWallet.errorString);
appWindow.showStatusMessage(currentWallet.errorString, 5);
}
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
passwordDialog.onAcceptedCallback = function() {
if(walletPassword === passwordDialog.password) {
if (currentWallet && started) {
appWindow.showProcessingSplash(qsTr("Unlocking..."));
currentWallet.stopBackgroundSync(walletPassword);
} else {
passwordDialog.close();
}
} else {
passwordDialog.showError(qsTr("Wrong password") + translationManager.emptyString);
}
}
passwordDialog.open(usefulName(persistentSettings.wallet_path), "", "", "", started);
}
function onBackgroundSyncStopped() {
console.log(">>> background sync stopped");
var stopped = currentWallet.status === Wallet.Status_Ok;
if (!stopped) {
hideProcessingSplash();
console.error("Error stopping background sync: ", currentWallet.errorString);
// If there is an error stopping background sync, the spend key
// won't be loaded and the wallet will be in a broken state. Don't
// let the user continue normal wallet operations in this state.
passwordDialog.showError(qsTr("Error stopping background sync: ") + currentWallet.errorString);
return;
}
onWalletUpdate(stopped);
hideProcessingSplash();
passwordDialog.close();
}
function connectRemoteNode() {
console.log("connecting remote node");
@@ -1747,7 +1658,7 @@ ApplicationWindow {
onRejected: console.log("data dir selection canceled")
onAccepted: {
var dataDir = walletManager.urlToLocalPath(blockchainFileDialog.fileUrl)
var validator = daemonManager.validateDataDir(dataDir, estimatedBlockchainSize);
var validator = daemonManager.validateDataDir(dataDir);
if(validator.valid) {
persistentSettings.blockchainDataDir = dataDir;
} else {
@@ -2347,20 +2258,6 @@ ApplicationWindow {
var inactivity = Utils.epoch() - appWindow.userLastActive;
if(inactivity < (persistentSettings.lockOnUserInActivityInterval * 60)) return;
if (inputDialogVisible) inputDialog.close()
remoteNodeDialog.close();
informationPopup.close()
txConfirmationPopup.close()
txConfirmationPopup.clearFields()
txConfirmationPopup.rejected()
successfulTxPopup.close();
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
appWindow.showProcessingSplash(qsTr("Locking..."));
currentWallet.startBackgroundSync()
return;
}
passwordDialog.onAcceptedCallback = function() {
if(walletPassword === passwordDialog.password){
passwordDialog.close();
@@ -2373,6 +2270,13 @@ ApplicationWindow {
}
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
if (inputDialogVisible) inputDialog.close()
remoteNodeDialog.close();
informationPopup.close()
txConfirmationPopup.close()
txConfirmationPopup.clearFields()
txConfirmationPopup.rejected()
successfulTxPopup.close();
passwordDialog.open();
}

2
monero

Submodule monero updated: dbcc7d212c...81d4db08eb

View File

@@ -1447,6 +1447,7 @@ Rectangle {
var txs = [];
for (var i = 0; i < root.txData.length; i++){
var item = root.txData[i];
var matched = "";
// daterange filtering
if(item.timestamp < fromDate || item.timestamp > toDate){
@@ -1542,7 +1543,6 @@ Rectangle {
function updateTransactionsFromModel() {
// This function copies the items of `appWindow.currentWallet.historyModel` to `root.txModelData`, as a list of javascript objects
if(currentWallet == null || typeof currentWallet.history === "undefined" ) return;
if(currentWallet.isBackgroundSyncing()) return;
var _model = root.model;
var total = 0

View File

@@ -384,7 +384,6 @@ Rectangle {
ListElement { column1: qsTr("Mini") ; column2: ""; priority: 0}
ListElement { column1: qsTr("Main") ; column2: ""; priority: 1}
ListElement { column1: qsTr("Nano") ; column2: ""; priority: 2}
}
ColumnLayout {
@@ -401,7 +400,7 @@ Rectangle {
MoneroComponents.Tooltip {
id: chainsHelpTooltip
text: qsTr("Use the mini or nano chains if you have a low hashrate.") + translationManager.emptyString
text: qsTr("Use the mini chain if you have a low hashrate.") + translationManager.emptyString
}
MouseArea {
@@ -449,43 +448,26 @@ Rectangle {
id: flagsHelpTooltip
text: "
Usage:<br>
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
--host IP address of your Monero node, default is 127.0.0.1<br>
--rpc-port monerod RPC API port number, default is 18081<br>
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
--stratum-ban-time N Number of seconds to ban misbehaving stratum client, default is 600<br>
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
--loglevel Verbosity of the log, integer number between 0 and 6<br>
--data-dir Path to store general p2pool files (log, cache, peer data, etc.), default is current directory<br>
--sidechain-config Name of the p2pool sidechain parameters file (only use it if you run your own sidechain)<br>
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
--stratum-api An alias for --local-api<br>
--no-cache Disable p2pool.cache<br>
--no-color Disable colors in console output<br>
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
--no-autodiff Disable automatic difficulty adjustment for miners connected to stratum (WARNING: incompatible with Nicehash and MRR)<br>
--rpc-login Specify username[:password] required for Monero RPC server<br>
--socks5 Specify IP:port of a SOCKS5 proxy to use for outgoing connections<br>
--no-dns Disable DNS queries, use only IP addresses to connect to peers (seed node DNS will be unavailable too)<br>
--p2p-external-port Port number that your router uses for mapping to your local p2p port. Use it if you are behind a NAT and still want to accept incoming connections<br>
--no-upnp Disable UPnP port forwarding<br>
--no-igd An alias for --no-upnp<br>
--upnp-stratum Port forward Stratum port (it's not forwarded by default)<br>
--merge-mine IP:port and wallet address for another blockchain to merge mine with<br>
--version Print p2pool's version and build details<br>
--tls-cert file Load TLS certificate chain from \"file\" in the PEM format<br>
--tls-cert-key file Load TLS certificate private key from \"file\" in the PEM format<br>
--rpc-ssl Enable SSL on RPC connections to the Monero node<br>
--rpc-ssl-fingerprint base64-encoded fingerprint of the Monero node's certificate (optional, use it for certificate pinning)<br>
--no-stratum-http Disable HTTP on Stratum ports<br>
--help Show this help message
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
--host IP address of your Monero node, default is 127.0.0.1<br>
--rpc-port monerod RPC API port number, default is 18081<br>
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
--loglevel Verbosity of the log, integer number between 0 and 6<br>
--config Name of the p2pool config file<br>
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
--stratum-api An alias for --local-api<br>
--no-cache Disable p2pool.cache<br>
--no-color Disable colors in console output<br>
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
--help Show this help message
"
}
@@ -648,9 +630,6 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
if (chainDropdown.currentIndex === 1) {
chain = "main"
}
if (chainDropdown.currentIndex === 2) {
chain = "nano"
}
var p2poolArgs = persistentSettings.p2poolFlags;
var success = p2poolManager.start(p2poolArgs, address, chain, threads);
if (success)

View File

@@ -31,8 +31,6 @@ import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
import QtQuick.Dialogs 1.2
import moneroComponents.Wallet 1.0
import "../../js/Utils.js" as Utils
import "../../js/Windows.js" as Windows
import "../../components" as MoneroComponents
@@ -157,28 +155,6 @@ Rectangle {
onMoved: persistentSettings.lockOnUserInActivityInterval = value
}
MoneroComponents.CheckBox {
id: backgroundSyncCheckbox
visible: !!currentWallet && !currentWallet.isHwBacked() && !appWindow.viewOnly
checked: appWindow.backgroundSyncType != Wallet.BackgroundSync_Off
text: qsTr("Sync in the background when locked") + translationManager.emptyString
toggleOnClick: false
onClicked: {
if (currentWallet && appWindow) {
appWindow.showProcessingSplash(qsTr("Updating settings..."))
// TODO: add support for custom background password option
var newBackgroundSyncType = Wallet.BackgroundSync_Off
if (currentWallet.getBackgroundSyncType() === Wallet.BackgroundSync_Off)
newBackgroundSyncType = Wallet.BackgroundSync_ReusePassword
// TODO: don't keep the wallet password in memory on the appWindow
// https://github.com/monero-project/monero-gui/issues/1537#issuecomment-410055329
currentWallet.setupBackgroundSync(newBackgroundSyncType, appWindow.walletPassword)
}
}
}
MoneroComponents.CheckBox {
checked: persistentSettings.askStopLocalNode
onClicked: persistentSettings.askStopLocalNode = !persistentSettings.askStopLocalNode

View File

@@ -64,7 +64,7 @@
<file>lang/flags/cz.png</file>
<file>lang/flags/dk.png</file>
<file>lang/flags/eg.png</file>
<file>lang/flags/eo.png</file>
<file>lang/flags/esperanto.png</file>
<file>lang/flags/fi.png</file>
<file>lang/flags/fr.png</file>
<file>lang/flags/de.png</file>
@@ -281,11 +281,8 @@
<file>images/ledgerNanoS.png</file>
<file>images/ledgerNanoSPlus.png</file>
<file>images/ledgerNanoX.png</file>
<file>images/ledgerNanoGen5.png</file>
<file>images/ledgerStax.png</file>
<file>images/ledgerFlex.png</file>
<file>images/trezor3.png</file>
<file>images/trezor5.png</file>
<file>images/trezorT.png</file>
<file>images/trezorT@2x.png</file>
<file>qtquickcontrols2.conf</file>

View File

@@ -38,6 +38,9 @@
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>NSRequiresAquaSystemAppearance</key>
<string>True</string>
<key>CFBundleURLTypes</key>
<array>
<dict>

View File

@@ -297,7 +297,7 @@ void DaemonManager::exit()
m_app_exit = true;
}
QVariantMap DaemonManager::validateDataDir(const QString &dataDir, const int estimatedBlockchainSize) const
QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
{
QVariantMap result;
bool valid = true;
@@ -312,8 +312,9 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir, const int est
valid = false;
}
// Make sure there is 75GB storage available
storageAvailable = storage.bytesAvailable()/1000/1000/1000;
if (storageAvailable < estimatedBlockchainSize) {
if (storageAvailable < 75) {
valid = false;
}
} else {
@@ -338,7 +339,7 @@ bool DaemonManager::checkLmdbExists(QString datadir) {
if (datadir.isEmpty() || datadir.isNull()) {
datadir = QString::fromStdString(tools::get_default_data_dir());
}
return QDir(datadir + "/lmdb").exists();
return validateDataDir(datadir).value("lmdbExists").value<bool>();
}
QString DaemonManager::getArgs(const QString &dataDir) {

View File

@@ -56,7 +56,7 @@ public:
// Send daemon command from qml and prints output in console window.
Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const;
Q_INVOKABLE void exit();
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir, const int estimatedBlockchainSizeGb) const;
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
Q_INVOKABLE bool checkLmdbExists(QString datadir);
Q_INVOKABLE QString getArgs(const QString &dataDir);

View File

@@ -529,69 +529,6 @@ bool Wallet::scanTransactions(const QVector<QString> &txids)
return m_walletImpl->scanTransactions(c);
}
void Wallet::setupBackgroundSync(const Wallet::BackgroundSyncType background_sync_type, const QString &wallet_password)
{
qDebug() << "Setting up background sync";
bool refreshEnabled = m_refreshEnabled;
pauseRefresh();
// run inside scheduler because of lag when stopping/starting refresh
m_scheduler.run([this, refreshEnabled, background_sync_type, &wallet_password] {
m_walletImpl->setupBackgroundSync(
static_cast<Monero::Wallet::BackgroundSyncType>(background_sync_type),
wallet_password.toStdString(),
Monero::optional<std::string>());
if (refreshEnabled)
startRefresh();
emit backgroundSyncSetup();
});
}
Wallet::BackgroundSyncType Wallet::getBackgroundSyncType() const
{
return static_cast<BackgroundSyncType>(m_walletImpl->getBackgroundSyncType());
}
bool Wallet::isBackgroundWallet() const
{
return m_walletImpl->isBackgroundWallet();
}
bool Wallet::isBackgroundSyncing() const
{
return m_walletImpl->isBackgroundSyncing();
}
void Wallet::startBackgroundSync()
{
qDebug() << "Starting background sync";
bool refreshEnabled = m_refreshEnabled;
pauseRefresh();
// run inside scheduler because of lag when stopping/starting refresh
m_scheduler.run([this, refreshEnabled] {
m_walletImpl->startBackgroundSync();
if (refreshEnabled)
startRefresh();
emit backgroundSyncStarted();
});
}
void Wallet::stopBackgroundSync(const QString &password)
{
qDebug() << "Stopping background sync";
bool refreshEnabled = m_refreshEnabled;
pauseRefresh();
// run inside scheduler because of lag when stopping/starting refresh
m_scheduler.run([this, password, refreshEnabled] {
m_walletImpl->stopBackgroundSync(password.toStdString());
if (refreshEnabled)
startRefresh();
emit backgroundSyncStopped();
});
}
bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
{
refreshingSet(true);

View File

@@ -112,14 +112,6 @@ public:
Q_ENUM(ConnectionStatus)
enum BackgroundSyncType {
BackgroundSync_Off = Monero::Wallet::BackgroundSync_Off,
BackgroundSync_ReusePassword = Monero::Wallet::BackgroundSync_ReusePassword,
BackgroundSync_CustomPassword = Monero::Wallet::BackgroundSync_CustomPassword
};
Q_ENUM(BackgroundSyncType)
//! returns mnemonic seed
QString getSeed() const;
@@ -223,17 +215,6 @@ public:
//! scan transactions
Q_INVOKABLE bool scanTransactions(const QVector<QString> &txids);
Q_INVOKABLE void setupBackgroundSync(const BackgroundSyncType background_sync_type, const QString &wallet_password);
Q_INVOKABLE BackgroundSyncType getBackgroundSyncType() const;
Q_INVOKABLE bool isBackgroundWallet() const;
Q_INVOKABLE bool isBackgroundSyncing() const;
//! scan in the background with just the view key (wipe the spend key)
Q_INVOKABLE void startBackgroundSync();
//! bring the spend key back and process background synced txs
Q_INVOKABLE void stopBackgroundSync(const QString &password);
//! refreshes the wallet
Q_INVOKABLE bool refresh(bool historyAndSubaddresses = true);
@@ -388,9 +369,6 @@ signals:
void moneyReceived(const QString &txId, quint64 amount);
void unconfirmedMoneyReceived(const QString &txId, quint64 amount);
void newBlock(quint64 height, quint64 targetHeight);
void backgroundSyncSetup() const;
void backgroundSyncStarted() const;
void backgroundSyncStopped() const;
void addressBookChanged() const;
void historyModelChanged() const;
void walletCreationHeightChanged();

View File

@@ -38,11 +38,6 @@ filter::filter(QObject *parent) :
}
bool filter::eventFilter(QObject *obj, QEvent *ev) {
if (ev->type() == QEvent::Quit) {
emit quitRequested();
return true;
}
// macOS sends fileopen signal for incoming uri handlers
if (ev->type() == QEvent::FileOpen) {
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(ev);

View File

@@ -44,7 +44,6 @@ protected:
bool eventFilter(QObject *obj, QEvent *ev);
signals:
void quitRequested();
void sequencePressed(const QVariant &o, const QVariant &seq);
void sequenceReleased(const QVariant &o, const QVariant &seq);
void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y);

View File

@@ -562,7 +562,6 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
qCritical() << "QrCodeScanner : something went wrong !";
#endif
QObject::connect(eventFilter, &filter::quitRequested, rootObject, [rootObject]{ QMetaObject::invokeMethod(rootObject, "gracefulQuit", Qt::QueuedConnection); });
QObject::connect(eventFilter, SIGNAL(sequencePressed(QVariant,QVariant)), rootObject, SLOT(sequencePressed(QVariant,QVariant)));
QObject::connect(eventFilter, SIGNAL(sequenceReleased(QVariant,QVariant)), rootObject, SLOT(sequenceReleased(QVariant,QVariant)));
QObject::connect(eventFilter, SIGNAL(mousePressed(QVariant,QVariant,QVariant)), rootObject, SLOT(mousePressed(QVariant,QVariant,QVariant)));

View File

@@ -43,8 +43,6 @@
#include <QFileInfo>
#include <QString>
#include <QUrl>
#include <QByteArray>
#include <QRandomGenerator>
#ifdef Q_OS_MAC
#include "qt/macoshelper.h"
#endif
@@ -72,6 +70,9 @@ namespace
QPixmap screenshot()
{
#ifdef Q_OS_MAC
return MacOSHelper::screenshot();
#else
std::unordered_set<QWindow *> hidden;
const QWindowList windows = QGuiApplication::allWindows();
for (QWindow *window : windows)
@@ -90,6 +91,7 @@ QPixmap screenshot()
});
return QGuiApplication::primaryScreen()->grabWindow(0);
#endif
}
} // namespace
@@ -248,18 +250,6 @@ QString OSHelper::temporaryPath() const
return QDir::tempPath();
}
QString OSHelper::randomPassword(int numBytes) const
{
numBytes = qBound(16, numBytes, 128);
QByteArray buf(numBytes, Qt::Uninitialized);
auto *rng = QRandomGenerator::system();
for (int i = 0; i < numBytes; ++i)
buf[i] = char(rng->generate() & 0xFF);
return QString::fromLatin1(buf.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals));
}
bool OSHelper::installed() const
{
#ifdef Q_OS_WIN
@@ -317,7 +307,7 @@ std::pair<quint8, QString> OSHelper::getNetworkTypeAndAddressFromFile(const QStr
address = _address;
if(address.startsWith("5") || address.startsWith("7")){
networkType = NetworkType::STAGENET;
} else if(address.startsWith("9") || address.startsWith("A")){
} else if(address.startsWith("9") || address.startsWith("B")){
networkType = NetworkType::TESTNET;
}
}

View File

@@ -51,7 +51,6 @@ public:
Q_INVOKABLE QString openSaveFileDialog(const QString &title, const QString &folder, const QString &filename) const;
Q_INVOKABLE QString temporaryFilename() const;
Q_INVOKABLE QString temporaryPath() const;
Q_INVOKABLE QString randomPassword(int numBytes = 32) const;
Q_INVOKABLE bool removeTemporaryWallet(const QString &walletName) const;
Q_INVOKABLE bool isCapsLock() const;
Q_INVOKABLE quint8 getNetworkTypeFromFile(const QString &keysPath) const;

View File

@@ -53,21 +53,21 @@ void P2PoolManager::download() {
QString fileName;
QString validHash;
#ifdef Q_OS_WIN
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-windows-x64.zip";
fileName = m_p2poolPath + "/p2pool-v4.13-windows-x64.zip";
validHash = "267006cd1259253052e64e9ac5ae27532cf238e71588444c14624b9432325e9f";
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-windows-x64.zip";
fileName = m_p2poolPath + "/p2pool-v3.10-windows-x64.zip";
validHash = "2b5a37576ac6e73a6f26a0112d9a51360babef765199fbe06a6bfc513ed45581";
#elif defined(Q_OS_LINUX)
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-linux-x64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v4.13-linux-x64.tar.gz";
validHash = "d02361ee5f18e3e53af79436af6dc1772b71aa5ad8582ad88b0764ae2c9289c3";
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-linux-x64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v3.10-linux-x64.tar.gz";
validHash = "441969c999e860231b2e48651747866754bad17292331fb22c5340c8a250168a";
#elif defined(Q_OS_MACOS_AARCH64)
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-macos-aarch64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v4.13-macos-aarch64.tar.gz";
validHash = "fddd309566395a8297738f3fd5cd0fe9d792c3005bb664a1a61befa029e802ad";
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-macos-aarch64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v3.10-macos-aarch64.tar.gz";
validHash = "f8ff6de7b2ac38f0d3ac23e30cc8827d5a1b83c4190f4e79e8db695acc742a68";
#elif defined(Q_OS_MACOS)
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-macos-x64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v4.13-macos-x64.tar.gz";
validHash = "374c42bbb409ed2ef3e5e0b4359441929cc574b2fa9bc8b3bdf7695471f8f94d";
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-macos-x64.tar.gz";
fileName = m_p2poolPath + "/p2pool-v3.10-macos-x64.tar.gz";
validHash = "9b20656556fe4bfe3df1df9a6f2c7c8bc9aa0dd2c4ac66ebca2c8580581ff9f6";
#endif
QFile file(fileName);
epee::net_utils::http::http_simple_client http_client;
@@ -182,10 +182,6 @@ bool P2PoolManager::start(const QString &flags, const QString &address, const QS
arguments << "--start-mining" << threads;
}
if (chain == "nano") {
arguments << "--nano";
}
if (chain == "mini") {
arguments << "--mini";
}

View File

@@ -38,6 +38,7 @@ class MacOSHelper
public:
static bool isCapsLock();
static bool openFolderAndSelectItem(const QUrl &path);
static QPixmap screenshot();
static QString bundlePath();
static void disableWindowTabbing();
};

View File

@@ -68,6 +68,41 @@ bool MacOSHelper::openFolderAndSelectItem(const QUrl &path)
return true;
}
QPixmap MacOSHelper::screenshot()
{
std::unordered_set<uintptr_t> appWindowIds;
for (NSWindow *window in [NSApp windows])
{
appWindowIds.insert((uintptr_t)[window windowNumber]);
}
CFArrayRef onScreenWindows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
const auto onScreenWindowsClenaup = sg::make_scope_guard([&onScreenWindows]() {
CFRelease(onScreenWindows);
});
CFMutableArrayRef foreignWindows = CFArrayCreateMutable(NULL, CFArrayGetCount(onScreenWindows), NULL);
const auto foreignWindowsClenaup = sg::make_scope_guard([&foreignWindows]() {
CFRelease(foreignWindows);
});
for (CFIndex index = 0, count = CFArrayGetCount(onScreenWindows); index < count; ++index)
{
const uintptr_t windowId = reinterpret_cast<const uintptr_t>(CFArrayGetValueAtIndex(onScreenWindows, index));
if (appWindowIds.find(windowId) == appWindowIds.end())
{
CFArrayAppendValue(foreignWindows, reinterpret_cast<const void *>(windowId));
}
}
CGImageRef image = CGWindowListCreateImageFromArray(CGRectInfinite, foreignWindows, kCGWindowListOptionAll);
const auto imageClenaup = sg::make_scope_guard([&image]() {
CFRelease(image);
});
return QtMac::fromCGImageRef(image);
}
QString MacOSHelper::bundlePath()
{
NSBundle *main = [NSBundle mainBundle];

View File

@@ -29,8 +29,6 @@
#include <QtCore>
#include <QCoreApplication>
#include <QtGlobal>
#include <QRandomGenerator>
#include <QStringList>
#include "TailsOS.h"
#include "utils.h"
@@ -98,7 +96,7 @@ QString xdgMime(){
"X-GNOME-FullName=Monero-GUI\n"
"Comment=Monero GUI\n"
"Keywords=Monero;\n"
"Exec=\"%1\" %u\n"
"Exec=%1 %u\n"
"Terminal=false\n"
"Type=Application\n"
"Icon=monero\n"
@@ -136,87 +134,83 @@ void registerXdgMime(){
}
#endif
QString randomUserAgent()
{
const QStringList userAgents = {
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
"Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
"Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
"Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0",
"Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",
"Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0",
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0",
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0",
"Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0",
"Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0",
"Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0",
"Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0",
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6",
"Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0",
"Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
"Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2",
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1",
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1",
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1",
"Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1",
"Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0",
"Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0"
};
QString randomUserAgent(){
QStringList urand;
urand << "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
<< "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0"
<< "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0"
<< "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0"
<< "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0"
<< "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3"
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0"
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
<< "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0"
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0"
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0"
<< "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0"
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0"
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0"
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0"
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0"
<< "Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6"
<< "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
<< "Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
<< "Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0"
<< "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2"
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1"
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1"
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2"
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1"
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
<< "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1"
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1"
<< "Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1"
<< "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1"
<< "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1"
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0"
<< "Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0";
if (userAgents.isEmpty())
return {};
const int idx = QRandomGenerator::global()->bounded(userAgents.size());
return userAgents.at(idx);
// @TODO: Qt 5.10 - QRandomGenerator
int irand = rand() % urand.length();
return urand.at(irand);
}

View File

@@ -47,7 +47,7 @@ ColumnLayout {
return passwordInput.text === passwordInputConfirm.text;
}
function calcPasswordStrength() {
function calcPasswordStrength(inp) {
if(!progressLayout.visible) return;
if(passwordInput.text.length <= 1){
root.passwordFill = 0;

View File

@@ -345,7 +345,7 @@ Rectangle {
console.log("Creating temporary wallet", tmp_wallet_filename)
var nettype = appWindow.persistentSettings.nettype;
var kdfRounds = appWindow.persistentSettings.kdfRounds;
var wallet = walletManager.createWallet(tmp_wallet_filename, oshelper.randomPassword(), persistentSettings.language_wallet, nettype, kdfRounds)
var wallet = walletManager.createWallet(tmp_wallet_filename, "", persistentSettings.language_wallet, nettype, kdfRounds)
wizardController.walletOptionsSeed = wallet.seed
@@ -479,7 +479,7 @@ Rectangle {
var deviceName = wizardController.walletOptionsDeviceName;
connect();
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, oshelper.randomPassword(), nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, "", nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
creatingWalletDeviceSplash();
}

View File

@@ -55,12 +55,9 @@ Rectangle {
ListElement { column1: "Ledger Nano S"; column2: "Ledger";}
ListElement { column1: "Ledger Nano S Plus"; column2: "Ledger";}
ListElement { column1: "Ledger Nano X"; column2: "Ledger";}
ListElement { column1: "Ledger Nano Gen5"; column2: "Ledger";}
ListElement { column1: "Ledger Stax"; column2: "Ledger";}
ListElement { column1: "Ledger Flex"; column2: "Ledger";}
ListElement { column1: "Trezor Model T"; column2: "Trezor";}
ListElement { column1: "Trezor Safe 3"; column2: "Trezor";}
ListElement { column1: "Trezor Safe 5"; column2: "Trezor";}
}
ColumnLayout {
@@ -172,8 +169,6 @@ Rectangle {
return "qrc:///images/trezorT.png";
} else if (trezorType == "Trezor Safe 3") {
return "qrc:///images/trezor3.png";
} else if (trezorType == "Trezor Safe 5") {
return "qrc:///images/trezor5.png";
}
} else if (hardwareWalletType == "Ledger") {
if (ledgerType == "Ledger Nano S") {
@@ -182,12 +177,8 @@ Rectangle {
return "qrc:///images/ledgerNanoSPlus.png";
} else if (ledgerType == "Ledger Nano X") {
return "qrc:///images/ledgerNanoX.png";
} else if (ledgerType == "Ledger Nano Gen5") {
return "qrc:///images/ledgerNanoGen5.png";
} else if (ledgerType == "Ledger Stax") {
return "qrc:///images/ledgerStax.png";
} else if (ledgerType == "Ledger Flex") {
return "qrc:///images/ledgerFlex.png";
}
}
return "";

View File

@@ -86,7 +86,7 @@ Rectangle {
visible: false
text: qsTr("Print this paper, fill it out, and keep it in a safe location. Never share your recovery phrase with anybody, especially with strangers offering technical support.") +
qsTr("Recovery phrase (mnemonic seed)") +
qsTr("These words are a backup of your wallet. They are the only thing needed to access your funds and restore your Monero wallet, so keep this paper in a safe place and do not disclose it to anybody! It is strongly not recommended to store your recovery phrase digitally (in an email, online service, screenshot, photo, or any other type of computer file).") +
qsTr("These words are are a backup of your wallet. They are the only thing needed to access your funds and restore your Monero wallet, so keep this paper in a safe place and do not disclose it to anybody! It is strongly not recommended to store your recovery phrase digitally (in an email, online service, screenshot, photo, or any other type of computer file).") +
qsTr("Wallet creation date") +
qsTr("Wallet restore height") +
qsTr("For instructions on how to restore this wallet, visit www.getmonero.org and go to Resources > User Guides > \"How to restore a wallet from mnemonic seed\". Use only Monero wallets that are trusted and recommended by the Monero community (see a list of them in www.getmonero.org/downloads).") + translationManager.emptyString

View File

@@ -149,7 +149,7 @@ Rectangle {
imageIcon: "qrc:///images/local-node-full.png"
onMenuClicked: {
appWindow.persistentSettings.pruneBlockchain = true;
appWindow.persistentSettings.pruneBlockchain = false; // can be toggled on next page
applyWalletMode(2, 'wizardHome');
}
}

View File

@@ -46,6 +46,7 @@ Rectangle {
return false;
}
var valid = false;
if(wizardController.walletRestoreMode === "keys") {
return wizardWalletInput.verify() && wizardRestoreWallet1.verifyFromKeys();
} else if(wizardController.walletRestoreMode === "seed") {

View File

@@ -72,7 +72,6 @@ Rectangle {
progress: appWindow.walletMode <= 1 ? 2 : 3
onPrevClicked: {
btnNext.enabled = true;
if (appWindow.walletMode <= 1){
wizardStateView.state = "wizardRestoreWallet1";
} else {